あけまして Ubuntu 20.04 開発環境

あけましておめでとうございます。年賀状代わりに開発環境の構築記事を差し上げます。

いやわりと真剣に、開発環境にはその開発者の近況が表れていると思うのですよ。
いっちょあなたもどうですか 😀

閑話休題。
以下今日やった Ubuntu 20.04 LTS のインストール作業記録です。語調変わるのはご勘弁。

Hyper-V VM の用意

特に難しいことはない。
ブリッジ仮想スイッチを作り、第2世代タイプにしてセキュアブートを無効化するくらい。
あとチェックポイント(自動スナップショット)はうざいので無効化している。

WSL2 は、インフラ用途だと systemd がないとかカーネルを使い分けられないので見送っている。

Ubuntu のインストール

Ubuntu の GUI はいらないので Server をインストールする。

https://releases.ubuntu.com/20.04.1/ubuntu-20.04.1-live-server-amd64.iso

このイメージには Canonical が作っている subiquity というインストーラーが入っていて、従来の debian-installer よりとても扱いやすい。仕事ではイメージをハックしてカスタムインストーラーを作っているのだけどそれはまた別途どこかに書く、かもしれない。

インストール後の作業

systemd-networkd の設定

後述するように netplan.io は消してしまうので、ネットワーク設定は /etc/systemd/network/eth0.network ファイルに改めて作っておく。

こんな感じで書ける。

[Match]
Name=eth0

[Network]
Address=10.AA.BB.CC/24
Gateway=10.AA.BB.1
DNS=8.8.8.8

不要なツールを purge

外部通信を行うツールや個人的に絶対使わないツールを purge しておく。一部ツールは勝手に外部通信する。

  • apport, apport-symptoms: crash report 収集ツール。無効化されているし、いらない
  • fwupd: ファームウェア自動更新ツール, インターネットからダウンロードを試みる
  • popularity-contest: 定期的にパッケージインストール情報を外部に送信する
  • unattended-upgrades: 自動的にパッケージ更新を行う(ために外部通信する)
  • update-manager-core: パッケージ更新情報を自動で取得する(ために外部通信する)
  • nano: 簡素なエディタ。これがあると visudo が vi(vim) でなく nano を起動してしまう
  • netplan.io: サーバーでは systemd-networkd を直接使うほうが幅広い機能を使えて良い
$ sudo apt purge -y --autoremove apport apport-symptoms \
    fwupd nano netplan.io popularity-contest \
    unattended-upgrades update-manager-core

以下のパッケージが purge できた。

  • apport:amd64 (2.20.11-0ubuntu27.12)
  • apport-symptoms:amd64 (0.23)
  • bolt:amd64 (0.8-4)
  • cloud-init:amd64 (20.2-45-g5f7825e2-0ubuntu1~20.04.1)
  • eatmydata:amd64 (105-7)
  • fwupd:amd64 (1.3.11-1~focal1)
  • fwupd-signed:amd64 (1.27.1ubuntu2+1.3.11-1~focal1)
  • libarchive13:amd64 (3.4.0-2ubuntu1)
  • libeatmydata1:amd64 (105-7)
  • libfwupd2:amd64 (1.3.11-1~focal1)
  • libfwupdplugin1:amd64 (1.3.11-1~focal1)
  • libgcab-1.0-0:amd64 (1.4-1)
  • libgpgme11:amd64 (1.13.1-7ubuntu2)
  • libgudev-1.0-0:amd64 (1:233-1)
  • libgusb2:amd64 (0.3.4-0.1)
  • libjson-glib-1.0-0:amd64 (1.4.4-2ubuntu2)
  • libjson-glib-1.0-common:amd64 (1.4.4-2ubuntu2)
  • libnetplan0:amd64 (0.99-0ubuntu3~20.04.2)
  • libsmbios-c2:amd64 (2.4.3-1)
  • libtss2-esys0:amd64 (2.3.2-1)
  • libxmlb1:amd64 (0.1.15-2)
  • nano:amd64 (4.8-1ubuntu1)
  • netplan.io:amd64 (0.99-0ubuntu3~20.04.2)
  • popularity-contest:amd64 (1.69ubuntu1)
  • python3-apport:amd64 (2.20.11-0ubuntu27.12)
  • python3-blinker:amd64 (1.4+dfsg1-0.3ubuntu1)
  • python3-debconf:amd64 (1.5.73)
  • python3-debian:amd64 (0.1.36ubuntu1)
  • python3-distro-info:amd64 (0.23ubuntu1)
  • python3-distupgrade:amd64 (1:20.04.23)
  • python3-entrypoints:amd64 (0.3-2ubuntu1)
  • python3-httplib2:amd64 (0.14.0-1ubuntu1)
  • python3-importlib-metadata:amd64 (1.5.0-1)
  • python3-jinja2:amd64 (2.10.1-2)
  • python3-jsonpatch:amd64 (1.23-3)
  • python3-json-pointer:amd64 (2.0-0ubuntu1)
  • python3-jsonschema:amd64 (3.2.0-0ubuntu2)
  • python3-jwt:amd64 (1.7.1-2ubuntu2)
  • python3-keyring:amd64 (18.0.1-2ubuntu1)
  • python3-launchpadlib:amd64 (1.10.13-1)
  • python3-lazr.restfulclient:amd64 (0.14.2-2build1)
  • python3-lazr.uri:amd64 (1.0.3-4build1)
  • python3-markupsafe:amd64 (1.1.0-1build2)
  • python3-more-itertools:amd64 (4.2.0-1build1)
  • python3-oauthlib:amd64 (3.1.0-1ubuntu2)
  • python3-problem-report:amd64 (2.20.11-0ubuntu27.12)
  • python3-pyrsistent:amd64 (0.15.5-1build1)
  • python3-secretstorage:amd64 (2.3.1-2ubuntu1)
  • python3-simplejson:amd64 (3.16.0-2ubuntu2)
  • python3-systemd:amd64 (234-3build2)
  • python3-update-manager:amd64 (1:20.04.10.1)
  • python3-wadllib:amd64 (1.3.3-3build1)
  • python3-zipp:amd64 (1.0.0-1)
  • tpm-udev:amd64 (0.4)
  • ubuntu-minimal:amd64 (1.450.1)
  • ubuntu-release-upgrader-core:amd64 (1:20.04.23)
  • ubuntu-server:amd64 (1.450.1)
  • ubuntu-standard:amd64 (1.450.1)
  • unattended-upgrades:amd64 (2.3)
  • update-manager-core:amd64 (1:20.04.10.1)
  • update-notifier-common:amd64 (3.192.30)

