Windows10にリプレイスされて余ったWindows7なPCにUbuntuServer20.04LTSをインストールする

Windows10にリプレイスされるとWindows7なPCが余りますよね

そのまま廃棄してしまうにはもったいないスペックのPCにUbuntuServer20.04LTSをインストールしてみる

作業メモ

まずインストールイメージをダウンロードする

Download Ubuntu Server

Download Ubuntu Server

Bootableなisoイメージがダウンロードできるので、DVDに焼くか、Etcherのようなツールを使用してBootableなUSBメモリを作成する

Etcherを使用してBootableなUSBメモリを作成する

インストールメディアから起動する

  • Install Ubuntu Server
    Install Ubuntu Serverを

  • 言語はとりあえずEnglish
    言語はとりあえずEnglishで

  • 今回はContinue without updating
    今回はContinue without updatingを

  • 日本語キーボードを接続しているのでJapanese
    日本語キーボードを接続しているのでJapanese

  • LANは認識されていました
    LANは認識されていました

  • Proxyは設定不要な環境です
    Proxyは設定不要な環境です

  • ミラーサイトはデフォルトのまま
    ミラーサイトはデフォルトのまま

  • LVM(Logical Volume Manager)は使いません
    LVMは使いません

  • ハードディスクの割当てはおまかせでrootパーティションのみ
    ハードディスクの割当てはおまかせでrootパーティションのみ

  • もうあとには戻れない
    もうあとには戻れない

  • ユーザーを登録
    ユーザーを登録

  • 社内LANのみからアクセスされる予定なので適当に
    社内LANのみからアクセスされる予定なので適当に

  • SSHサーバーはインストール必須
    SSHサーバーはインストール必須

  • やりたいことがあるのでdockerだけインストールしておく
    やりたいことがあるのでdockerだけインストールしておく

  • インストーラーにおまかせして待つ
    インストーラーにおまかせして待つ

  • 先に進めたいのでCancel update and reboot
    先に進めたいのでCancel update and reboot

  • UbuntuServerが起動した
    UbuntuServerが起動した

  • かんたんな初期設定が済むまではコンソールからログインする
    かんたんな初期設定が済むまではコンソールからログインする

UbuntuServerが起動したら

avahi-daemonを使えるようにする

ssh serveradmin@ubuntuserver.localで接続できるようになるので便利!!

$ sudo apt install -y avahi-daemon

ネットワークの設定をする

まずはIPアドレスの確認
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:83:e2:a3 brd ff:ff:ff:ff:ff:ff
    inet 172.16.99.204/16 brd 172.16.99.255 scope global dynamic ens33
       valid_lft 14173sec preferred_lft 14173sec
    inet6 fe80::20c:29ff:fe83:e2a3/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:e8:0b:fe:9d brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
IPv6を無効化

当面のところ社内LANではIPv6は無効化してある
カーネルのIPv6モジュールを無効化することで対応した

$ sudo nano /etc/default/grub
#GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
#GRUB_CMDLINE_LINUX=""
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity ipv6.disable=1"
GRUB_CMDLINE_LINUX="ipv6.disable=1"
$ sudo update-grub
IPアドレスを固定する

avahiで名前解決できない環境に対応するためにIPアドレスも固定しておく

$ sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/99_config.yaml
$ sudo nano /etc/netplan/99_config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: false
      dhcp6: false
      addresses:
        - 172.16.99.254/16
      gateway4: 172.16.99.1
      nameservers:
          addresses: [8.8.8.8]
$ sudo netplan apply
最低限のファイアウォールの設定をしておく

まずsshのアクセスだけを受け付けるようにする
インターネットには晒すつもりはないのでsshのポート番号はデフォルトのままにしておく
もしインターネットに晒す場合は適宜ポート番号を変更するか、ban4ipなどを導入する

$ sudo ufw status
[sudo] password for administrator:
Status: inactive

$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)

$ sudo ufw allow ssh
Rules updated
Rules updated (v6)

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

※Fromは社内LANのネットワークセグメントからに限定しておくのがベター

タイムゾーンを設定する

$ sudo timedatectl set-timezone Asia/Tokyo

ロケールを日本語に設定する

日本語ロケールがインストールされているか確認する
$ localectl list-locales
C.UTF-8
en_US.UTF-8
日本語ロケールをインストールする
$ sudo apt -y install language-pack-ja-base language-pack-ja
$ localectl list-locales
C.UTF-8
en_US.UTF-8
ja_JP.UTF-8
現在のロケールを確認して日本語に設定する
$ localectl
   System Locale: LANG=en_US.UTF-8
       VC Keymap: n/a
      X11 Layout: us
       X11 Model: pc105
$ sudo localectl set-locale LANG=ja_JP.UTF-8
$ localectl
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: n/a
      X11 Layout: us
       X11 Model: pc105
コンソール画面で文字化けした場合は
$ LANG=en_US

.bashrcに設定を書いておけと設定が永続化される

$ echo export LANG=en_US >> .bashrc
$ source ~/.bashrc

ささっと簡単にWebサーバーを構築してみる

いろいろ設定をし忘れたりするので、ポカヨケのためにもできるだけDockerのコンテナを使うようにする

  • まずhttpアクセスを受け入れるようにする
    アクセスを受け入れるポートは8080にする
$ sudo ufw allow 8080/tcp
  • DockerOfficialなhttpdコンテナをポート8080で動かしてみる
$ sudo docker run -d -p 8080:80 --name httpd httpd
23eb26b4cec5b6b4257d2d36a259eb84cacb39419f358d122cd4f7868068ac32

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                  NAMES
23eb26b4cec5        httpd               "httpd-foreground"   16 seconds ago      Up 15 seconds       0.0.0.0:8080->80/tcp   httpd

http://ubuntuserver.local:8080/にアクセスできることを確認しておく

  • httpdコンテナを止めてみる
$ sudo docker stop httpd
httpd

httpdコンテナを止めるとhttp://ubuntuserver.local:8080/にアクセスできなくなることも確認しておくとよい

  • 自分のコンテンツを公開したい
$ mkdir ~/httpd_content

# ※~/httpd_contentになにかコンテンツをコピーする

# ※さっきのコンテナは削除する

$ sudo docker rm httpd

$ sudo docker run -d -p 8080:80 -v "~/httpd_content/:/usr/local/apache2/htdocs/" --name httpd httpd

http://ubuntuserver.local:8080/にアクセスするとコピーしておいたコンテンツが表示されることを確認する

このままコンテンツを充実させていってもよし、WordPressのコンテナを動作させてもよし

再起動したときにコンテナは動いてほしい

--restart=alwaysオプションで対応できる

  • 自動起動を有効化する
$ sudo docker update --restart=always httpd
httpd
  • 自動起動が有効化されているコンテナを確認する
$ sudo docker inspect -f "{{.Name}} {{.HostConfig.RestartPolicy.Name}}" $(sudo docker ps -aq) | grep always
/httpd always
  • 自動起動を無効化する
$ sudo docker update --restart=no httpd
httpd