🦑

自作PCからUbuntu22.04開発環境構築してみた

2022/06/26に公開

アップルをはじめとして、最近スペックがそこそこ良い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分前後インストールが完了します。

筆者自身は余計なソフトウェア一切いらないので、Minimal Installを選んでOSをインストールしました。

必要最小限の設定

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

Wifiドライバー

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

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

入力ソース

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

日本語入力

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')]"

Mozc Setting -> Keymap style -> Customize

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

中国語入力

Add an Input Source -> Chinese (Intelligent Pinyin)

メディア

sudo apt-get 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
which fish`
chsh -s /usr/bin/fish
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/code_1.68.1-1655263094_amd64.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-get 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.9.10を入れてみましょう

pyenv install 3.9.10
pyenv virtualenv 3.9.10 {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を自作し、開発環境を構築しました。
以上

Discussion