使わなくなったノート PC をサーバーにしてみた

# まえがき

ネットワークまわりの勉強を『マスタリング TCP/IP』でしたばかりの私です。
結局 ssh とか telnet とか http 通信とかどうなってるんだ、と思い、自分で遊べる環境を作りたい...
最近は AWS とか、クラウド環境が人気？だけどどうやったらいいかわからない。
そこで、今は使ってないノートパソコンをいっそサーバーにしていろいろいじってみようと思って、やってみました。
なお、日記のようなものなので、サーバー化の解説を望んでいる人は他をあたるとたぶんいい。余計な説明が多すぎるので。

# はじめる前の筆者のスペック

- ある程度勉強はしているつもりだけど全く手を動かしたことはない
- TCP の 3way ハンドシェイクとかは分かるし、HTTP の GET とかも知っているつもり、というレベル
- Linux コマンドは cd ls rm mkdir cat くらいしか知らない（あとで出てきますが chmod echo は始める前ではよく知らない）
- コーディングも学校の授業程度（最近ちょっと Go で競プロをやりはじめた）

こんな程度なので、たぶん完全アマチュアです。いま必死にいろいろやって追いつこうと頑張ってます、たぶん

# 今回の環境

今回使った 使わなくなったノートPC のスペックはつぎの通り

<dl>
<dt>製品</dt>
<dd>Panasonic Let's note CF-SX4</dd>
<dt>もともとの OS</dt>
<dd>Windows 10 Pro</dd>
<dt>CPU</dt>
<dd>Intel Core i5-5300U</dd>
<dt>メモリ</dt>
<dd>4 GB</dd>
<dt>ディスク容量</dt>
<dd>たぶん SSD で 512 GB くらいあった気がする（Linux での確認の仕方がわからなくてもう見れない）</dd>
</dl>

もともとパパ上が会社で使っていたノート PC を譲り受けた。ので、Pro になっている。また、BIOS の設定もかかっていて、いちいち会社用のログインパスワード入れないといけなかったが、解除できると知ってこれは早々に解除した記憶がある（中学生高校生くらいの話）。で確かもともとついてた HDD を SSD に差し替えた記憶がある。ノート PC だけど無理やりできたんだと思う。大学生になって今のノート PC を入手したので、ここ 3 年くらいは引き出しのこやしだった。そんな君には私のおもちゃになってもらおう、ということである。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/8dd952ec-8039-0fcb-a3a9-cb16d1337b27.jpeg">

こんな感じ。今は使ってないけど高校物理の公式を散りばめてたわりとお気に入りだったデスクトップがチラ見えしている。


# サーバー化をするためにやったこと

今回はなんかサーバーにするなら Linux がいいと調べていてわかって、Linux もいっぱいあるけど Ubuntu って聞いたことあるし、自分の Windows PC にも入っている（wsl）からこれにしよう。なので、Ubuntu Server を使います。現時点の最新は「 Ubuntu Server 24.04 LTS 」でした。

ここから順を追ってやったことを記していきます。

### (1) イメージファイルの入手

