開発環境の起動
今回は debian:bookworm-slim を使う。
docker run -it --rm debian:bookworm-slim必要パッケージのインストール
apt update
apt install -y curl xz-utils make git filecurl: zig, ncurses のダウンロードのために使うxz-utils: zig の展開のために使うmake: ncurses のビルドのために使うgit: Vim のソースコード取得のために使うfile: Vim の実行バイナリの形式確認に使う
作業用ディレクトリの作成
mkdir ~/work
cd ~/workzig のインストール
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.0ncurses のビルド
静的ビルドのためには静的ライブラリとしてビルドした ncurses が必要なので、ソースからビルドする。
# ダウンロード・展開
curl -LO https://invisible-island.net/datafiles/release/ncurses.tar.gz
tar xfv ncurses.tar.gz
cd ncurses-6.3/
# ビルド
./configure \
CC="zig cc -target x86_64-linux-musl" \
AR="zig 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 \
CC="zig cc -target x86_64-linux-musl" \
LDFLAGS="-L$(cd ~; pwd)/work/ncurses-6.3/lib -static -s -w" \
--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 executableOK.
パッケージング
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 /vimdocker cp でホストに持ってきて、適当な場所に配置し、
vim/vim を実行すれば Vim が起動する。
※vim/bin/vim ではなく
0 件のコメント:
コメントを投稿