LoginSignup
1
2

More than 3 years have passed since last update.

使っていないPCをサーバー化してみた

Posted at

今回は使っていないPC=mac、サーバー=ubuntuでやってみましたが、mac以外でもubuntu以外でもほぼ作業は変わらないのでご参考に。

目標

  • 古いmacをdockerサーバーにする
  • メインで使っているPCからSSHで接続して操作する
  • 設定終わったら部屋の隅で電源入れっぱなしにする
  • dockerの研究用

環境

mac : macmini(2011)
USBメモリ: 64G
ubuntu: ubuntu-20.04.1-desktop-amd64.iso

USBメモリにubuntuのインストーラーを入れて、そこから起動してインストールする。
USBメモリは余っていた64Gのものを使用。事前にディスクユーティリティでMSDOSフォーマットした。

古いmacには以下のものを繋いだ

有線LAN
有線キーボード
有線マウス
モニタ

作業が終わったらLANケーブル以外全部外す予定。

インストール

USBメモリにisoを焼く

1. ダウンロード

isoはミラーから落とす方が速い。色々試したが理研のサーバーが一番速かった。

日本国内のダウンロードサイト | Ubuntu Japanese Team

ここからubuntu-20.04.1-desktop-amd64.isoをダウンロード。

2. Etcherでisoをusbに焼く

Ubuntu20.04LTSのブートUSBをMacで作成する - Qiita
ラズパイ の OS イメージを焼くときは Etcher が 便利 & UI カッコいい | 験なきものを思はずは

古いmacをフォーマット

ディスクユーティリティでフォーマットする。ただしインストールの過程でフォーマットするのでこの工程いらないかも。

USBからインストール

古いmacにUSBメモリを刺してoptionキーを押したまま起動。USBのイメージ(?)がなぜか2つ表示されるけどどちらでも良いらしい。クリックしてインストール開始。

最初の選択肢で言語を選べるので素直に日本語を選択。ユーザー名とパスワードだけ忘れないように設定。
あとは適当。できるだけ最小限で余計な物を入れないようにした。

初期設定(サーバーで直接操作)

(ここからは「古いmac」を「サーバー」と呼びます)
最低限必要な操作だけサーバー側で操作する。「端末」という名のターミナルを開く。

sudo apt-get install ssh
systemctl start sshd

これでとりあえずssh接続できる。
接続するipを調べる。

ip a

色々出たけど192.168.0.24の部分だけ控えとく。

ちなみにtips
上ではapt-get installしているけど、現在はapt installが推奨されているらしいです。

初期設定(SSHで繋いで操作)

クライアントである普段使いのPCから接続。

ssh ユーザー名@ホスト名orIPという形式で。

パスワードを入れたら接続できる。

ssh atu@192.168.0.24
atu@192.168.0.24's password:
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-58-generic x86_64)

vimを入れようとしたら失敗

sudo apt upgrade
sudo apt install vim
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 636

ググって解決。

sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo apt install vim

apt-getでエラーが出た場合の対処法:E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) - Qiita

vimを使ったことがない人はvim 使い方等でググって調べて下さい。

ここから必要な工程

  • ipアドレスの固定化
  • ssh鍵の作成、設置
  • sshdの設定変更
    • ルートログインを不可に
    • パスワードログインを不可に
    • port変更
  • sleepしないように設定変更

ここからは指定のない限りメインPC(クライアント)での作業になる。

ipアドレスの固定化

とりあえず接続できたけど、今のままではルーターが時間制限有りでIPを割り振っている状態なので接続できなくなる可能性がある。

まず現在の状態を確認し、インターフェイス名を控えておく(下記のenp2hogeの部分)

# サーバー側
$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp2hoge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.0.24/24 brd 192.168.0.255 scope global dynamic noprefixroute enp2hoge
       valid_lft 83300sec preferred_lft 83300sec

/etc/netplan/の下に新しくyamlファイルを作成する。もともと01-network-manager-all.yamlというファイルがあるが、01の部分を大きい数字にすれば上書きされるのでこのファイルは残しておく。

sudo vim /etc/netplan/99_config.yaml

環境に応じて以下の様に書く。
enp...の部分を先程控えたインターフェイス名に書き換え、addressesを固定ipに書き換える。

network:
  version: 2
  ethernets:
    enp2hoge:
      addresses:
        - 192.168.0.222/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
          - 1.1.1.1
          - 1.0.0.1

