LoginSignup
1
1

こんにちは!

様々な技術が進歩し、どんどん便利な世の中になっていきますね:slight_smile:
私も新しい技術は好きなのですが、たまには初心に返ってみようかと思います。

ほとんど覚えてないのですが、一番最初に触れた言語はBASICでした。
まだ小学生だった記憶があります。

当時のBASICがどのバージョンなのか分からないので、FreeBASICを利用して、Dockerで簡単なスクリプトを作ってみます:smiley:

FreeBASICとは

Windows、DOS、および Linux 用の無料/オープンソースなBASICコンパイラーです。
公式サイトはこちら

今回用意するもの

  • Dockerfile
  • FreeBASICのバイナリ
  • BASICスクリプト

FreeBASICのバイナリを取得

DockerをUbuntuベースで作るので、Ubuntu用のバイナリをダウンロードします。
今回使用したバイナリはこちら(※ダウンロードリンクです)
FreeBASIC-1.10.0-ubuntu-22.04-x86_64.tar.gz

ディレクトリ構成

最終的なディレクトリ構成はこちら。
ダウンロードしたファイルを同じ階層に置きます。

$ tree
.
├── Dockerfile
├── FreeBASIC-1.10.0-ubuntu-22.04-x86_64.tar.xz
└── system-info.bas

やりたいこと

  • BASICでシェルを実行して、Docker内部の情報を出力する

本当はゲームを作りたかったのですが、Dockerで実行するには色々と手間がかかるようです。
初回なので、簡単なスクリプトにしました。

実装

それでは、必要なファイルを実装します。
まずはDockerfileから。

Dockerfile
# ベースイメージとしてUbuntuを使用
FROM ubuntu:latest

# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
    tar \
    xz-utils \
    nano \
    gcc \
    libncurses5-dev \
    && rm -rf /var/lib/apt/lists/*

RUN apt-get install -y nano

# FreeBASICのバイナリをコンテナにコピー
COPY FreeBASIC-1.10.0-ubuntu-22.04-x86_64.tar.xz /tmp

# FreeBASICを解凍してインストール
RUN tar -xJf /tmp/FreeBASIC-1.10.0-ubuntu-22.04-x86_64.tar.xz -C /usr/local
ENV PATH="/usr/local/FreeBASIC-1.10.0-ubuntu-22.04-x86_64/bin:${PATH}"

# ワークディレクトリの設定
WORKDIR /workspace

COPY system-info.bas /workspace/system-info.bas

続いて、BASICのファイルを実装。

system-info.bas
PRINT "System information..."
SLEEP 1000

PRINT "### CPU Information: ###"
SHELL "cat /proc/cpuinfo"
PRINT STRING(80, "-")

PRINT "### Memory Usage: ###"
SHELL "free -h"
PRINT STRING(80, "-")

PRINT "### Disk Usage: ###"
SHELL "df -h"
PRINT STRING(80, "-")

PRINT "### Uptime: ###"
SHELL "uptime"
PRINT STRING(80, "-")

PRINT "### Running Processes: ###"
SHELL "ps -aux"
PRINT STRING(80, "-")

PRINT "### Network Interfaces: ###"
SHELL "ifconfig"
PRINT STRING(80, "-")

PRINT "Completed."
SLEEP 5000

コンテナの起動

Dockerfileをビルドして、起動します。

docker build -t basic-env .
docker run -it basic-env

起動直後の状態。

root@53944db891c6:/workspace# ls
system-info.bas

コンパイラのパスも通ってます。

# which fbc
/usr/local/FreeBASIC-1.10.0-ubuntu-22.04-x86_64/bin/fbc

コンパイル

それでは、コンパイルして実行ファイルを生成しましょう。

fbc system-info.bas 

確認してみます。

root@53944db891c6:/workspace# ls
system-info  system-info.bas
root@53944db891c6:/workspace# ll
total 60
drwxr-xr-x 1 root root  4096 Dec 20 12:37 ./
drwxr-xr-x 1 root root  4096 Dec 20 12:36 ../
-rwxr-xr-x 1 root root 46688 Dec 20 12:37 system-info*
-rw-r--r-- 1 root root   510 Dec 20 11:28 system-info.bas
root@53944db891c6:/workspace# 

実行ファイルができてますね。

実行

スクリプトを実行してみましょう。

./system-info

結果はこちら。

root@53944db891c6:/workspace# ./system-info 
Gathering system information...
### CPU Information: ###
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 61
model name	: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
stepping	: 4
cpu MHz		: 2699.999
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 0
cpu cores	: 4
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 20
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase bmi1 smep bmi2 erms rdseed adx smap arat
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips	: 5399.99
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 61
model name	: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
stepping	: 4
cpu MHz		: 2699.999
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 1
cpu cores	: 4
apicid		: 1
initial apicid	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 20
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch intel_ppin fsgsbase bmi1 smep bmi2 erms rdseed adx smap arat
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips	: 5399.99
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

processor	: 2
vendor_id	: GenuineIntel
cpu family	: 6
model		: 61
model name	: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
stepping	: 4
cpu MHz		: 2699.999
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 2
cpu cores	: 4
apicid		: 2
initial apicid	: 2
fpu		: yes
fpu_exception	: yes
cpuid level	: 20
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch intel_ppin fsgsbase bmi1 smep bmi2 erms rdseed adx smap arat
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips	: 5399.99
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

processor	: 3
vendor_id	: GenuineIntel
cpu family	: 6
model		: 61
model name	: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
stepping	: 4
cpu MHz		: 2699.999
cache size	: 3072 KB
physical id	: 0
siblings	: 4
core id		: 3
cpu cores	: 4
apicid		: 3
initial apicid	: 3
fpu		: yes
fpu_exception	: yes
cpuid level	: 20
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch intel_ppin fsgsbase bmi1 smep bmi2 erms rdseed adx smap arat
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds mmio_unknown
bogomips	: 5399.99
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

--------------------------------------------------------------------------------
### Memory Usage: ###
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       575Mi       2.7Gi       1.0Mi       557Mi       2.9Gi
Swap:          1.0Gi          0B       1.0Gi
--------------------------------------------------------------------------------
### Disk Usage: ###
Filesystem      Size  Used Avail Use% Mounted on
overlay          59G   32G   25G  57% /
tmpfs            64M     0   64M   0% /dev
shm              64M     0   64M   0% /dev/shm
/dev/vda1        59G   32G   25G  57% /etc/hosts
tmpfs           2.0G     0  2.0G   0% /proc/acpi
tmpfs           2.0G     0  2.0G   0% /sys/firmware
--------------------------------------------------------------------------------
### Uptime: ###
 12:40:08 up 4 min,  0 users,  load average: 0.06, 0.04, 0.00
--------------------------------------------------------------------------------
### Running Processes: ###
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   4624  3584 pts/0    Ss   12:36   0:00 /bin/bash
root        46  0.0  0.0   3944  2304 pts/0    S+   12:40   0:00 ./system-info
root        55  0.0  0.0   2888  1536 pts/0    S+   12:40   0:00 sh -c ps -aux
root        56  0.0  0.0   7060  2816 pts/0    R+   12:40   0:00 ps -aux
--------------------------------------------------------------------------------
### Network Interfaces: ###
sh: 1: ifconfig: not found
--------------------------------------------------------------------------------
Completed.
root@53944db891c6:/workspace# 

ifconfigは入ってなかったようですが、他のコマンドは実行できました。
Docker内部の情報を見たのは初めてなので、興味深いです。

まとめ

今回は、DockerでBASICを動かしてみました。
グラフィック関連の設定などをやればゲームも動かせるようなので、昔作ったブロック崩しをチャレンジしてみようと思います。

ローカルなら普通に描画できそうですが、どうせならDockerでやってみる予定です。

みなさんも一緒に、色々なチャレンジをして行きましょう!:smiley:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1