Linux を「サーバーに変身する子」（サーバー PC と今後呼ぶ）にインストールしないとならない。まず、自分の普段使っている PC（ノート PC と呼ぶ）に [公式サイト](https://jp.ubuntu.com/download) から「 Ubuntu Server 24.04 LTS 」の iso ファイルをダウンロードした。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/d2dec62e-e70c-9809-1aa2-a0e7282e216d.png">

「 ubuntu-24.04-live-server-amd64.iso 」というファイルが手に入った。で、どうやらこれを DVD か USB に落としてこれをサーバー PC にぶち挿してそこから OS をインストールするらしい。

今回は USB を使いました（DVD がないし、USB のが便利だと思ったし、持ってる）。しかし、ただその iso ファイルを USB に入れるんじゃダメらしく、OS のインストールができるようにしないといけないらしい。

そこで「 [Rufus](https://rufus.ie/ja/) 」というソフトを使った（無料）。OS の USB 用ドライブを作るのによく使われるらしい。これをインストールすると普通に実行ファイルを GET できる（インストーラーじゃない）。

準備が整ったのでノート PC に USB をぶち挿して、Rufus を起動。「デバイス」に挿した USB、「ブートの種類」に「選択」からさっきの iso ファイルを選び、ほかは特になにもいじらず（なんだかよくわからないので触らない）「スタート」。このとき、もともと USB にあったデータは消えてなくなるので、バックアップか、空の USB、もうどうでもいいものを使おう。また、「スタート」を押したら「 ISOHybrid イメージの検出」というポップアップが出てきたけど、特に気にしないで OK を押した。その後データ消えちゃうよ～の警告があってそれも OK。

<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/67e0d429-7084-37d2-c81a-c85d59ad66dd.png">

完了すると、USB の中身がこんな感じになる。これが OS のインストーラーになる。すごい。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/d06dd313-0343-96f7-8608-4b0c03c568b7.png">

ここまで出来たらつぎはいよいよ OS のインストール

### (2) サーバー PC に Linux をインストールする

Windows 10 が入っていてしかも中身も結構残っていたサーバー PC にさよならして、Linux を導入します。データに関しては今のノート PC へ替えた際に移行しているので消えてもよいものです。

まず、サーバー PC にさっき OS のインストーラーを入れた USB を挿して電源を入れる。そしてこのとき F2 キーを連打して BIOS の画面を開く。これは HDD から起動をすると、Windows が起動してしまうので USB から起動するように設定を変えるためである。お使いのデバイスで設定をしてください。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/bae4db6e-8e88-bc28-91d7-3556e173a097.jpeg">

この端末だと起動オプション優先度で USB と書いてあるものを上位にすれば出来た。キーとハードディスクと光学ドライブの違いはわからん。

BIOS の設定をして再度起動すると、こんな感じでめちゃめちゃ文字が流れていく。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/723b4481-5d16-4e40-ddc0-038443c45895.jpeg">

しばらくすると画面上端に赤い帯と言語のリストが表示される（写真ないです）。日本語は残念ながらなかったので English を選択した。
なお、ここからのインストールは以下の 2 つのサイトを参考に進めているのでそちらも参照してください。

[Ubuntu Server OS を新規にインストールする](https://zenn.dev/mesgory/articles/ffe5cc73fe5650)
[Ubuntu Server 20.04 LTSをインストールする。](https://zenn.dev/hatotk/articles/install-ubuntu-server-20-04-lts)

なんかいろいろ設定をしていく。keyboad はどちらも Japanese にした。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/28521d08-85b9-db3f-9bbc-57eb76748b13.jpeg">

これは minimized にした。どう違うのかわかんないけど。とりあえずよくわからないのは上のサイトの通りにやった。ネットワークらへんは特に何もいじってない。プロキシのところもスルーした。

:::note info
**追記**：

まず、`minimized` はマジで最小限のパッケージのみという意味で、後述する `vim` `less` など各種コマンドがない、ので不便。そのため、なんか Linux とかあんまよく知らないくらいだったら `minimized` はやめた方がいいかも（1 敗）

また、ネットワークの設定はここではスルーしているが記事最後の「PS 的ななにか」で書いてるとおり、ここで Wi-Fi の設定ができるので有線 LAN がない場合はするとよい（1 敗）
:::

でなんやかんや進めていると Profile Configuration に来る。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/f2d6994c-b16b-d4dc-8892-64ba6c3fb4df.jpeg">

ここは重要で、今後のこのサーバー君のお名前になる。
<dl>
<dt>Your name</dt>
<dd>特に関係ない。username にあわせる</dd>
<dt>Your servers name</dt>
<dd>サーバーの名前になる。他の端末で叩くときとかのお名前になるので分かりやすくつけよう</dd>
<dt>Pick a username</dt>
<dd>いわゆるユーザーネーム、ユーザー ID。再起動してログインするときとかに入力が必要。Windows だとログイン時に出てくる名前とかに近い？これがユーザーディレクトリの名前になるので長すぎるとめんどうになるかも</dd>
<dt>Choose a password</dt>
<dd>OS にログインするときのパスワード</dd>
</dl>

これでまたなんやかんや進めるとインストールが始まる。OpenSSH のインストールはしておこう！他の端末からログインするために必要だぞ！

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/2ecc0b3e-288d-9fb8-f358-4bbd96d4ba59.jpeg">

インストールが完了すると下の方に Reboot Now が出てくる。
**しかし、これを押す前に USB を取り外しておく。**
そうしないとまたインストーラーが起動しちゃう（のかな）。私も危うく忘れていて危なかった。

再起動するとまた画面が文字でバババッて流れたあとログインを要求される。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/13740755-ced9-d9e5-eba2-5f8dd66bf00f.jpeg">

先ほど設定したユーザーネームとパスワードでログインすると無事に Ubuntu Server がインストールできた！！！！！！
cd とか ls とか叩いてしばらく感動にふけっていました。一応、今の Windows ノート PC に wsl は学校の授業で入れていたので Linux の操作はほんの少しはやっている私である。

ひとまず、インストールはできた。
で、、、、ここからが大変だった、、、、さあ地獄のネットワーク設定へ

### (3) Wi-Fi の設定

Linux もインストールできたしバンザイ！とりあえず、ノート PC からこのサーバー PC に SSH でつなげてみるところまではやってみよう！
そうのんきに思っていた私だったが、あれ、どうやってネットにつなぐの？という疑問に当たる。
いや、単純明快だ、有線LAN を接続すればいいじょのいこと思うが、これは少しめんどうなのだ。詳しいことは書かないけどわが家のネットワーク配線はだるいことになっていて、有線を引くのが骨が折れる（いやでもサーバー PC は言ってもラップトップなんだからルーターの眼の前にもってこればいいんだけど...）。
まあ、有線はちょっとだけめんどうだから Wi-Fi でつなげてみよう。絶対方法あるでしょ、と思い調べたらありそう！それはやってみよう！
実はこれがかなり大変なのであった。まあでも Linux コマンドのいい勉強にはなったのでよしとする。

参考にしたサイトは次のとおり
[[Raspberry Pi] CUIコマンドで Ubuntu Server の Wifi 設定をする](https://nosubject.io/raspberry-pi-cui-ubuntu-server-wifi-configuration/)
[【Ubuntu Server 22.04.1】ターミナル上でWiFi接続](https://qiita.com/mio256/items/88b9c04fc7a02dc3bfe6)
<br>
まず、`ip a` というコマンドを打つと自分の NIC と MAC アドレスや IP アドレスが一覧で表示されるらしい。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/4a928c8f-360b-5d0c-fdcf-4893acc451e7.jpeg">

このサーバー PC には Wi-Fi と有線 LAN ポートが 1 つある。よってループバックと合わせて 3 つ表示されている（MAC アドレスは隠している）。ネットに繋がっていれば、たとえば有線を挿していれば enp0s25 のとこに IP アドレスが書かれることになる。けど、なにもないのでつながっていない。
ちなみに `enp025` が有線のポートで `wlp2s0` が Wi-Fi の名前？なんか識別名みたいなやつ。これ、使うので覚えとく。

さてどうやってネットにつなげればいいのか。いろいろ調べていたら `/etc/netplan` というディレクトリにその設定ファイルがあるらしい。起動時にはホームディレクトリにいるのでそこに動いてみる。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/0114dcc9-c6be-3563-40d5-e4c5c61d079d.jpeg">

すると `50-cloud-init.yaml` というファイルがあり、これを見てみると

```50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s25:
            dhcp4: true
    version: 2
    wifis: {}
```

こんなんになっていた。調べた結果によると、ここの `wifis:` の後ろの部分を編集すればいいらしい。ちなみにこうする。

```50-cloud-init.yaml
network:
    ethernets:
        enp0s25:
            dhcp4: true
    version: 2
    wifis:
        wlp2s0:
            dhcp4: true
            optional: true
            access-points:
                [SSID]:
                    password: "[セキュリティキー]"
```

[SSID] などは [ ] をまるごと含めて設定した Wi-Fi の SSID、セキュリティキーに置き換える。空白の数とかはこの通り合わせるらしい。optional がなんなのかはよくわかってないが、とりあえず調べたらこうすればいいと分かった。なお、`wifis:` のすぐ後にはさっき見た Wi-Fi の識別子みたいなやつを書く。今回は `wlp2s0`（ここが自分の機器によって変わるのに気付けなくてネットに書いてあるのをコピペしていたら全く動かなくてしばらく悩んでいたのは内緒。どうやら記事の `wlan0` はラズパイのものみたい。これに苦戦させられたぜ全く）。
<br>
よし、やれば良いことは分かった。このファイルを編集すればいいんだな！よし編集編集～えーと編集するのってどうやるんだっけ。お、`vi` っていうコマンドがあるのかなるほどなるほど。えいっ

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/609143be-a35d-493f-46d8-b56b5092adbf.jpeg">

え、コマンドがない！？！？そんな....
はい、ここで大変なことに気づく。なぜか、たぶん標準で使えるべきはずのコマンドに使えないものがあるのだ。
`vi` `less` `ping` などは使えなかった。`touch` `echo` `curl` `cat` `chmod` `sed` とかは使えた。

どうやってこの yaml ファイルを編集したものか...いろいろ試行錯誤をしてみる。すると `echo` コマンドを使えば文末に付け足しすることができるんだな、早速使ってみよう
すると、なぜか使えない。あ許可がされてない、そっか `sudo` を忘れちゃいけないね。あれ、`sudo` でも使えない。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/7683d4da-05cc-22be-f37b-b4e55b7d8475.jpeg">

困った。困った。本当に困った。これを解決するのにすごい時間がかかった。
結論から言うと権限を編集しなくてはならなかった。書き込みが制限されていてできなかったのだ！
権限を編集するコマンドは `chmod` これの使い方は調べてください。`777` で指定すると最強になるということだけ書いとく。
これで編集もできるようになった。ちなみに `sed` コマンドなども駆使して頑張って編集した。もう昨日のことなのであんまり覚えてない。てか今やったら `sed` はもしかしたら使えたかも？まあとりあえず、しっかり `wifis:` の項目を書いて次のコマンドで設定の適応をすると
```sh
~$ sudo netplan apply
```
無事にネットに繋がった！！！！！！まさか権限を編集しないと編集できなかったとは...直近に学校の授業でこんな話を聞いていて、覚えていたから良かったかもしれない。知らなかったら一生つまづいていたかも。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/11c7a66c-f4bc-ac68-c9c9-d6e76f70d855.jpeg">

ちゃんと 192.168. が割り当てられてる！！ここまで来るのに本当にめちゃめちゃ試行錯誤したのでめっちゃ達成感があって嬉しかった。


### (4) SSH でつなげてみるまで

無事にネットに繋ぐことが出来たのでさっきゅうにパッケージのアップデートなどをした。また、使えなかったコマンドなどはインストールした。

いよいよ SSH 接続をしてみるが、実はもうできる。OS インストール時に OpenSSH をインストールしているので SSH デーモンは既にあり、TCP/22 番も空いている模様。
何が問題かといえば、今はまだ動的 IP になっている。よって固定化してみよう！

でももうこっちのノート PC で操作したくてうずうずしているので固定化は SSH つなげてこっちでやってみることにした。

以下が参考
[[ubuntu]Wifi接続でIPアドレスを固定化する](https://mucom.blog/ubuntu-wifi-static-ip/)

#### SSH のつなげ方

まず、つなげたい方（サーバー PC）の IP アドレスを確認する。サーバー PC の方で `ip a` コマンドを打つ。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/11c7a66c-f4bc-ac68-c9c9-d6e76f70d855.jpeg">

さっきと同じ写真だけど IP アドレスが `192.168.1.12` だと分かる。これはネットに再接続とか再起動しない限りは動的でも変わらないので一旦これを覚えてメイン PC へ移動。

メイン PC でコマンドプロンプトを起動する。ちなみにメイン PC は Windows 11 である。ここで
```
> ssh gj5752@192.168.1.12
```
のように `サーバー PC のユーザ名 @ IPアドレス` の形で `ssh` コマンドを打つ。するとなんか yes を求められる（たぶん初回は）ので yes するとパスワードを入れろと言われる。サーバー PC のパスワードを入れるとログインが出来た！

<img Width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/c3fbbbb2-ac84-b23a-bcfa-18a82550ce21.png">

これで好きなようにいじれる。たのしい。ファイルとか作ってみるとちゃんと同期してるあたりまえだけど。たのしい。

#### 固定 IP 化

固定 IP 化をするぞーー！おーー！これはさっき Wi-Fi のときにいじってた yaml ファイルに追記をする。
まず、このネットワークのデフォルトゲートウェイとネームサーバーが何かを確認する。サーバー PC で `ip a` してもいいし、Windows で `ipconfig -all` でもよい。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/efe58ef5-f72d-344a-8efb-92e5186e7de9.png">

これを見るとデフォルトゲートウェイ（ルータの内部ネットワーク側 IP）が 192.168.1.1 で、DNS サーバーも 192.168.1.1 と分かる。これをもとに、yaml ファイルを次のように書き換える。


```50-cloud-init.yaml
network:
    ethernets:
        enp0s25:
            dhcp4: true
    version: 2
    wifis:
        wlp2s0:
            dhcp4: false
            optional: true
            addresses:
                - 192.168.1.50/24
            nameservers:
                addresses: [192.168.1.1]
            access-points:
                [SSID]:
                    password: "[セキュリティキー]"
```

`dhcp4` を `false` にして、ネームサーバーを置く。`addresses` には自分が固定化したい IP を入れる。今回は .50 にしてみた。
これを編集して `sudo netplan apply` で適用させる（このとき警告が出るけどよくわからない、動いてるので OK！）。
そして `ip a` で IP アドレスを確認してみると確かに `192.168.1.50` になっている！

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/53b11a33-cecd-d0bc-4c3c-193668b829e7.jpeg">


これで固定化ができた。ためしに再起動などしてみても同じ IP になっていると思う。
晴れて固定 IP で SSH 接続ができるようになった！これにてひとまず完了！！！！！！！！！！！！！！！！！！！！

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/f425240a-9246-0763-e076-9488031568d4.png">

# このあとやりたいこと

とりあえずサーバーを立てる！ということはできた。でもまだ、リモート接続ができるだけ。この子を Web サーバーとかファイルサーバーとかいろんなことを実験できるようにいろいろしていきたい。
ゆくゆくはインターネッツからもアクセスできるようになるといいな。

追記：SSH つなぐとき、公開鍵とかなんもやってないな―と思って調べたら、SSH にはパスワード認証と鍵認証の 2 種類があるみたい。今回やったのはパスワード認証です。

ひとまずはこれで終了です。ふー


# PS 的ななにか

まだ何もしてないからもう一回インストールをし直してみようと思ったらどうやら Ubuntu Server のインストールの段階で Wi-Fi の設定はできたみたい。また、minimized じゃなくて普通のにしたら普通に `vim` とか使えた。

Network Configuration というところで、普通に設定できました。これから有線なしで Wi-Fi で Ubuntu Server を入れようと思っているあなたはここで設定しようね！

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/77a63ddf-91a9-4a2a-866e-59d8665586b2.jpeg">

最初は上の画像の `eth` のように not connected になっているので、その部分を選択すると Wi-Fi ルータの SSID やパスワードを入れるポップアップが出てくる。入力して SAVE すると、`DHCPv4` って書いてあるところに IP アドレスが出現する。バカ簡単やんけ！！

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810010/cceff672-7e0c-343e-b6c1-abc980668ca1.jpeg">

ちなみに `DHCPv4` のとこを選択すればこんな感じで IP の固定化とかもできちゃう。`Method:` を `Manual` にしていろいろ入れていく。だいたい yaml 編集したときと同じだけど、サブネットのとこはだいたい /24 だと思うので、デフォルトゲートウェイを調べたときなどの IP アドレスの /24 まで書いて、最後の部分は .0 でよい。

これで Wi-Fi と固定 IP の設定は OK。こんなかんたんだったとは... とほほ


# 更新履歴

2024/07/04 公開
2024/07/05 追記（minimized と ssh パスワード認証、PS 的ななにか）