開発環境の起動
今回は debian:bookworm-slim
を使う。
docker run -it --rm debian:bookworm-slim
必要パッケージのインストール
apt update
apt install -y curl xz-utils make git file
curl
: zig, ncurses のダウンロードのために使うxz-utils
: zig の展開のために使うmake
: ncurses のビルドのために使うgit
: Vim のソースコード取得のために使うfile
: Vim の実行バイナリの形式確認に使う
作業用ディレクトリの作成
mkdir ~/work
cd ~/work
zig のインストール
zig 公式が配布しているバイナリを取得し、 /opt
に配置する。
curl -L https://ziglang.org/download/0.11.0/zig-linux-x86_64-0.11.0.tar.xz -O
tar xf zig-linux-x86_64-0.11.0.tar.xz -C /opt
export PATH=$PATH:/opt/zig-linux-x86_64-0.11.0
ncurses のビルド
静的ビルドのためには静的ライブラリとしてビルドした ncurses が必要なので、ソースからビルドする。
# ダウンロード・展開
curl -LO https://invisible-island.net/datafiles/release/ncurses.tar.gz
tar xfv ncurses.tar.gz
cd ncurses-6.3/
# ビルド
./configure \
"zig cc -target x86_64-linux-musl" \
CC="zig ar" \
AR=--enable-widec
make -j16
これで、 ncurses-6.3/lib
に libncursesw.a
が作成される。
vim のビルド
ダウンロード
cd ~/work
git clone --depth 1 https://github.com/vim/vim
cd vim
ビルド
./configure \
"zig cc -target x86_64-linux-musl" \
CC="-L$(cd ~; pwd)/work/ncurses-6.3/lib -static -s -w" \
LDFLAGS=--with-features=huge \
--enable-terminal \
--enable-gpm=no \
--enable-fail-if-missing \
--prefix /vim \
--with-tlib=ncursesw
make -j16
make install
これで、 /vim/vim
に Vim
の実行ファイルが配置される。
静的リンクの確認
root@88773c67d701:~/work/vim# file /vim/bin/vim
/vim/bin/vim: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
root@88773c67d701:~/work/vim# ldd /vim/bin/vim
not a dynamic executable
OK.
パッケージング
vim 実行時に検索される VIM ディレクトリは、--prefix
で指定したパスを基に検索されるため、このままだとポータブルにならない。
(今回の場合だと /vim/share/vim
となる)
そのため、 VIM 環境変数を上書きするシェルスクリプトを用意し、それ経由で実行してもらう事とする。
cat << "EOF" > /vim/vim
#!/bin/sh
CURRENT_DIR="$(dirname "$(realpath "$0")")"
export VIM="${CURRENT_DIR}/share/vim/"
exec "${CURRENT_DIR}/bin/vim" "$@"
EOF
chmod a+x /vim/vim
tar zcfv ./vim.tar.gz /vim
docker cp
でホストに持ってきて、適当な場所に配置し、
vim/vim
を実行すれば Vim が起動する。
※vim/bin/vim
ではなく
0 件のコメント:
コメントを投稿