更新履歴

  • 2022/06/26: 初稿
  • 2024/04/20: 起動時I/O error, dev sda, sector xxxxxxxxxxのエラーが発生した。smartctlで確認したところ、問題がなかったので、手順の最新化を行い再度インストールした

アップルをはじめとして、最近スペックがそこそこ良いPCがわけわからないくらい高くなり、誰でも使える個人用のコンピュータというPersnal Computerの趣旨と乖離しています。独断と偏見ですが、せっかく数十万円でPCを購入したのにもかかわらず、

  • パーツ交換不可なので、数年後は電子ゴミになり、自然環境に優しくない
  • 不要なソフトウェア・サービスが多い(たとえば、2022年なのに、バージョン管理非対応のクラウドサービスiCloudが大きなシェアを占めているっていう皮肉)
  • なんとかStoreの通知がうるさい。利用するのにアカウント(個人情報)が必要
  • プライバシー侵害問題

https://www.theguardian.com/world/2021/oct/15/apple-plan-scan-child-abuse-images-tears-heart-of-privacy

別にゲーマーではないですが、数十万払ったのに自由が奪われる感じがどうしても気に入らないので、自作PCからLinuxの開発環境を構築することにしました。

ハードウェア

秋葉原まで行く元気がなかったので、すべてのパーツはAmazonやメルカリから購入することにしました。また、PCパーツの価格変動が激しいのでkeepaのメール通知機能を活用すると簡単に低価格でお気に入りのパーツ狙えます。 https://keepa.com/

最終的に以下のパーツを買いました。

Model Price
Motherboard ASUS Intel B560M-A ¥10,563
CPU Intel Core i5 10400 ¥18,943
GPU ASUS GTX 1650-4G DUAL ¥21,500
Power 玄人志向 KRPW-BK 80PLUS Bronze 750W ¥5,535
Memory KLEVV DDR4 2666 PC4-21300 8GB*2 ¥7,002
Storage Crucial SSD 500GB MX500 ¥5,980
CPU Cooler CPUクーラー 虎徹 Mark II ¥3,400
Case SAMA JAX-03W (second hand) ¥4,480
LAN cable ¥945
Total ¥78,348

あくまで筆者の例ですが、他のパーツに替えても全然問題がありません。パーツ間の互換性と電源容量だけ気をつけてください

完成!!! パーツをマザーボードに突っ込むだけの作業なので、そこまで難しくはないです。

ハードウェアの環境構築を完了したので、これからソフトウェアの環境構築に入ります。

OS: Ubuntu 22.04

なぜ22.04

最近の暗黙的なルールだと偶数年4月(22.04, 20.04.4, 18.04.6)以外のバージョンはLTSではないので、特別な理由がない限り使うのをおすすめしません。せっかくなので最新LTS 22.04 Jammy Jellyfishをインストールします。今度はArch Linux系も挑戦してみたいですね 余談ですが、今年1月まで使っていた21.04のサポートが切れたので、21.10にアップグレードしようとしたら、OS自体が崩壊しました()

https://wiki.ubuntu.com/Releases

Bootable USBを作成

  1. 公式からUbuntu 22.04 LTSをダウンロードします。

https://releases.ubuntu.com/

  1. USBを他のPCに挿し込んで、デバイス名(例えば/dev/sdd)を確認します。
sudo fdisk -l
  1. ddコマンドを実行します。
sudo dd if={YOUR_ISO_NAME} of={YOUR_DEVICE_NAME} bs=1M status=progress

なお、bs=1Mというのは一度に読み書きするサイズを1MBにするという意味です。

  1. USBに組み立てたデスクトップPCに挿し込んで、ガイダンスにしたがって20分前後インストールが完了します。

まずBIOSの設定で、USBから起動するように設定しておきましょう。 その後、インストールの際には、Minimal InstallNormal Installの2つのオプションがありますが、 筆者自身は余計なソフトウェア一切いらないので、Minimal Installを選んでOSをインストールしました。

必要最小限の設定

開発環境を構築する前に、必要最小限なソフトウェアを入れておきましょう。

システムアップデート

sudo apt update
sudo apt upgrade

Wifiドライバー

2024/04/26追記: sudo apt upgradeを実行するとTP-Link Archer T3U系のドライバがインストールされるようになりました。もし、インストールされていない場合は、下記の手順を実行してください。

デスクトップから自宅のルーターの距離が遠いので、USB無線LAN子機を購入しました。しかし、デフォルトのドライバーは想定通りにLinux非対応です。 GitHubでLinux Driver for USB WiFi Adaptersで検索してみたら、下記のLinux用ドライバーを見つけました。しかも最近もバリバリ開発されているようなので、早速入れることにしました。USB無線LAN子機によっては、下記のドライバーが使えない場合もあるので、その場合は別のドライバーを探してください。

RTL8812BU and RTL8822BU Chipsets

https://github.com/morrownr/88x2bu-20210702

README.mdにしたがって、スクリプトでインストールします。

