Open14
ブラウザで動くSQL学習サイトを作るログ
Linuxのイメージを作る
-
Buildrootを使用してLinuxのイメージを作る
-
apt-getとかをローカルでしたくないのでDockerでどっかーんする(とても時間がかかる)
# ベースイメージ FROM ubuntu:latest # 必要なパッケージのインストール RUN apt-get update && apt-get install -y \ build-essential \ git \ wget \ python3 \ unzip \ cpio \ rsync \ file \ bc \ libncurses-dev \ qemu-system-x86 \ && rm -rf /var/lib/apt/lists/* # 作業ディレクトリを設定 WORKDIR /workspace # 一時ディレクトリの変更 ENV TMPDIR=/workspace/tmp RUN mkdir -p /workspace/tmp # Buildrootのダウンロード RUN git clone https://github.com/buildroot/buildroot.git # デフォルトの構成ファイルを使用してビルド WORKDIR /workspace/buildroot # キャッシュを削除してストレージを節約 RUN make clean # 分割ビルド RUN make qemu_x86_defconfig RUN make # コンテナのエントリポイント CMD ["bash"]
-
-
docker build -t buildroot-env .
-
docker run -it --rm buildroot-env
BuildrootにMySQLをいれる
Buildrootが古い場合
Buildrootのversion(2022.08)が古い場合はBuildrootの中にMySQLがある
make menuconfig
-
Target packages
>Library
>Database
>mysql
を選択し、MySQLを有効化
Buildrootが新しい場合
- Buildrootのパッケージディレクトリに移動
cd /workspace/buildroot/package
- MySQLのパッケージ用ディレクトリを作成
mkdir mysql cd mysql
- MySQLのソースコードをダウンロード
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.4.3.tar.gz
- MySQLをBuildrootに理解させる
- BuildrootメニューにMySQLを追加するためにConfig.inファイルを作成
$ cat - > Config.in config BR2_PACKAGE_MYSQL bool "mysql" help MySQL is a widely used relational database management system.
- MySQLのビルド手順を指定するmysql.mkファイルを作成
$ cat - > mysql.mk MYSQL_VERSION = 8.4.3 MYSQL_SOURCE = mysql-$(MYSQL_VERSION).tar.gz MYSQL_SITE = https://dev.mysql.com/get/Downloads/MySQL-8.0 MYSQL_DEPENDENCIES = $(eval $(generic-package))
- BuildrootメニューにMySQLを追加するためにConfig.inファイルを作成
- BuildrootメニューにMySQLを追加
- BuildrootのトップレベルConfig.inファイルを修正
- MySQLパッケージの選択
- make menuconfigでmysqlを選択
- make を実行しBuildrootのビルドを実行
ビルドが完了すると、output/images/rootfs.ext2ファイルが生成され、これがMySQLを含むLinuxイメージとなる
イメージをローカルに持ってくる
- コンテナIDの確認
docker ps
- ファイルのコピー
docker cp <コンテナID>:/workspace/buildroot/output/images/rootfs.ext2 ./rootfs.ext2
このイメージを https://github.com/copy/v86 を使ったらブラウザで実行できるって本当かな
v86.wasmを用意する
_人人人人人人人人人人人人人_
> Macではビルドができない <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
- 持ってくる
git clone https://github.com/copy/v86.git
cd v86
- build
make all
--------------- やりなおし --------------------------------------------
Buildroot用Dockerfile
# ベースイメージを指定(バージョン固定)
ARG UBUNTU_VERSION=22.04
FROM ubuntu:${UBUNTU_VERSION} AS builder
# 非対話モード設定
ENV DEBIAN_FRONTEND=noninteractive \
TMPDIR=/workspace/tmp
# 作業ディレクトリ
WORKDIR /workspace
# 一時ディレクトリを先に作成 (ca-certificates の post-install 用)
RUN mkdir -p /workspace/tmp
# 証明書の初期設定
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
openssl && \
update-ca-certificates && \
rm -rf /var/lib/apt/lists/*
# 必要なパッケージのインストール(キャッシュ削減・推奨パッケージ抑制)
RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
build-essential \
libncurses-dev \
bison \
flex \
python3 \
python3-pip \
qemu-utils \
qemu-system-x86 \
xz-utils \
wget \
unzip \
cpio \
rsync \
file \
bc && \
rm -rf /var/lib/apt/lists/* && \
mkdir -p /workspace/tmp
# Buildroot リポジトリをクローンし、バージョン固定
ARG BUILDROOT_TAG=2025.02
RUN git clone https://github.com/buildroot/buildroot.git && \
cd buildroot && \
git checkout ${BUILDROOT_TAG}
WORKDIR /workspace/buildroot
# root ユーザーでの configure を許可するための設定
ENV FORCE_UNSAFE_CONFIGURE=1
# QEMU 用デフォルト設定とビルドを一括実行
RUN make qemu_x86_defconfig && \
make -j$(nproc)
# 出力イメージのマウントポイント
VOLUME ["/workspace/buildroot/output/images"]
# エントリポイント
CMD ["bash"]
- docker build -t buildroot-env .
20分くらいかかる - ホスト側にBuildrootをクローン
git clone https://github.com/buildroot/buildroot.git buildroot
cd buildroot
git checkout 2025.02 - ホスト側にMysqlを入れる
- buildroot/packages/の下にmysqlディレクトリを作る
- mysqlディレクトリ直下で Config.inとmysql.mkをつくる
- buildroot/packages/Config.inに
source "package/mysql/Config.in"
の追加
- ホスト側に出力用のディレクトリを作る
mkdir -p buildroot-output/images - コンテナを起動
docker run --rm -it \ -v "$(pwd)/buildroot:/workspace/buildroot" \ -v "$(pwd)/buildroot-output/images:/workspace/buildroot/output/images" \ buildroot-env \ bash
- 以下を実行
# ① 古い設定を投げて cd /workspace/buildroot make distclean # anonymous volume をマウントしていなければ通るはず # ② デフォルト設定を読み込んで make qemu_x86_defconfig # ③ menuconfig で MySQL を有効化 make menuconfig # → Package → Database → mysql を <*> にして保存 # ④ ビルド make -j$(nproc) # 完了後、exit でコンテナを抜ける exit
MacBookProのDockerでやるもんじゃないことがわかった(わからない)
make -j1にしてもDockerがクラッシュする
EC2を立ててやっている、60分くらいたってからビルドが落ちる悲しい
MySQLやめよう
- 自分でmkファイルつくるのが大変
- エラーを探すのが大変
デフォルトにあって、自分でC++とかを弄らなくて良いPosgreにする
イメージが作れたけどそのままだとディスクサイズが足りなかったので、手動で更新
truncate -s 256M rootfs.ext2
e2fsck -f rootfs.ext2
resize2fs rootfs.ext2
qemuで実行できるのを確認した
Linux works pretty well. 64-bit kernels are not supported.
https://github.com/copy/v86
v86は64bitでサポートしていない