注意点
- gateway4 -> もともと繋がっているルーターのアドレス
- addresses -> gateway4の範囲内で指定。この場合は192.168.0.0から192.168.0.255まで
- ↑とは言っても少ない値だったらカブってしまう可能性もあるので192.168.0.100-255くらい?
- ルーターの設定により特定のIPが(例えば100以上)使えない場合もあるので注意
- この設定では192.168.0.222でIPが固定される
- 192.168.0.222/24の最後の部分/24がサブネットマスク
- nameserversはgoogleの8.8.8.8でもなんでもお好きなヤツを
- 保存したら設定を反映させる↓

sudo netplan apply

ここで固まる。ctrl+cも受け付けないのでサーバー側で直接ip aしてみたら設定は反映されてた。
ipアドレスが変わったことで接続ができなくなって固まったということ?
このコマンドはサーバー実機で直接行う方が良さそう。

参考:

[Ubuntu]ローカルIPアドレスを固定にする

【Ubuntu】 /etc/netplan/50-cloud-init.yamlを編集するの止めろ - Qiita

sshの設定

まずクライアントのmacで鍵を作成。私の.ssh/configは設定が多数あるので以下のような構成にしている。

tree
.
├── config
├── github
│   ├── github_rsa
│   └── github_rsa.pub
└── gitlab
    ├── id_rsa
    └── id_rsa.pub

  • 各hostごとにディレクトリを切ってその中に鍵を入れているのですが、そこまでしたくない人は適当に読み替えて下さい。

ssh.keygenで鍵を作るのに昔はrsaを使っていたが現在は非推奨になっているらしい。ed25519がOpenSSH 7.2から使えるようになっているらしいのでバージョン確認。

# クライアント
ssh -V
OpenSSH_7.9p1, LibreSSL 2.7.3
# サーバー
ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f  31 Mar 2020

ed25519が使えるようなので作業開始。

# クライアント
cd .ssh
mkdir macmini
ssh-keygen -t ed25519 -f ~/.ssh/macmini/id_ed25519

次にクライアントで.ssh/configの編集。以下の部分を追加した。

host macmini
  HostName     192.168.0.222
  Port         22
  User         atu
  IdentityFile ~/.ssh/macmini/id_ed25519

クライアントの設定は終わったので次に鍵をサーバーに置く。
上記の例では~/.ssh/macmini/id_ed25519.pubが作成されている。これが公開鍵になる。
scp使うとか色々方法はあるけど今回はid_ed25519.pubを開いて全文コピー、サーバーでペーストした。

# サーバー
mkdir .ssh
vim ~/.ssh/authorized_keys
# vimでペーストして保存

一旦サーバーからexitして接続できるか確認。パスワードを聞かれることなく接続できたら成功。

ssh macmini

参考:

ssh-rsa,非推奨のお知らせ

sshdの設定変更

このままでは外部から侵入された時にブルートフォースされる可能性があるので設定変更。今の所公開する予定は無いけど念の為にsshd_configを書き換える。

以下はssh macminiしてからサーバーでの作業。

sudo vim /etc/ssh/sshd_config

基本的に変更する項目を探して#のコメントアウトを外して値を書き換えるだけ。
たとえばPortの変更は#Port 22#を消して22の部分を変更する。

変更したのは以下の3つ。

Port 12345
PasswordAuthentication no
PermitRootLogin no

保存したら再起動。

sudo /etc/init.d/ssh restart

exitしてクライアント側の.ssh/configを開きPortを変更。

host macmini
  HostName     192.168.0.222
  Port         12345
  User         atu
  IdentityFile ~/.ssh/macmini/id_ed25519

再度ssh macminiで接続できたら成功です。

サスペンドしない設定

サーバーがsleepしないように設定しなきゃいけないと思っていたんだけど、今の所ずっと動いてくれているので何もしてない。ノートパソコンをサーバーにする時は必要なのかも。

Ubuntu,Debianの自動サスペンドの解除 - Qiita

以上で作業終了。

まとめ

これらの作業を終わらせて2日経ちました。この後にdocker入れてpythonでbot作ってscpしてdocker runして無事に動いています。

サーバーはmacとして使っている時はちょっと動かしただけで轟音がしてたのですが、現在はとても静かに動いてくれています。

vagrant等で仮想サーバー建てて動かす方法もありますが、当然スリープしたら止まります。止まらないで24時間動いてくれるサーバーがあるのはやりたいことが膨らんで楽しいです。

古いPCを眠らせている方はぜひサーバーにして遊んでみて下さい!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2