Dato che Roma ha ormai raggiunto la temperatura di Marrakech, e nel sacro manuale anti-accolli è esplicitamente vietato immergersi nel caos delle gite fuori porta marittime nei pressi della capitale, ho optato per qualche attività di laboratorio.
Mi sono imbattuto in questo articolo che spiega come eseguire programmi e giochi DOS via browser. Ringrazio l’autore per avermi ispirato in questo afoso pomeriggio romano. Siccome sto rimettendo in piedi il blog (colgo l’occasione per dare il benvenuto a Federico Martellini il nuovo co-autore di DevOpstribe.it) ho pensato di renderlo un po’ più interattivo innestando nella menu bar qualche demo. Una di queste è (come fa già gentilmente https://archive.org/) un’istanza di un gioco del 1991 che ai tempi mi affascinava molto: GORILLA.BAS (sì, per me è sempre stato GORILLA.BAS scritto tutto in maiuscolo e con l’estensione facente parte del nome del gioco).
Creare un container seguendo una parte della guida sopracitata è stato molto semplice. Spiego di seguito i passi e aggiungo i manifest per Kubernetes.
Creare un Dockerfile tipo questo
FROM node:16-alpine
ARG GAME_URL
WORKDIR site
RUN wget -O game.zip $GAME_URL
COPY index.html .
RUN sed -i s/GAME_ARGS/$GAME_ARGS/ index.html
RUN wget https://js-dos.com/6.22/current/js-dos.js && \
wget https://js-dos.com/6.22/current/wdosbox.js && \
wget https://js-dos.com/6.22/current/wdosbox.wasm.js
RUN npm install -g serve
EXPOSE 8000
ENTRYPOINT npx serve -l tcp://0.0.0.0:8000
Build immagine
podman build --build-arg GAME_URL=https://ia601903.us.archive.org/7/items/GorillasQbasic/gorillas_qbasic.zip --build-arg GAME_ARGS=\"gorilla.exe\" -t docker.io/luckysideburn/gorilla_bas:latest
Push immagine
podman push docker.io/luckysideburn/gorilla_bas:latest
Creare manifest (kubectl apply -f … helm era troppo)
apiVersion: apps/v1
kind: Deployment
metadata:
name: gorilla-bas
labels:
app: gorilla-bas
spec:
replicas: 1
selector:
matchLabels:
app: gorilla-bas
template:
metadata:
labels:
app: gorilla-bas
spec:
containers:
- name: gorilla-bas
imagePullPolicy: Always
image: docker.io/luckysideburn/gorilla_bas:latest
ports:
- containerPort: 8000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
generation: 1
name: gorilla-bas
namespace: gorilla-bas
spec:
ingressClassName: nginx
rules:
- host: gorilla-bas.devopstribe.it
http:
paths:
- backend:
service:
name: gorilla-bas
port:
number: 8000
path: /
pathType: Prefix
---
apiVersion: v1
kind: Service
metadata:
name: gorilla-bas
spec:
selector:
app: gorilla-bas
type: ClusterIP
ports:
- protocol: TCP
port: 8000
targetPort: 8000
Repo GitHub
https://github.com/lucky-sideburn/gorilla.bas_k8s
La prova che sta girando davvero in k8s su devopstribe.it
Ho installato kube-ops-view per fare alcune prove ed è a tutti gli effetti esposto nel blog (devo ricordarmi di fare qualche vulnerability scanning, non vorrei essere bucato subito dopo l’atto della pubblicazione di questo post :D)
… comunque ecco il pod di GORILLA.BAS
Per giocarci è possibile andare su https://gorilla-bas.devopstribe.it o su https://archive.org/ che è sicuramente più rock-solid 😀
Thanks all!