Ubuntu Serverセットアップ（macでインストールメディア作成）

**(2023/11/28 追記)　古い情報となりました。各項目は設定の参考になるかもしれませんが、メンテナンスしていないため実行は非推奨です。**

初心者向けにいろいろな手順を1ページにまとめたものです。
※自分用も兼ねています。色々面倒になって再インストールする頻度が高めなので（Docker使えよというツッコミは不要）。
* サーバ用のUbuntu（__GUI無し__）
* インストールメディア：**macのTerminal**を使って作成
* インストール時の設定：簡単、大雑把、自分用
* 立ち上げ後にする設定：HWE、alias、zsh化、pip3、emacs、ssh

# macでインストールメディア作成
1.　__macにUbuntu Serverのisoファイルをダウンロード__
[公式ページ](https://jp.ubuntu.com/download)の「Ubuntu Server XX.04 LTS」のダウンロードボタンから。
 （時間がかかるので、ダウンロード中に以下の動作を実行）

2.　__macにUSBを刺す__
サイズは4GBもあれば十分です。

3.　__Terminalを開き、__`diskutil list`__を実行__
 (external, physical)の表記がある & 容量がそれっぽいdiskを探します。
その/dev/diskN（Nは実際には数字）をコマンドで使用することになります。
```
/dev/diskN (external, physical):
   #:                   TYPE NAME       SIZE      IDENTIFIER
   0: FDisk_partition_scheme           *31.4 GB   diskN
   1:         Windows_FAT_32 NO NAME    31.4 GB   diskNs1
 ```
このUSBは32GBでした。

4.　__USBをMS_DOS(FAT)形式で初期化、アンマウント、isoを書き込む__
```shell
sudo diskutil eraseDisk FAT32 好きなUSB名 MBRFormat /dev/diskN
diskutil unMountDisk /dev/diskN
cd ~/Downloads
sudo dd if=最初にダウンロードしたなんとか.iso of=/dev/rdiskN bs=1m
diskutil eject /dev/diskN
```

# Ubuntuのインストール
1.　USBをPCに刺す
2.　PCの電源を入れて、F2連打などでBIOSに入る
3.　BIOSの起動設定で、インストールメディアのUSBを起動優先度の一番上にして、起動を再開
　　・同じUSBの表示が複数ある場合は、一番シンプルな名前のものだけ一番上へ

<br>インストールの設定が開始されます。<br>環境によってはインストーラのアップデートが前後するようです。<br>


4.　**言語設定**が表示されるので、`English`を選択
　　・UKじゃない方でOK
5.　**キーボード設定**が表示されるので、`Japanese`を選択
　　・Japanese-86じゃなくてOK

### 6.　ネットワーク設定
　　※DHCPの自動IP取得を使うならそのままにして、次へ
　　・自機では固定IPv4を使っています。
　　　6-1.　一番上の[ensxx eth - ▶]を選択し、`Edit IPv4`を選択
　　　6-2.　以下のように設定（一部xで伏字）
```
IPv4 Method: [ Manual ▼]
        Subnet: xxx.xxx.xxx.128/25    # サブネットのアドレスをCIDR形式で
       Address: xxx.xxx.xxx.249       # 自機に割り振るIPv4
       Gateway: xxx.xxx.xxx.254       # サブネットのゲートウェイのIPv4
  Name servers: xxx.xxx.xxx.3         # コミュニティ内のDNSサーバのIPv4
Search domains:                       # 空欄。コミュニティによってはxxx.xxx.comとか入れるらしい
```
　　　6-3.　Bond設定は不要なので[Create bond ▶]は弄らない
　　　6-4.　ネットワークの設定が終わるまで待つ
　　　　　　・[Back]の上の項目が[Done]になったら、選択して先に進む

7.　Proxy設定は不要だったので[Done]を選択

8.　**インストーラのアップデート確認**が表示されたら、[Update to the new installer]を選択

9.　ミラーサーバはjp.archive.ubuntu.comに自動でなってるので[Done]を選択

### 10.　ストレージ設定
　　※デフォルトがいい場合：`Use an entire disk`と`Set up this disk as an LVM group`にチェック
　　Encryptはセキュリティにおいて暗号化が必要がある場合のみ推奨です。
　　[Done]を2回続けて選択してストレージ設定は終了します。

　・以下では`/home`だけは別パーティション or 別デバイスにしていますが（最悪の事態に備えてデータを取り出しやすいように？）、**現在はデフォルトの設定をそのまま適用したほうが良いでしょう**（初期設定をそのまま使用し、以下の10-1から10-4まではスキップ）。
　　10-1.　**Custom storage layout**を選択
　　10-2.　AVAILABLE DEVICESにあるDEVICEで、`/home`用のデバイスを選択
　　10-3.　`Add GPT Partition`を選択し、以下のように設定
```
Size (max xxxG): 250           # 残り容量が100GBは残るくらいの数値
                               # /home専用デバイスなら空欄でOK
         Format: [ ext4 ▼]     # 基本的にext4でOK
          Mount: [ /home ▼]
```
　　10-4.　残り容量は`/`に割り当てる

11.　Confirm destructive actionの表示
　　これはインストール開始するとディスクを上書きするから操作は取り消せませんよ、という注意です。`Continue`でインストールが開始されます。

### 12.　インストール時のユーザ作成
　　※この際に作成するのは**管理者アカウント**だと思ったほうが良いでしょう
　　（常用ユーザは後で別に作成することを推奨）
```
            Your name:             # 空欄でOK
   Your server's name: ubuntu1     # サーバ名（外から見た場合のPCの名前）
     Pick a user name: user1       # ユーザ名。adminで良いかも
    Choose a password: xxxxxxx     # パスワード。もちろんpasswdはNG
Confirm your password: xxxxxxx     # パスワードの確認
```

13.　SSH Setup
　　・`Install OpenSSH server`にチェック
　　・`Import SSH identity`はNoでOK

14.　Featured Server Snaps
　　・何も選択しない（後からでも設定可能）

15.　再起動
　　・インストールメディア（USB）を抜く

# Ubuntuに色々と設定する
### 基本的な初期設定
```shell
sudo timedatectl set-timezone Asia/Tokyo     # 日本時間にする
sudo systemctl set-default multi-user        # 明示的にCUIに固定
```

### Ubuntu Pro
Ubuntu Proというサービスがあります。
適用するならUbuntu Oneアカウントでサブスクリプションを取得し、パーソナルトークン（[YOUR_TOKEN]）を入手します。
```shell
sudo apt update && sudo apt upgrade -y
sudo pro attach [YOUR_TOKEN]
```

### HWEカーネル
HWEというカーネルもあります。
これはLTS以降にリリースされたカーネルを、LTSでも使えるようにしたカーネルです。適用する場合は、以下のコマンドを実行。
下記は古くなってるかもしれないので、この[公式ページ](https://wiki.ubuntu.com/Kernel/LTSEnablementStack)を参照してください。
```shell
sudo apt install --install-recommends linux-generic-hwe-20.04    # HWE化
```

### 常用（作業用）ユーザの作成、sudo権限付与
```shell
sudo adduser USER_NAME
sudo gpasswd -a USER_NAME sudo
```
<br>
※以下は作業用ユーザでログインしてのカスタマイズです。

### sshの設定
```shell
install -m 0700 -d ~/.ssh
cd ~/.ssh
touch authorized_keys
vi authorized_keys            # localのid_rsa.pubとかの貼り付け
chmod 600 authorized_keys
```

### パッケージインストールなど
```shell
sudo apt install -y python3-pip emacs

# センサ系（CPU温度の監視など）
sudo apt install -y lm-sensors

# c系のパッケージが必要なら
sudo apt install -y build-essential clang-format
```

### emacs
```shell
mkdir ~/.emacs.d
vi ~/.emacs.d/init.el
```
最低限の設定。
```.emacs.d/init.el
;;; バックアップファイル（差分）を作らない (*.*~)
(setq make-backup-files nil)
;;; バックアップファイル（作業中）を作らない (#*.*)
(setq auto-save-default nil)

;;; 対となる括弧をハイライトする
(show-paren-mode t)
(set-face-background 'show-paren-match nil)
(set-face-attribute 'show-paren-match nil
		    :inherit 'highlight)
```

### zsh化
```shell
sudo apt install -y zsh
chsh -s $(which zsh)
```
割とシンプルな`.zshrc`。
```shell:.zshrc
setopt ksharrays                  # シェルスクリプトの配列を0から始める
autoload -Uz colors && colors     # プロンプトに色付けする
setopt prompt_subst               # プロンプト内で変数を展開したりコマンドを実行する

PROMPT='%F{yellow}(%T)%f%F{green}%n%f: '

HISTFILE=~/.zsh_history           # zshのhistory（プロンプトの履歴を保存するファイル）
export HISTSIZE=1000              # 実行中のプロンプトの一時履歴のサイズ
export SAVEHIST=10000             # ~/.zsh_historyに保存される履歴のサイズ
setopt hist_reduce_blanks         # 履歴の余分な空白を減らす
setopt hist_ignore_dups           # 直前と同じコマンドは残さない

function cdls() { \cd "$@" && ls -FG}     # cdの際にlsする
alias cd='chls'

alias ls='ls -FG --color=auto'
alias ll='ls -alFG --color=auto'

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'

alias pip3='python3 -m pip'
```
`pip3`は`python3 -m pip`でローカル環境を使うことが推奨なので、alias化しています。


**参考にした記事、Webページ**
*macでインストールメディア作成* - https://qiita.com/kapibarasensei/items/9fb81f0102f9ccc31559
*Ubuntuのインストール* - https://www.server-memo.net/ubuntu/ubuntu-server-2004_install.html
*Ubuntuのストレージ設定* - https://ubuntu.com/server/docs/install/storage
*Ubuntuタイムゾーン* - https://server-network-note.net/2021/05/ubuntu-2004-lts-server-jst-timezone/
*HWE化* - https://wiki.ubuntu.com/Kernel/LTSEnablementStack
*zsh化* - https://qiita.com/sayama0402/items/ac9e078b024c3287f99f
*zshでcdしたらls* - https://qiita.com/sijiaoh/items/11a66ca9b7c73fa0bb3f