はよ
$ vagrant init u1and0/archlinux --box-version 1.0.0
$ vagrant up
Archlinux for Japanese
- ベースはterrywang/archlinux
- pacmanの強化
- reflector: 近くのサーバーを/etc/pacman.d/mirrorlistに登録
- powerpill: pacman のラッパー。aria2cとか使って高速ダウンロード
- GUI環境: xfce4
- dockerをsudoなしで実行できる
- the fuck: Corrects your previous console command
- atool: Managing file archives of various types
- vimpager: Syntax color highlighting pager
- man-page-ja-git: 日本語man
- gitflow-avh-git: git-flow tools
- /etc/boostrapedを見るとterrywang/archlinuxのboxに対して実行したこと(provisioning)がわかります。
まえがき
VirtualBox 用 Ubuntu 16.04 LTS "Xenial Xerus" 日本語デスクトップ イメージのArchlinux版みたいなのが欲しくて作りました。
イメージ作成はせずに既存のOSイメージ上でshellスクリプトで書いたプロビジョニングを走らせて日本語化・GUI化・dockerのセットアップを行っております。
dockerのセットアップは
docker info
と打ってデーモンが動いていることを確認できるまでを指しています。
それ以降のdockerイメージを使ってなんちゃらはこの記事の範囲外です。
bootstrap.sh
を書き換えることである程度のカスタマイズが可能です。いらない部分はコメントアウトし、個人的に必要だと思った部分は適宜書き加えて使用してください。
特に、"bootstrap.sh"の最後の方では私のdotfilesをクローンしてくるので、その点はご自分のdotfilesリポジトリに書き換えることをお勧めします。しかしながらdotfilesの使用、書換を禁じているわけではありませんので、"bootstrap.sh"をそのまま使っていただいてもかまいません。
dotfilesは自動的にcloneしないようにしました。
また、shellscriptを追っていけば単純に「Archlinuxことはじめ」としても使えると思います。(ネットワーク設定とか細かいことはterrywangさんが既にカスタマイズしてくれている模様)
誰向けの記事か
- 気軽に組み立て、気軽に試せて、気軽にぶっ壊せて、気軽に再立ち上げできる環境が欲しい
- vagrant, VirtualBoxの導入・使い方は普通にわかる
- Archlinuxに興味があるけど、怖くて手が出せない
- ArchlinuxをはじめLinuxOSで日本語化を一からやる方法がわからない
- MSYS2のpacmanじゃやれること狭すぎるよ
- pacman高速化したい
- vagrantで組み立てる日本語イメージが欲しい
- デスクトップ環境なんかいならくてCLIのみで軽量スマートに活用してドヤしたい日もあれば、デスクトップ環境をゴリゴリに改造してドヤしたい日もある
- 融通の利かないオレオレイメージの配布はやめろ
必要なもの・試した環境
- vagrant1.9.5
- VirtualBox5.1.22
- vagrantで立ち上げるarchlinuxのOSイメージterrywang/archlinux
OSはwindows10 64bitで試しました。vagrantとVirtualBoxは常に最新版同士を使うことが良いとは限らないようで、私はこの組み合わせでうまくいきました。両者とも最新版は出ているのに1年くらい更新していません…。(試すのが面倒なだけです)
terrywang/archlinuxは更新頻度が高く、ダウンロード数も多く比較的信頼できるArchlinuxイメージだと思います。(自己責任でダウンロードしてください)
イメージファイルはvagrant box add terrywang/archlinux
またはvagrant init terrywang/archlinux
で取得できます。
Archlinux
Arch Linux は、x86_64 向けに独自に開発された、あらゆる用途に対応できる万能 GNU/Linux ディストリビューションです。その開発は、シンプリシティ、ミニマリズム、およびコードの簡潔性に焦点を当てています。Arch は最小限の基本システムの状態でインストールされ、ユーザー自身が、ユーザーの理想とする環境のために必要なものだけをインストールして構築することができます。GUI の構成設定ツールは公式には提供されず、ほとんどのシステム設定はシェル上でテキストファイルを編集することで行います。Arch はローリングリリースモデルをベースとしており、常に最先端であるように努め、ほとんどのソフトウェアは最新の安定バージョンが提供されます。(Archlinux wikiより)
シンプル、ミニマル、汎用的、根っこから自分色に染める、do-it-yourselfの精神で自分ための自分だけの環境を作る。それがArchlinux...
それゆえに、難しい。挫折もある。大きな間違いを犯せば今までかけた環境構築の苦労の時間は水の泡。
そんな心配、仮想環境がなんとかしてくれるはず。
Vagrant Cloudには数多くの構築済みの環境がそろい、vagrantによる強力なprovisioningが環境構築を自動化してくれる。間違って大変なものを消してしまってもVirtualBoxによる強力なsnapshot機能が逃げ道をいつでも確保しておいてくれる。Archlinuxを試してみない理由はない...!
- Arch Linuxとパッケージシステム←Archlinuxいいな、と思わされた記事
- サーバOSとしてのArch Linux←Archlinuxが選ばれない理由8を多角的に分析した記事。Archlinuxのリスクについて知っておきたい人向け。
使い方
https://github.com/u1and0/MyVagrant.gitからgit clone
でインストールしてください。イメージファイル以外に必要なファイルは次の二つです。
Vagrantfile
bootstrap.sh
vagrant init u1and0/archlinux --box-version 1.0.0
や vagrant box add https://app.vagrantup.com/u1and0/boxes/archlinux
などでboxをダウンロードし、Vagrantfileを適宜書き換えて下さい。
Vagrantfile
Vagrantfileの構成で必要最低限は以下の32点
bootstrap.sh実行
の指示- GUI(=デスクトップ)環境設定
- Windowの方など、ファイルシステムがNTFSなら
config.ssh.insert_key=false
以下、最低限のVagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
config.vm.box = "u1and0/archlinux"
config.vm.box_version = "1.0.0"
# GUI起動
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048"]
# クリップボードの共有: 双方向
vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
end
GUI=true
if GUI
config.vm.provider "virtualbox" do |gui|
# Display the VirtualBox GUI when booting the machine
gui.gui = true
gui.customize ["modifyvm", :id, "--ioapic", "on"]
gui.customize ["modifyvm", :id, "--vram", "128"]
gui.customize ["modifyvm", :id, "--accelerate3d", "on"]
end
end
# NTFS環境
config.ssh.insert_key=false # root user ssh for sharing with windows machine
end
bootstrap.sh
terrywang/archlinuxに対して追加したプロビジョニングです。
GUI設定や日本語manの追加や日本時間の設定など。
/etc/bootstrappedというファイルがあれば終了
test -f /etc/bootstrapped && exit
プロビジョニングの時点で/etc/boostrapped
というファイルがあれば、プロビジョニングをせずに普通にVirtualBoxを起動します。
/etc/boostrapped
はbootstrap.sh
が終了したら書き込まれます。
日本語環境の構築
sudo timedatectl set-timezone Asia/Tokyo # タイムゾーン設定
sudo cat << 'EOF' | sudo tee /etc/locale.conf
LANG=ja_JP.UTF8
LC_NUMERIC=ja_JP.UTF8
LC_TIME=ja_JP.UTF8
LC_MONETARY=ja_JP.UTF8
LC_PAPER=ja_JP.UTF8
LC_MEASUREMENT=ja_JP.UTF8
EOF
sudo mv /etc/locale.gen{,.bac} # /etc/locale.genを/etc/locale.gen.bacにリネームする
echo ja_JP.UTF-8 UTF-8 | sudo tee /etc/locale.gen
sudo locale-gen
sudo pacman -Syy
sudo cat << 'EOF' | sudo tee なんかのファイル
なんとか
かんとか
EOF
echo 文字列 | sudo tee なんかのファイル
sudo >(リダイレクト)
のような書き方が出来ないので代わりにsudo tee
を挟むことで書き込みにroot権限が必要なファイルへのリダイレクトを行います。
teeはリダイレクトを行いながら標準出力にも吐き出すコマンドです。
ターミナル上で手動でやるならばsudo vi
して該当箇所を変更すればいいのですが、自動化するにはひと工夫必要でした。これ以降何回も使っていきます。
Remove libxfont for pacman datebase error
2018年2月頃から発生しているアップデート時のエラーです。
対処法は以下を参考にしてlibxfont
を削除して、全パッケージを再度アップデートすることです。
xorgprotoへのアップデートで、error: failed to prepare transaction (could not satisfy dependencies)のエラー
sudo pacman -Rdd --noconfirm libxfont
sudo pacman -Syu --noconfirm
pacman強化
powerpillインストール
gpg --recv-keys 1D1F0DC78F173680
yaourt -S --noconfirm powerpill # Use powerpill instead of pacman. Bye pacman...
powerpillはパッケージマネージャーpacmanのラッパーツールです。aria2cやreflectorを駆使してパッケージの高速ダウンロードを行ってくれます。AURからインストール必要があるほか、インストールに癖がありpgp鍵が必要です、 参考↓
powerpill SigLevel書き換え
sudo sed -ie 's/Required DatabaseOptional/PackageRequired/' /etc/pacman.conf
/etc/pacman.conf
というファイルのRequired DatabaseOptional
をPackageRequired
に書き換えないと、ダウンロード時にエラーが表示されます。
ここでもsed
からのパイプで権限のあるファイルへのリダイレクトにsudo tee
を使います。
mirrorlist書き換え
sudo pacman -Syu --noconfirm reflector
sudo cp /etc/pacman.d/mirrorlist{,.bac}
sudo reflector --verbose --country 'Japan' -l 10 --sort rate --save /etc/pacman.d/mirrorlist
最大10個の日本のミラーをダウンロード速度順にソートし、/etc/pacman.d/mirrorlist ファイルに上書きします。
GUI環境
sudo pacman -S --noconfirm xorg-xinit lightdm-gtk-greeter
yes 'all' | sudo pacman -S --noconfirm xfce4 lightdm
sudo systemctl enable lightdm.service
# /etc/systemd/system/default.targetのリンクをmulti-user.targetからgraphical.targetに変える
sudo systemctl set-default graphical.target
以下のパッケージをインストール
- xorg-xinit
- xfce4
- lightdm
- lightdm-gtk-greeter
lightdmを自動実行にしてログイン
sudo systemctl enable lightdm.service
/etc/systemd/system/default.targetのリンクをmulti-user.targetからgraphical.targetに変える
sudo systemctl set-default graphical.target
デスクトップ環境は軽量さが売りのxfce4です。イマドキデスクトップ環境が良いという方はGnomeやUnityなど探してみてください。
bootstrap.shではGUI環境構築は疎かにしております。
- ArchLinuxをVirtualBoxにインストールし、GUI環境を構築するまで
- VirtualBoxにArchLinuxをインストールする
- Arch Linuxのデスクトップ環境(もりねずみー編)←Archlinux(に限った話ではないと思うが)のデスクトップ環境比較
フォントとインプットメソッドのインストール
yaourt -S --noconfirm otf-takao # Takaoフォントインストール
yes 'all' | sudo pacman -S --noconfirm fcitx-im fcitx-configtool fcitx-mozc
sudo cat << 'EOF' > ${HOME}/.xprofile
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=”@im=fcitx”
EOF
インプットメソッドのインストールと変数書換を行います。
キーボードの設定
sudo localectl set-keymap jp106
日本語キーボードjp106に切り替え。
英語用キーボードが好きな方はコメントアウトしてください。
自動ログイン
sudo sed -ie 's/#autologin-user=/autologin-user=vagrant/' /etc/lightdm/lightdm.conf
sudo groupadd -r autologin
sudo gpasswd -a vagrant autologin
# ↑一回目のログインはユーザー名とパスワード(どちらもvagrnat)打たないといけない
これを設定することで次回以降のログインで認証がいらなくなります。
dockerセットアップ
sudo pacman -S --noconfirm docker # dockerインストール
sudo systemctl enable docker # ログイン時にデーモン実行
sudo groupadd docker # sudoなしで使えるようにする設定
sudo gpasswd -a vagrant docker # sudoなしで使えるようにする設定
sudo systemctl restart docker
Vagrantfileに書く
config.vm.provision "docker"
と同義?だと思います。Archlinuxのイメージではできなかったので、bootstrap.sh
の中で設定しました。
その他好きなもの
sudo pacman -S --noconfirm thefuck atool vimpager
# the fuck: Corrects your previous console command
# atool: Managing file archives of various types
# vimpager: Syntax color highlighting pager
yaourt -S --noconfirm man-pages-ja-git gitflow-avh-git
# man-page-ja-git: 日本語man
# gitflow-avh-git: git-flow tools
全パッケージのアップデート
sudo powerpill -Syu --noconfirm
yaourt -Syua --noconfirm
yaourt
には-Syu
に加えて-a
オプションも必要らしいです。
本当は今までのpacman -S
をpacman -Syu
にするべきなのかもしれませんが、実行速度が遅くなりそうなので-S
だけにしています。その分ここで足並みそろえてもらうために-Syu
再bootstrap防止用ファイルの作成
cat $0 | sudo tee /etc/bootstrapped
プロビジョニングの最後に/etc/bootstrapped
というファイルに実行した日付時刻プロビジョニングの内容を書きみます。
bootstrap.sh
はイニシャルセットアップスクリプトなので、初回起動時のみ動いたらお役御免です。次回以降vagrant up
したときに発動しないようにするにはbootstrap.sh
の最初に書いた「/etc/bootstrappedというファイルがあれば終了」と合わせてbootstrap.sh
の動きを封じます。
再起動
sudo reboot
GUIサービスやdockerサービス有効化のため再起動。
GUIによる自動ログインを有効化するため、初回のみユーザー名(vagrant)とパスワード(vagrant)を手動入力してログイン。
GUIを立ち上げずssh接続のみで使うなら不要。
このコマンドは怪しい
たまにログインループに陥る
lightdmのせい
> vagrant destroy -f
してもう一度立ち上げ直せば正しく立ち上がるかも。
一度xfceでログインすれば次回からは自動でユーザー名vagrantとして立ち上がる。
スクリーンショット
まとめ
既存のvagrantイメージファイルterrywang/archlinuxと
オリジナルのセットアップスクリプトを使って日本語化・GUI化・docker使用可能なArchlinux環境を組み立てました。
追記v1.0.0
- Vagrant Cloudにboxファイルをアップしました。
- xorgprotoとlibxfontによるパッケージアップデートの失敗を回避しました。
- これからは
bootstrap.sh
によるビルドはやめて
$ vagrant init u1and0/archlinux --box-version 1.0.0
$ vagrant up