sudo apt install -y dkms git build-essential
git clone https://github.com/morrownr/88x2bu-20210702.git
cd 88x2bu-20210702/
sudo ./install-driver.sh

TP-Link Archer T3U系の場合は、下記のリポジトリを使います。

Clone the repository

sudo apt install git dkms rsync build-essential bc
git clone https://github.com/cilynx/rtl88x2bu.git
cd rtl88x2bu

Install

VER=$(sed -n 's/\PACKAGE_VERSION="\(.*\)"/\1/p' dkms.conf)
sudo rsync -rvhP ./ /usr/src/rtl88x2bu-${VER}
sudo dkms add -m rtl88x2bu -v ${VER}
sudo dkms build -m rtl88x2bu -v ${VER}
sudo dkms install -m rtl88x2bu -v ${VER}
sudo modprobe 88x2bu

入力ソース

Ubuntuはデフォルト英語入力しかはいっていないので、日本語と中国語の入力ソースを追加します。

日本語入力

Setting -> Region & Language -> Manage Installed Languages -> The language support is not installed completely” と表示さて -> Install

sudo apt install ibus-mozc 
ibus restart 
gsettings set org.gnome.desktop.input-sources sources "[('ibus', 'mozc-jp')]"

USキーボードを利用している方はmozc入力モードの切り替えを設定しておくと便利でしょう。

Mozc Setting -> Keymap style -> Customize

  • パッティングを避けるために、「Ctrl Space」になっているコマンドを適当なものに変更 -「key」が「Hankaku/Zenkaku」になっている4箇所を「Ctrl Space」に変更

詳細はこちらの記事 ubuntu mozc 入力モード 切り替えにご参照ください。

PCを再起動すると日本語入力が使えるようになりました。

中国語入力

Add an Input Source -> Chinese (Intelligent Pinyin)

メディア

sudo apt install ubuntu-restricted-extras

開発環境

  • fish shell
  • Visual Studio Code
  • Docker
  • GitHub
  • Python
    • pyenv
    • pyenv-virtualenv
  • Node
    • nvm

fish shell

user-friendlyなシェルfishをインストールします。

https://fishshell.com/

sudo apt install fish
chsh -s $(which fish)

これでfishがデフォルトのshellとして設定されました。 一回再起動すると確認できます。

fishのプラグインを管理ツールfisherをインストールしますで。

curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

Visual Studio Code

https://code.visualstudio.com/docs/setup/linux

.deb packageをダウンロードし、インストールする

sudo apt install ~/Downloads/{YOUR_VERSION}.deb

GitHub

認証

2021年までにtokenを発行してローカルにダウンロードする必要がありましたが、認証用のCLI ghのおかげで、AWSやGCPなどと同じくブラウザ経由で認証できるようになりました。

まずはghをインストールします。 https://github.com/cli/cli/blob/trunk/docs/install_linux.md

https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git

gh auth loginを実行すると認証が完了するので、tokenをローカルに保存しなくても良いです。だいぶ便利になりましたね。

Docker

公式によると、リポジトリ、パッケージ、スクリプトの3種類のインストールする方法がありますが、スクリプトはOSバージョンやCPUアーキテクチャを自動的に識別してくれるので、便利です。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo docker run hello-world

UbuntuはDebian basedのLinuxなので、systemctlserviceコマンドを実行しなくても、dockerは自動的に立ち上がります。また、rootlessでも使いたい場合は追加の設定が必要です。

https://docs.docker.com/engine/security/rootless/

Python

pyenvはシンプルで複数のPythonバージョン切り替えやすいため、今回は採用しました。

pyenv

https://github.com/pyenv/pyenv#automatic-installer

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

~/.config/fish/config.fishに環境変数の設定を追加します。

set -Ux PYENV_ROOT $HOME/.pyenv
set -U fish_user_paths $PYENV_ROOT/bin $fish_user_paths

pyenvのビルド環境

https://github.com/pyenv/pyenv/wiki#suggested-build-environment

sudo apt install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

pyenv-virtualenv

インストール

git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

初期化

pyenv init - | source
pyenv virtualenv-init - | source

実際にPython 3.12.3を入れてみましょう

pyenv install 3.12.3
pyenv virtualenv 3.12.3 {YOUR_NAME}
pyenv local {YOUR_NAME}

Node

Pythonと同じく、そのままnodeをインストールしてしまうと、バージョンを特定したい場合やdependencyを管理するのがめんどくさくなるので、nvmというnodeのバージョンマネージャーを導入します。

nvm

先ほど、fishのプラグインを管理ツールfisherをインストールしたので、fisher install jorgebucaran/nvm.fishで一発インストールできます。

fisher install jorgebucaran/nvm.fish
nvm ls-remote
nvm install 18.4.0

他のシェルを利用している場合は、公式のリポジトリにご参照ください。 https://github.com/nvm-sh/nvm#installing-and-updating

Start Your Voyage

8万円未満でそこそこ良いGPU付きのPCを自作し、開発環境を構築しました。 以上