中古ThinkPad X260にUbuntu22.04を入れて色々カスタマイズしてみた（今後も更新予定）

# 背景

エンジニアとはLinuxで遊ぶものだという噂 ~~偏見~~ を聞きつけて、Linuxで遊び倒そうと思い立ちました。

引越し前に処分したノートPCを惜しみつつ、調べるとThinkPadが良いらしいと聞いてタイトルに至ります。

中古PCを購入するところからUbuntuでカスタマイズを色々して見るところまでです。

初心者向けを目指して、コマンドもそこそこ詳しく解説していきます。



# 1. 中古PCを購入する 
まず、PC性能の許容範囲は「Webプログラミングが不便なくできる程度」で考えました。
ThinkPadはSSD換装やメモリ増設がしやすいので自由度が高いようです。

結果的には下記のようなスペックになりました。

:::note
画面サイズ：12.5型(インチ) 
CPU：第6世代 インテル Core i5 6300U(Skylake)/2.4GHz/2コア 
ストレージ容量：SSD：256GB 
メモリ容量：8GB 
ビデオチップ：Intel HD Graphics 520 
:::

自分でやっても良かったのですが、換装増設済みかつ安く3年保証もついている[PC WRAP](https://www.pcwrap.com/)で購入しました。
（実店舗もサイトも見て回りましたが掘り出し物も多く、今後も利用したいお店です）

# 2. Ubuntuを入れる

## 環境
```
ThinkPad X260
Ubuntu 22.04

Windows10
Rufus 3.20
```

## 前提

* isoファイルを準備するためにWindows環境とUSBメモリを用意する
    * 8GBでも足りそうだけど、今回は32GBくらいのものを使用

* Windows環境に[Rufus](https://rufus.ie/ja/)をインストールしておく
    * USBに起動するisoファイルを書き込むため

* （必要なら）ThinkPadに元から入っているWindowsパーティションを縮小するか、リカバリーファイルを別に取っておく
    * インストールに失敗してもなんとかなる


## やり方

1. インストールする[isoファイル](https://releases.ubuntu.com/22.04/)をダウンロードしてくる
    * 今回は`ubuntu-22.04.1-desktop-amd64.iso`
1. Rufusを起動して、「Device→USB」と「SELECT→ダウンロードしたisoファイル」を選択して書き込む
    * 他の設定は特にいじってない

1. USBを挿してThinkPadを起動し、BIOS設定画面でブート順を変更する
    * なかなかBIOSに入れなかった（**ここが今回一番の罠**）
    * 一旦再起動して、Lenovoロゴが出たタイミングでF1キーを押すと入れた
    * StartupのBootタブに移動して、読み込まれたUSBが最上部にくるようにする

1. 電源を入れ直すとGNU GRUBが開くので、`Try or Install Ubuntu`を選択してインストールを開始する

1. あとは道なりに進む
    * 言語設定やキーボード設定は日本語のデフォルトのものを選択する
    * 「アップデートと他のソフトウェア」では**最小インストール**を選択（これは好みだと思われます）
    * 「インストールの種類」では**ディスクを削除してUbuntuをインストール**を選択
    * タイムゾーンは日本の何処か
    * あとは、「ユーザ名のフルネーム」「ユーザ名」「コンピュータ名」「パスワード」を入力したら待つだけ


以上の作業が終われば無事インストールできているかと思います。

:::note
最初は日本語入力がうまく行かなかったのですが、右上のjaと表示されているところから言語設定を **日本語（Mozc）** にすることで解決しました
:::

# 3. APT のデータ取得元を日本に変更する

LinuxではAPT（Advanced Package Tool）というパッケージ管理ツールを用いてソフトウェアを管理しています。
そのデータ取得元のアーカイブサーバは海外のものになっているため、通信負荷軽減のために日本公式ミラーサーバー`jp.archive.ubuntu.com`に変更します。（富山大学にあるらしい）

```bash
sudo sed -i 's!//archive.ubuntu.com!//jp.archive.ubuntu.com!g' /etc/apt/sources.list
sudo sed -i 's!//us.archive.ubuntu.com!//jp.archive.ubuntu.com!g' /etc/apt/sources.list
sudo sed -i 's!//fr.archive.ubuntu.com!//jp.archive.ubuntu.com!g' /etc/apt/sources.list
sudo apt -y update
```

`/etc/apt/sources.list`はデータ取得元の設定リストファイルになります。
`/etc`フォルダには重要な設定ファイルが入っているため、特権ユーザの権限で（`sudo`）ファイルをいじくります。
`sed`はテキスト処理が色々できるコマンドです。
オプション`-i`をつけて上書きし、`s/(変更前)/(変更後)/`というパラメータで置換処理を行います。
ただ、今回は`cat /etc/apt/sources.list`コマンドなどで確認すると分かるのですが、編集したいテキストは`deb http://archive.ubuntu.com/ubuntu/ jammy main restricted`のように「/」を含むためエスケープしなければいけません。
```bash
sudo sed -i 's/\/\/archive.ubuntu.com/\/\/jp.archive.ubuntu.com/g' /etc/apt/sources.list
```
としても良いのですが、「/」の代わりに使える記号「!」を使っています。
パラメータの最後についている「g」は該当する全部の箇所に処理を適用するという意味です。

```bash
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了 
```

という出力がされたら成功です。

# 4. システムの更新

```bash
sudo apt -y install ca-certificates curl gnupg lsb-release
sudo apt -y install apt-transport-https
sudo apt -y update
sudo apt -y upgrade
sudo apt -y dist-upgrade
sudo apt -y autoremove
sudo apt autoclean
sudo shutdown -r now 
```
SSL接続のためのCA証明書や暗号化ツールなどをインストールして、HTTPSアクセスを可能な状態にしておきます。
`sudo apt update` ローカルパッケージインデックスの更新
`sudo apt upgrade` ポイントリリースの適用（アップデート）
`sudo apt dist-upgrade` 新しいパッケージを追加・更新する
`sudo apt autoremove` 更新して必要亡くなったパッケージを削除
`sudo apt autoclean` キャッシュ済みで未インストールのdevファイルを削除

# 5. タイムゾーンとロケールの設定
言語や地域の設定をします。

```bash
sudo timedatectl set-timezone Asia/Tokyo
export LANG=ja_JP.UTF-8 
export LC_ALL=ja_JP.UTF-8 
export LANGUAGE=ja_JP.UTF-8 
sudo sed -i 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/g' /etc/locale.gen
sudo locale-gen
sudo update-locale LANG=ja_JP.UTF-8
sudo dpkg-reconfigure -f noninteractive locales 
sudo /usr/sbin/update-locale LANG=$LANG LC_ALL=$LANG
```
`timedatectl set-timezone Asia/Tokyo`でタイムゾーン、exportでja_JP.UTF-8を環境変数を設定します。
sedコマンドでロケール定義ファイルでコメントアウトされていたのを戻して、locale-genでコンパイルします。
 localeコマンドで確認すると下記のようになりました。
```bash
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=ja_JP.UTF-8
```

うまくいくと、manコマンドなどで日本語の出力が返されます。


# 最後に

調べているときに、Ubuntu22.04でのエラー報告をいくつか見かけましたが、自分が試したときには問題は起こりませんでした。
もし、同様の手順でやった際にエラーが生じても、解決法をお答えできないかもしれません。
その点をご了承ください。

実は、この記事は今回Ubuntuを入れたThinkPadで書いた初記事となります。
FireFoxを使っていますが、今のところ使用感に問題はなさそうです。
これから色々と設定をいじっていこうと思うので、それも今後追記するなどして残したいと思います。

## 参考
[Lenovo プラットフォーム環境に Ubuntu OEM イメージをインストール](https://support.lenovo.com/jp/ja/solutions/ht512165-how-to-install-the-ubuntu-oem-image-on-your-lenovo-platform)
[BIOSでブート順を変更する- Windows 7, 8, 8.1, 10, 11](https://support.lenovo.com/jp/ja/solutions/ht117661)
[ Ubuntu 22.04 のインストール- 金子邦彦研究室](https://www.kkaneko.jp/tools/ubuntu/ubuntudesktop.html)
[Ubuntu インストール直後のおすすめ設定 ](https://www.kkaneko.jp/tools/ubuntu/ubuntu_setup.html)
[sed コマンド | コマンドの使い方(Linux) | hydroculのメモ](https://hydrocul.github.io/wiki/commands/sed.html)
[Ubuntu Manpage:sources.list - APT のデータ取得元の設定リスト](https://manpages.ubuntu.com/manpages/bionic/ja/man5/sources.list.5.html)