Ubuntu環境が少し散らかっていたので、綺麗にしてみました。

Table of Contents

はじめに

2年ほど前からVMでUbuntuを使用しています。
整備は今までに3回ほど実施しており、一部ブログの記事にしています。

頻度は半年~1年に1回… 常に環境は綺麗に保ちたいので継続的なメンテナンスが大切です。

筆者の環境

  • Windows10 Home 10.0.17134
  • Vagrant 2.2.0
  • VirtualBox 5.2.20 r125813 (Qt5.6.2)

想定する読者

手順を重視するため、技術の説明はしません。
以下の用語について、意味と利用方法を知っている読者を想定しています。

  • Ansible
  • Bash
  • Fish
  • Ubuntu
  • Lubuntu
  • Display Manager
  • Vagrant
  • Virtualbox

前回までとの違い

ツールの取捨選択は勿論のこと、今まで使っていた環境との大きな違いがあります。

メインシェルをFishからBashに変更

以下の理由からFishをやめてBashにしました。

  • FishはBashに比べて表示が微妙に遅い (普通の人は気にならないレベルだと思います..)
  • FishにあってBashに無い便利機能はほとんどカバーできる
  • Bashの方がREADMEに記載された構築手順でハマることが少ない
  • サーバはBashしか入っていないことが多いため、頭の切り替えや設定管理のコストが高い

便利機能のカバーについては別の機会に記事を書くかもしれません。

仮想環境のイメージを作成

ubuntu/bionic64ではなく、日本語設定したLubuntu Desktop環境作成状態のイメージをBoxとして保存するようにしました。
理由は以下2点です。

  • 日本語設定とLubuntu Desktop作成にとても時間がかかるため、イメージを再構築にできない
  • Display Managerがしばしば正常に動作しなくなるが、上記理由からイメージ再構築のコストが高い

vagrant packageするだけだったので、これはもっと早くやっておけばよかったと思いました。

日本語版Lubuntu Desktopの作成

まずはイメージをBoxとして保存するまでのフェーズです。

Vagrantfile

以下のVagrantfileを作成します。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"

  # port forward
  config.vm.network "private_network", ip: "192.168.33.10"

  # VirtualBox VM options
  config.vm.provider "virtualbox" do |vb|
    vb.name = "lubuntu-base"
    vb.cpus = "2"
    vb.memory = "2048"
    # GUI settings
    vb.gui = true
    vb.customize [
      "modifyvm", :id,
      "--vram", "256",
      "--accelerate3d", "on",
      "--hwvirtex", "on",
      "--nestedpaging", "on",
      "--largepages", "on",
      "--ioapic", "on",
      "--pae", "on",
      "--paravirtprovider", "kvm",
      "--clipboard", "bidirectional",
      "--draganddrop", "bidirectional",
      "--monitorcount", "1",
      "--nictype1", "virtio",
      "--nictype2", "virtio",
      "--natdnshostresolver1", "on",
    ]
  end
end

起動します。

$ vagrant up

Lubuntuインストール

立ち上がったマシンの中で以下コマンドを実行します。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install lubuntu-desktop

マシンを再起動します。

$ vagrant halt && vagrant up
vagrant provisionでインストールしないのは...
Windows上でsudo apt install lubuntu-desktopを実行すると、ターミナルによっては画面がフリーズするためです。
Boxを作り直す機会は多くないため、多少の手間をかけても問題ないと判断しています。

日本語設定

まず、ubuntuユーザのパスワードを変更して下さい。後で聞かれるためです。

$ sudo passwd ubuntu

以下を参考にして日本語対応してください。

最後にLocaleを日本語にします。

$ sudo update-locale LANG=ja_JP.UTF-8

Boxの作成と追加

作成

vagrantのpackageコマンドを使うだけです。

$ vagrant halt
$ vagrant package

追加

vagrantのbox addコマンドを使います。
lubuntu-base\package.boxにBoxが作成された場合です。

$ vagrant box add "tadashi-aikawa/lubuntu-jp" lubuntu-base\package.box
Vagrant Cloudに公開しないのか?

公開はしません。
自分用に最適化されており、今後メンテしていく保証ができないからです。

新しいUbuntu環境の作成

最長でUbuntuの時期安定版が出るまでの間、新しいイメージ作成はここからスタートできます。
わんだふる!!🐶

Vagrantでイメージ作成

ここまでに作成したベースイメージから新しいイメージを作成します。

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "tadashi-aikawa/lubuntu-jp"
  config.disksize.size = "40GB"

  # port forward
  [3000, 3001, 5432, 8000, 8888].each do |port|
    config.vm.network "forwarded_port", guest: port, host: port, host_ip: "127.0.0.1"
  end
  config.vm.network "private_network", ip: "192.168.33.10"

  # VirtualBox VM options
  config.vm.provider "virtualbox" do |vb|
    vb.name = "lubuntu-jp"
    vb.cpus = "2"
    vb.memory = "4096"
    # GUI settings
    vb.gui = true
    vb.customize [
      "modifyvm", :id,
      "--vram", "256",
      "--accelerate3d", "on",
      "--hwvirtex", "on",
      "--nestedpaging", "on",
      "--largepages", "on",
      "--ioapic", "on",
      "--pae", "on",
      "--paravirtprovider", "kvm",
      "--clipboard", "bidirectional",
      "--draganddrop", "bidirectional",
      "--monitorcount", "1",
      "--nictype1", "virtio",
      "--nictype2", "virtio",
      "--natdnshostresolver1", "on",
    ]
  end

  # sync
  config.vm.synced_folder "../../mnt", "/mnt"
  config.vm.synced_folder "../ansible", "/mnt-ansible"
  target_path = ENV['USERPROFILE'].gsub(/\\/,'/') + "/tmp"
  config.vm.synced_folder target_path, "/mnt-tmp"

  # Install docker
  config.vm.provision "docker"

  # Install others
  config.vm.provision :shell, :path => "provision.sh"

  # Secret
  config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
  config.vm.provision "file", source: "~/.gowlconfig", destination: ".gowlconfig"
  config.vm.provision "file", source: "~/.ssh", destination: ".ssh"
end

ポート番号や同期ディレクトリは私の好みです。

# Secretの下に列挙されたファイルは秘密情報を含むものです。
バージョン管理できないため、ホストに置かれた情報からprovision時に転送しています。

provision.shの中ではAnsibleのインストールと.ssh配下の権限設定をしています。

provision.sh
#!/bin/bash

set -eu

# Install ansible
# https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-ubuntu-18-04

apt -y update
apt -y install software-properties-common
apt-add-repository -y ppa:ansible/ansible
apt -y update
apt -y install ansible

chmod 600 .ssh/*

Ansibleで環境構築

後はAnsibleを使って環境構築します。

筆者の環境構築は以下のリポジトリで管理しています。

linux/ansibleに移動してmakeコマンドを実行します。

$ make lubuntu-jp

Vimプラグインのインストールは別途、Vim立ち上げ後にやる必要ありますけどね😄

総括

久しぶりにUbuntu環境を綺麗にしてみました。

fishを手放せたこと、ベースBoxを作成できたことは大きな収穫だったと思っています。