VirtualBoxにAlpine Linuxをインストールする
May 18, 2023
linux AlpineLinux VirtualBox目次
はじめに
筆者はミニPC「Larkbox」にAlpine Linuxを入れて自宅サーバーにしています。ところが、Larkboxのストレージとして追加した中華製1TB SSDが大はずれで、4か月で使用不能となってしまいました。自宅サーバーが突然死する不便さが身に染みたので、もう1台サーバーを用意することにしました。とりあえず予備機なので、仮想環境でいいか、ということでVirtualBox上にAlpine Linux環境を作ることにしました。
せっかくVirtualBoxで動作させるのですから、調子に乗ってデスクトップ環境まで入れてみました。
本記事は、VirtualBox上にAlpine Linuxをインストールした際の備忘録です。
仮想マシンの設定
VirtualBoxを起動し、
仮想マシン(M)> 新規(N)…
により新規vmを作成。
「仮想ハードディスクの作成」でディスクサイズを指定。Alpine Linux自体は2GB~4GBでも動作すると思いますが、dockerを使ってアプリを起動させようとするとイメージの分だけディスクが必要になるので、本格的に使うなら256GBくらいはあったほうがよいと思います。
メモリは4GBは割り当てたいところ。インストーラーから起動するように、起動順序を変更し、「光学」を先頭にしておきます。
プロセッサは稼働させるPCリソースに応じて適宜に。
デスクトップ環境を入れる予定なので、ビデオメモリーはmaxに。コントローラーはVMSVGA推薦のようだけど、VNOXSVGAにすると、デスクトップ環境を入れたときに、より多彩な解像度を選べる。
ストレージには、インストールメディアのisoイメージを追加しておきます。isoイメージはここからEXTENDED(x86_64)パッケージを入手します。STANDARDパッケージでもいいのですが、STANDARDは最小限すぎて使いずらいです。
独立したサーバとして使用するので、ネットワークはブリッジアダプターを選択します。mac版のVirtualBoxでブリッジアダプターを使用する場合は、アダプタータイプを「準仮想化ネットワーク」にしないと、ネットワークが遅くて使い物になりません。
USB3.0 を有効に。
以上の設定を終えたら、vmを起動。
Alpine Linuxのインストール
vmを起動すると、インストーラーが起動します。
root(パスワード無)でログインします。
Welcome to Alpine Linux 3.17
Kernel 5.15.104-0-lts on an x86_64 (/dev/tty1)
localhost login: root
以下のコマンドで、インストールを開始。
# setup-alpine
Alpine Linuxのインストーラは、メジャーなデストリビューションのインストーラのようにいけてない。1つ1つ対話的に設問に応答していく必要があります。
インストール時の応答は以下。
Select keyboard layout: jp
Available variants: jp
Enter system hostname: alpine
Which one do you want to initialize?: eth0
Ip address for eth0: 192.168.1.xx
Netmask?: 255.255.255.0
Gateway: 192.168.1.1
DNS domain name? home.arpa
DNS nameserver(s)?: 192.168.1.1
New password: *******
Retype Password: *******
Which timezone are you in?: Asia/Tokyo
HTTP/FTP proxy URL?: none
Which NTP client to run? (‘busybox’, ‘openntpd’, ‘chrony’, or ‘none’):chrony
Enter mirror number (1-43) or URL to add: 1
Setup a user? (enter a lower-case koginname, or 'no') [no] my_login_name
Full name for user my_login_name [my_login_name] My Full Name
Changing password for my_login_name
New Password: *******
Retype password: *******
Which SSH server? (‘openssh’, ‘dropbear’ or ‘none’): openssh
Which disk(s) would you like to use?: sda
How would you like to use it?: sys
一旦電源OFF。
# poweroff
shutdownじゃないんだね。
インストールの続き
インストールメディアを抜いて、起動順序をハードディスクを先頭に変更して、再度vmを起動。 再びrootでログイン。こんどは、先ほど設定したパスワードが必要。ここで、パスワードが不要だったら、インストールメディアをアンマウントし忘れてませんか?
ログイン後、念のため、ネットワークがつながっていることを確認。
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:d6:78:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.xx/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic flags 100
valid_lft 14367sec preferred_lft 12567sec
inet6 fe80::a00:27ff:fed6:78f8/64 scope link
valid_lft forever preferred_lft forever
パッケージのリポジトリを更新しておきます。
/etc/apk/repositoriesのコメントアウトをはずす。dockerを使う場合はv3.17/communityだけはずす。デスクトップ環境を使用する場合は全部はずす。
#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.17/main
http://dl-cdn.alpinelinux.org/alpine/v3.17/community
http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing
次のコマンドで更新。
# apk update
# apk upgrade
sudo の許可
# apk add sudo
# visudo
# %wheel ALL=(ALL) ALL
を
%wheel ALL=(ALL) ALL
に変更
自分のログインアカウントをwheelに追加
# addgroup 自分のログインアカウント wheel
ここまできたら、コンソールではなく、sshで別のターミナルから自分のアカウントで接続可能になります。 以降、sshで接続した端末から、
$ sudo su
でルート権限を得て続行できます。
環境整備
いつも使う環境にしておく。
Dockerを入れる
# apk add --no-cache docker docker-cli-compose
# service docker start
# rc-update add docker boot
自分のログインアカウントをdockerグループに入れておく
# addgroup ログインアカウント docker
Alpine Linuxのデフォルトのシェルはashなのでbashにする。
bashのインストール。
# apk add bash-completion
/etc/passwdのログインシェルをashから使い慣れたbashに変更する
root:x:0:0:root:/root:/bin/bash
...
自分のアカウント:x:1001:1001:Linux User,,,:/home/自分のアカウント:/bin/bash
...
ホームディレクトリに.bashrcを置く。
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
#export PS1="[\w]\\$ "
export PS1="\[\e[32m\][\w]\[\e[0m\]\\$ "
alias vi='vim'
alias cls='clear'
alias ll='ls -l --color=auto'
date
ホームディレクトリに.bash_profileを置く。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
vimのインストール
# apk add vim
vimでマウスを使用しない設定
set mouse-=a
サーバとして使うだけならこれで完成。
あとは、必要に応じてアプリを入れていく。本サイトでは、以下のアプリのインストール手順の記事を置いてます。
- Alpine LinuxにSambaをインストールしファイル共有
- nginxによるリバースプロキシでWebアプリをワンストップアクセス
- Alpine LinuxにWebminをインストールしブラウザからPC管理
- Alpine LinuxにDNSを入れて自宅サーバに名前でアクセス
- Alpine Linuxにvpnを入れる
- Alpine Linuxにfirewall(awall)を入れる
- Alpine Linuxにapache web serverを入れる
- Lycheeで自前の写真サーバーを立てる
- Piwigoで自前の写真サーバーを立てる
- PhotoPrismで自前の写真サーバーを立てる
- Photonix Photo Managerで自前の写真サーバーを立てる
- PukiWikiサーバー
- DLNAメディアサーバー
引き続き、調子に乗ってデスクトップ環境を入れる。
デスクトップ環境の構築
デスクトップ環境のインストール
Alpine Linux用のデスクトップ環境Xfceを入れます。
apkリポジトリのコメントアウトを外す。
#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.17/main
http://dl-cdn.alpinelinux.org/alpine/v3.17/community
http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing
# apk update
# apk upgrade --update-cache --available
パッケージのインストール
# setup-xorg-base xfce4 xfce4-terminal lightdm-gtk-greeter xfce4-screensaver dbus-x11
VirtualBox用Videoパッケージのインストール
# apk add xf86-video-vboxvideo xf86-video-vesa
マウスのゲストーホスト間のシームレスな移動、共有フォルダーのマウント等の便利機能
# apk add virtualbox-guest-additions virtualbox-guest-modules-virt
ここで以下のようなエラーが出た場合は、apkリポジトリを変更する必要あり。どうもVirtualBox用Videoパッケージを置いていないミラーサイトもあるようだ。
ERROR: unable to select packages:
virtualbox-guest-modules-virt (no such package):
required by: world[virtualbox-guest-modules-virt]
/etc/modulesを修正
af_packet
ipv6
vboxpci
vboxdrv
vboxnetflt
Inputパッケージのインストール
# apk add xf86-input-mouse xf86-input-keyboard
キーボードレイアウト
# apk add setxkbmap
日本語キーボードのキーマップを使用する場合は、xorg.confを設定する
Section "InputClass"
Identifier "Keyboard Default"
MatchIsKeyboard "yes"
Option "XkbLayout" "jp"
EndSection
dbus開始
# rc-update add dbus
デスクトップのアイコンを入れる
# apk add faenza-icon-theme
ログイン画面をカスタマイズ
# apk add slim
# apk add slim-themes
デスクトップ環境開始
# rc-update add lightdm
または
# rc-update add slim
lightdmは何の変哲もないログイン画面だけど、slimはカッコいい!
SLiMのテーマ一覧
$ ls /usr/share/slim/themes/
alpinelinux fingerprint lunar rainbow wave
capernoited flat mindlock rear-window zenwalk
debian-moreblue flower2 parallel-dimensions scotland-road
default lake previous subway
テーマはslim.confで変更する。切り替わるのはログイン画面だけだけど。
...
# current theme, use comma separated list to specify a set to
# randomly choose from
current_theme alpinelinux
...
デスクトップ便利機能
シャットダウンとリブート許可
# apk add elogind polkit-elogind
または
# apk add polkit consolekit2
fuse(独自ファイルシステム構築のライブラリ)をインストール
# apk add gvfs-fuse gvfs-smb
# apk add fuse-openrc
# rc-update add fuse
fuseを入れない場合、File Managerの表示は生のlinuxのファイルシステムのまま。
fuseを入れると、ComputerやNetworkやTrushなどが使用できる。
USBデバイスの自動マウント
# apk add thunar-volman udisks2
仕上げ
# apk update
# apk upgrade --update-cache --available
# poweroff
再起動するとデスクトップが立ち上がる。
ディスプレイサイズは、
Applications>Settings>Display
で変更すればよい。
デスクトップの壁紙を変更するには、
Applications>Settings>Desktop
で変更すればよい。
デフォルトの壁紙置き場は、/usr/share/backgrounds/xfce/
Webブラウザ
Webブラウザを入れてみたいのだが、、、
Chromeのオープンソース版という位置づけの、Chromiumがあったので試してみる
# apk add chromium
# apk add ttf-freefont
なんとなくよさげだが、フォントがないせいか、これだけでは日本語が豆腐マークになる。
googleの日本語フォントを入れる。
$ mkdir ./note
$ cd ./note
$ wget https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip
$ unzip NotoSansCJKjp-hinted.zip
$ cd ..
$ sudo mv note /usr/share/fonts
$ sudo fc-cache -fv
うまくいった。
サーバとしてならともかく、クライアントとして使えるかは未知数。
ドキュメント作成環境
筆者はviで十分だけど、必要に応じて、
# apk add leafpad
とか
# apk add emacs
leafpadはデスクトップ環境で使用するテキストエディタ
日本語入力 iBus-anthy をインストール
# apk add ibus-anthy dbus-x11 python2 python3 zenity
日本語キーボードに切り替える
$ setxkbmap jp
.bashrcに追記
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODUEL=ibus
iBus 起動設定
Applications > Settings > Session and Startup > Applications Autostart
IBus Daemonエントリを追加
Applications > Settings > iBus Preferences > General
Ctrl+スペースで日本語入力に切り替わるようにする
Applications > Settings > iBus Preferences > Input Method
日本語入力と直接入力の切り替えができるようにする
デスクトップのカスタマイズ
Xfceでは、テーマを変更することにより、見栄えを変えることが可能です。
例えば、こんなかんじ。
これは長くなるんで別記事で紹介します。
IPv6対応
ここまで記載した記事は、ネットワークはIPv4で稼働することが前提でした。昨今自宅用のネット回線でIPoEが普及してきており、IPoE環境に移行した場合、IPv4シングルスタック前提のサーバでは不便が生じることも懸念されます。そこで、本節では、Alpine LinuxサーバをIPv4とIPv6両対応のデュアルスタック化する手順をまとめます。
変更するファイルは /etc/modules, /etc/hosts, /etc/network/interfaces の3つです。
たぶん最初から入っているとは思いますが、/etc/modulesにipv6の行がなければ追加します。
ipv6
hostnameがalpineの場合、
127.0.0.1 larkbox
192.168.1.xx larkbox larkbox.home.arpa
::1 localhost ipv6-localhost ipv6-loopback localhost.localdomain
fe00::0 ipv6-localnet
ff00::0 ipv6-mcastprefix
ff02::1 ipv6-allnodes
ff02::2 ipv6-allrouters
ff02::3 ipv6-allhosts
/etc/network/interfacesにIPv4とIPv6両方のネットワーク情報を定義します。IPv6プレフィックスが 2400:xxxx:yyyy:zzzz::/64とし、 ゲートウェイのIPv6グローバルアドレス 2400:xxxx:yyyy:zzzz:tttt:uuuu:vvvv:wwww を調べて設定します。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.xx
netmask 255.255.255.0
gateway 192.168.1.1
iface eth0 inet6 static
address 2400:xxxx:yyyy:zzzz::xx
netmask 64
gateway 2400:xxxx:yyyy:zzzz:tttt:uuuu:vvvv:wwww
以上設定後、再起動すればデュアルスタックサーバの設定が完了です。
動作確認
$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether hh:hh:hh:hh:hh:hh brd ff:ff:ff:ff:ff:ff
inet 192.168.1.xx/24 scope global wlan0
valid_lft forever preferred_lft forever
inet6 2400::xxxx:yyyy:zzzz::xx/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::iiii:jjjj:kkkk:llll/64 scope link
valid_lft forever preferred_lft forever
次にdockerの動作環境をIPv6対応しておきます。fd6d:aaaa:bbbb:cccc::/64は適当に割り当てました。
{
"ipv6": true,
"fixed-cidr-v6": "fd6d:aaaa:bbbb:cccc::/64"
}
設定後、再起動。
あとはIPv6対応が必要なコンテナを生成するためのdocker-compose.ymlの記述に以下を追記。
...
networks:
default:
enable_ipv6: true
ipam:
config:
- subnet: fd6d:aaaa:bbbb:dddd::/64
gateway: fd6d:aaaa:bbbb:dddd::1
まとめ
VirtualBox6.1上にAlpine Linuxをインストールする方法を紹介しました。