TikZ で作図したくて。
TeX Live を homebrew 🍺 でいれるのは時間かかりそうだし、環境汚くなりそうだし、なんだかなー。たぶん Docker 🐳 が楽なんだろうなー。
VirtualBox で適当な Linux 立ち上げて、その中でやろうかな。できたファイルはホスト側で確認すればいいんだから、どうせ GUI あってもしかたねーべ? と Alpine Linux を選択。
今回は後述の通り若干問題点も出てきたが、せっかく使ったことないディストリビューションのインストール作業をしてみたので、備忘録がてらまとめてみた。
Alpine Linux のインストール
準備
Alpine Linux のダウンロードページからイメージをダウンロードします。
VirtualBox で仮想マシンを作成し、設定のストレージから仮想ドライブにダウンロードした iso イメージを選択します。
起動。
インストール
root でログインします。
setup-alpine
を実行して初期設定、インストールを行います。
setup-alpine
キーボードの設定。使っているものにあわせて設定します。ここでは us
/ us-mac
。
Available keyboard layouts:
af be cn fi hu it lk mm pl sy uz
al bg cz fo id jp lt mt pt th vn
am br de fr ie ke lv my ro tj
ara brai dk gb il kg ma ng rs tm
at by dz ge in kr md nl ru tr
az ca ee gh iq kz me no se tw
ba ch epo gr ir la mk ph si ua
bd cm es hr is latam ml pk sk us
Select keyboard layout [none]: us
Available variants: us-alt-intl us-altgr-intl us-chr us-colemak us-dvorak-alt-intl us-dvorak-classic us-dvorak-intl us-dvorak-l us-dvorak-r us-dvorak us-dvp us-euro us-hbs us-intl us-mac us-norman us-olpc2 us-rus us-workman-intl us-workman us
Select variant []: us-mac
ホストネームの設定。
Enter system hostname (short form, e.g. 'foo') [localhost]:
ネットワーク設定。アドレス固定がいい場合などは適宜設定。
Available interfaces are: eth0.
Enter '?' for help on bridges, bonding and vlans.
Which one do you want to initialize? (or '?' or 'done') [eth0]
Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp]
Do you want to do any manual network configuration? [no]
root のパスワードの設定。
Changing password for root
New password:
Retype password:
passwd: password for root changed by root
タイムゾーンは Asia/Tokyo
。
Which timezone are you in? ('?' for list) [UTC] Asia/Tokyo
プロキシはなし。 NTP は chrony 。
HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]
Which NTP client to run? ('busybox', 'openntpd', 'chrony' or 'none') [chrony]
リポジトリのサーバ。 f
だと全ミラーの接続速度を計測して一番速いところが選択されます。
Available mirrors:
1) dl-cdn.alpinelinux.org
2) uk.alpinelinux.org
3) dl-2.alpinelinux.org
(略)
49) mirror.reenigne.net
r) Add random from the above list
f) Detect and add fastest mirror from above list
e) Edit /etc/apk/repositories with text editor
Enter mirror number (1-49) or URL to add (or r/f/e/done) [1]: f
sshd は openssh 。
Which SSH server? ('openssh', 'dropbear' or 'none') [openssh]
インストール先として VirtualBox の仮想ディスクが割り当てられている sda
を選択します。
Available disks are:
sda (8.6 GB ATA VBOX HARDDISK )
Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda
How would you like to use it? ('sys', 'data', 'lvm' or '?' for help) [?] sys
最後に y
を選択すると、選択したディスクの中身を消去し、 Alpine Linux がインストールされます。 N
だとインストール作業は実行されません。
WARNING: Erase the above disk(s) and continue? [y/N]: y
一旦終了します。
poweroff
VirtualBox の設定より、仮想マシンの仮想ドライブから iso イメージを取り外しておきます。
環境を整える
vim
apk add vim
community リポジトリの追加
Docker などは community リポジトリにあるらしい。
vim /etc/apk/repositories
# /media/cdrom/apks
http://sjc.edge.kernel.org/alpine/v3.12/main
# http://sjc.edge.kernel.org/alpine/v3.12/community
# http://sjc.edge.kernel.org/alpine/edge/main
# http://sjc.edge.kernel.org/alpine/edge/community
# http://sjc.edge.kernel.org/alpine/edge/testing
となっているので、 community リポジトリを有効に。
http://sjc.edge.kernel.org/alpine/v3.12/community
apk update
apk upgrade
Docker
apk add docker docker-compose
service docker start
rc-update add docker boot
便利に使うために
VirtualBox の共有フォルダ
あらかじめ、設定で共有フォルダを指定しておきます。ここでは vbox_shared
という名前で設定してあるとします。
apk add virtualbox-guest-additions virtualbox-guest-modules-virt
rc-update add virtualbox-guest-additions default
modprobe -a vboxsf
VirtualBox の共有フォルダの設定のところに自動マウントのチェックオプションがあるけど、うまく機能しない? /etc/fstab
を修正し、自動マウントするようにします。
mkdir -p /mnt/vbox_shared
vim /etc/fstab
vbox_shared /mnt/vbox_shared vboxsf defaults 0 0
ユーザの追加
VirtualBox だし、ついつい root を使いがちですが、あんまりよくないので一般ユーザを追加します。
sudo の許可
apk add sudo
visudo
# %wheel ALL=(ALL) ALL
を
%wheel ALL=(ALL) ALL
ユーザの追加
adduser alpine
adduser alpine wheels
adduser alpine vboxsf
adduser alpine docker
ssh ログイン
仮想コンソールなので、コピペがうまくできないためローカルマシンから ssh ログイン。
ssh alpine@xxx.xxx.xxx.xxx
Docker で TeX Live
docker pull paperist/alpine-texlive-ja
docker グループに所属していてもパーミッションエラーがでる場合、いったんリブートかけてみる。
Docker コンテナ内のコマンドを直接使うには
docker run -v $(pwd):/workdir --rm paperist/alpine-texlive-ja:latest platex example.tex
めんどうなので、エイリアスを設定しておく。
alias platex='docker run -v $(pwd):/workdir --rm paperist/alpine-texlive-ja:latest platex'
Alpine Linux のシェルは ash 。エイリアスの設定などは ~/.profile
に記述すればよいようだ。
問題点
共有フォルダのパーミッションがうまく設定できない
alpine ユーザは vboxsf グループに所属しているが、 /mnt/vbox_shared
に書き込めない。
ディレクトリの所有者を変えてみたり、 /etc/fstab
で uid
を指定してマウントしてみても、マウントされると root
でマウントされてしまう。よくわからん。
と、ここまで作業したあと、別に Alpine Linux じゃなくてもよかったんじゃね?
ふつうに Docker for Mac かデフォルトで GUI ありの Ubuntu / Fedora あたりで。
作業はコマンドラインベースがよいけど、 LaTeX (TikZ) だとどうしても都度コンパイルして結果を確認して修正。ってサイクルなので。
いや、共有フォルダへのアクセスがすんなりいけば別によかったんだけど。パスワードなしで sudo
できるようにするか、 root で作業するか、諦めて他の環境使うか。