Open14

ブラウザで動くSQL学習サイトを作るログ

わかわか

Linuxのイメージを作る

  1. 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"]
      
  2. docker build -t buildroot-env .

  3. docker run -it --rm buildroot-env

わかわか

BuildrootにMySQLをいれる

Buildrootが古い場合

Buildrootのversion(2022.08)が古い場合はBuildrootの中にMySQLがある

  1. make menuconfig
  2. Target packages > Library > Database > mysqlを選択し、MySQLを有効化

Buildrootが新しい場合

  1. Buildrootのパッケージディレクトリに移動
    cd /workspace/buildroot/package
  2. MySQLのパッケージ用ディレクトリを作成
    mkdir mysql
    cd mysql
    
  3. MySQLのソースコードをダウンロード
    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.4.3.tar.gz
    
  4. MySQLをBuildrootに理解させる
    1. BuildrootメニューにMySQLを追加するためにConfig.inファイルを作成
      $ cat - > Config.in
      config BR2_PACKAGE_MYSQL
      bool "mysql"
      help
      MySQL is a widely used relational database management system.
      
    2. 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))
      
  5. BuildrootメニューにMySQLを追加
    1. BuildrootのトップレベルConfig.inファイルを修正
    2. MySQLパッケージの選択
  6. make menuconfigでmysqlを選択
  7. make を実行しBuildrootのビルドを実行
    ビルドが完了すると、output/images/rootfs.ext2ファイルが生成され、これがMySQLを含むLinuxイメージとなる
わかわか

イメージをローカルに持ってくる

  1. コンテナIDの確認
    docker ps
    
  2. ファイルのコピー
    docker cp <コンテナID>:/workspace/buildroot/output/images/rootfs.ext2 ./rootfs.ext2
    
わかわか

v86.wasmを用意する

_人人人人人人人人人人人人人_
> Macではビルドができない <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

  1. 持ってくる
git clone https://github.com/copy/v86.git
cd v86
  1. 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"]

  1. docker build -t buildroot-env .
    20分くらいかかる
  2. ホスト側にBuildrootをクローン
    git clone https://github.com/buildroot/buildroot.git buildroot
    cd buildroot
    git checkout 2025.02
  3. ホスト側にMysqlを入れる
    • buildroot/packages/の下にmysqlディレクトリを作る
    • mysqlディレクトリ直下で Config.inとmysql.mkをつくる
    • buildroot/packages/Config.inにsource "package/mysql/Config.in"の追加
  4. ホスト側に出力用のディレクトリを作る
    mkdir -p buildroot-output/images
  5. コンテナを起動
       docker run --rm -it \  -v "$(pwd)/buildroot:/workspace/buildroot" \  -v "$(pwd)/buildroot-output/images:/workspace/buildroot/output/images" \  buildroot-env \  bash  
  6. 以下を実行
    # ① 古い設定を投げて
    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で実行できるのを確認した