build-essential をインストール

開発機なので基本として。gcc や make など必須系のパッケージが入る。

$ sudo apt update
$ sudo apt install -y --no-install-recommends build-essential

dotfiles で初期設定

よくあるあれです。 github.com

やってることは本当に必要最小限。VSCode に乗り換えたので .emacs もない。

FILES = .gitconfig .bash_aliases .screenrc .tmux.conf .vimrc

PACKAGES = build-essential manpages-dev glibc-doc linux-doc git jq \
        gdb debconf-utils fakeroot devscripts

PWD := $(shell pwd)

all:
        @echo Making symlinks to dotfiles...
        for f in $(FILES); do \
                rm -f $$HOME/$$f; \
                ln -s $(PWD)/$$f $$HOME/$$f; \
        done

        @echo Insert hooks...
        if ! grep -q '^. $(PWD)/.bashrc' $$HOME/.bashrc; then \
                echo ". $(PWD)/.bashrc" >>$$HOME/.bashrc; \
        fi
        if ! grep -q '^. $(PWD)/.profile' $$HOME/.profile; then \
                echo ". $(PWD)/.profile" >>$$HOME/.profile; \
        fi
        if ! grep -q '^    . $$HOME/.profile.local' $$HOME/.profile; then \
                echo 'if [ -f $$HOME/.profile.local ]; then' >>$$HOME/.profile; \
                echo '    . $$HOME/.profile.local' >>$$HOME/.profile; \
                echo 'fi' >>$$HOME/.profile; \
        fi

setup:
        @echo Install packages...
        sudo apt-get -y install --no-install-recommends $(PACKAGES)

.PHONY: all setup
$ git clone https://github.com/ymmt2005/dotfiles
$ cd dotfiles
$ make setup
$ make

Go をインストール

最近は Go でしかプログラミングしてません。
Python 長年使っていたのも、今やってるプロジェクトでは全廃しちゃいました。

というわけで Go をインストールします。

$ sudo rm -rf /usr/local/go   # 再インストールするときは消してから
$ curl -fsL https://golang.org/dl/go1.15.6.linux-amd64.tar.gz | sudo tar -C /usr/local -xzf -

Docker をインストール

snap ではなく Docker 公式を入れるのが無難です。 公式手順通りにやるだけ。

Install Docker Engine on Ubuntu | Docker Documentation

以上

Windows の VisualStudio Code から Remote Development with SSH で後は開発できるので、これにて完了です。

開発環境、年々シンプルになって、こだわりのポイントが何を purge するかくらいになっちゃいました。