8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Archlinux on Vagrant 日本語/GUI/docker セットアップスクリプト

Last updated at Posted at 2018-01-16

image.png

はよ

$ 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のみで軽量スマートに活用してドヤしたい日もあれば、デスクトップ環境をゴリゴリに改造してドヤしたい日もある
  • 融通の利かないオレオレイメージの配布はやめろ

必要なもの・試した環境

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を試してみない理由はない...!

使い方

https://github.com/u1and0/MyVagrant.gitからgit cloneでインストールしてください。イメージファイル以外に必要なファイルは次の二つです。

  • Vagrantfile
  • bootstrap.sh

vagrant init u1and0/archlinux --box-version 1.0.0vagrant box add https://app.vagrantup.com/u1and0/boxes/archlinux などでboxをダウンロードし、Vagrantfileを適宜書き換えて下さい。

Vagrantfile

Vagrantfileの構成で必要最低限は以下の32点

  1. bootstrap.sh実行の指示
  2. GUI(=デスクトップ)環境設定
  3. Windowの方など、ファイルシステムがNTFSならconfig.ssh.insert_key=false

以下、最低限のVagrantfile

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というファイルがあれば終了

/etc/bootstrappedというファイルがあれば終了
test -f /etc/bootstrapped && exit

プロビジョニングの時点で/etc/boostrappedというファイルがあれば、プロビジョニングをせずに普通にVirtualBoxを起動します。
/etc/boostrappedbootstrap.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)のエラー

libxfontの削除
sudo pacman -Rdd --noconfirm libxfont
sudo pacman -Syu --noconfirm

pacman強化

powerpillインストール

powerpillインストール
gpg --recv-keys 1D1F0DC78F173680
yaourt -S --noconfirm powerpill  # Use powerpill instead of pacman. Bye pacman...

powerpillはパッケージマネージャーpacmanのラッパーツールです。aria2cやreflectorを駆使してパッケージの高速ダウンロードを行ってくれます。AURからインストール必要があるほか、インストールに癖がありpgp鍵が必要です、 参考↓

powerpill SigLevel書き換え

SigLevel書換
sudo sed -ie 's/Required DatabaseOptional/PackageRequired/' /etc/pacman.conf

/etc/pacman.confというファイルのRequired DatabaseOptionalPackageRequiredに書き換えないと、ダウンロード時にエラーが表示されます。

ここでもsedからのパイプで権限のあるファイルへのリダイレクトにsudo teeを使います。

mirrorlist書き換え

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環境

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環境構築は疎かにしております。

フォントとインプットメソッドのインストール

フォントとインプットメソッドのインストール
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セットアップ

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 -Spacman -Syuにするべきなのかもしれませんが、実行速度が遅くなりそうなので-Sだけにしています。その分ここで足並みそろえてもらうために-Syu

再bootstrap防止用ファイルの作成

再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として立ち上がる。

スクリーンショット

Screenshot from 2018-04-01 09-52-17.png
Who am I?

Screenshot from 2018-04-01 09-47-21.png
【pacman高速化】powerpill使える

Screenshot from 2018-04-01 09-50-14.png
docker使える

まとめ

既存のvagrantイメージファイルterrywang/archlinux
オリジナルのセットアップスクリプトを使って日本語化・GUI化・docker使用可能なArchlinux環境を組み立てました。

追記v1.0.0

$ vagrant init u1and0/archlinux --box-version 1.0.0
$ vagrant up
8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?