Ubuntuで自宅向けサーバーを構築してみた。


Ubuntuで自宅向けサーバーを構築してみた

TL;DR

  • パッケージ更新を行う。
  • headless化する。
  • SSH接続できるようにする。
  • sambaでファイル共有

対象

  • こんなページを見に来るような人
  • 筆者当時高校2年生と同程度の知識の人
  • Windowsに飽きた人

セットアップ

筆者環境を以下に示します。

  • CPU: Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz, 2900 MHz
  • LAN-board: Gigabyte Onboard Ethernet
  • HDD: WDC WD10EZRZ-22H
  • RAM: CORSAIR 4GB 2

パッケージ更新

たとえば、Ubuntuの日本語パッケージはデフォルトでは追加できません。そのため、下記のコマンドでリポジトリを新規追加してやる必要があります。

wget https://launchpad.net/~sicklylife/+archive/ubuntu/fonts-ja/+files/fonts-nt-ui-jp_2_all.deb
sudo apt upgrade
sudo apt update
sudo apt install ubuntu-restricted-extras
wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
sudo wget https://www.ubuntulinux.jp/sources.list.d/focal.list -O /etc/apt/sources.list.d/ubuntu-ja.list

sudo add-apt-repository -n ppa:libreoffice/ppa
sudo apt update
sudo apt dist-upgrade

基本アプリ群インストール

sudo apt install vim git net-tools ubuntu-defaults-ja ubuntu-restricted-extras zsh mlocate
sudo apt-get update --fix-missing

# zsh
echo '/bin/usr/zsh' >> /etc/shells
sudo chsh -s /bin/usr/zsh
curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh
  • vim text editor 必須
  • git バージョン管理システム 必須級
  • net-tools ネットワーク周りの旧式ツール ないと困る場面がある
  • ubuntu-defaults-ja 日本語周りを完成させる 必須
  • ubuntu-restricted-extras 著作権の関係でデフォルトで入らないやつ 必須
  • zsh shell 保管してくれたり多機能 これ前提で進めていきます
  • 'mlocate' ファイル検索を容易に これ前提で進めていきます
~/.zshrc
# zplug

source ~/.zplug/init.zsh
if ! zplug check --verbose; then
  printf "Install? [y/N]: "
  if read -q; then
    echo; zplug install
  fi
fi

zplug 'zplug/zplug', hook-build:'zplug --self-manage'
zplug "mafredri/zsh-async"
zplug "sindresorhus/pure"
zplug "zsh-users/zsh-syntax-highlighting"
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-completions"
zplug "chrissicool/zsh-256color"
HISTFILE=$HOME/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
zplug load
LANG=C xdg-user-dirs-gtk-update # home以下を英語名にする

ip周り

ip addr | grep 192 # ローカルipの取得
# 以下 net-tools
sudo apt install -y networkd-dispatcher #フック機能を追加
sudo mv ap_start.sh /etc/networkd-dispatcher/routable.d/
sudo mv ap_stop.sh /etc/networkd-dispatcher/off.d/
# 以上
sudo netplan apply #変更適用

ヘッドレス化

やはりGUIが欲しいときはあると思いますので、ヘッドレス・VNCでGUI制御ができるようにします。

前処理

sudo apt install x11vnc
sudo x11vnc -storepasswd /etc/.vncpwd

#以下自動起動する場合
sudo systemctl daemon-reload
sudo systemctl enable x11vnc
sudo systemctl start x11vnc
/etc/systemd/system/x11vnc.service
[Unit]
Description=x11vnc (Remote access)
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -display :0 -rfbauth /etc/.vncpwd -rfbport 5900 -forever -loop -noxdamage -repeat -shared
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=on-failure

[Install]
WantedBy=graphical.target
/etc/X11/xorg.conf.d
Section "Device"
 Identifier      "GPU" 
 Driver          "intel" # [intel/nvidia/amdgpu/radeon/...]
 BusID           "PCI:2:0:0"        # lspci | grep VGAから指定してください
EndSection

Section "Monitor"
        Identifier "DummyMonitor0"
EndSection

Section "Screen"
        Identifier      "Screen0"
        DefaultDepth    24
        Device          "GPU"
        Monitor         "DummyMonitor0"
        SubSection      "Display"
                Depth           24
                # 仮想スクリーンサイズ。
                Virtual         1280 720
        EndSubSection
EndSection

後処理

sudo systemctl set-default multi-user
echo "alias activate_lightdm='sudo systemctl start lightdm'" >> .zshrc
echo "alias activate_vnc='sudo x11vnc -auth guess -display :0 -rfbauth /etc/.vncpwd -rfbport 5900 -forever -loop -noxdamage -repeat -shared'" >> .zshrc

Windowsとファイル共有

sambaを利用します。
[user_name][group_name]は各個人で定義してください。

sudo apt install samba
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.default # コンフィグのバックアップ
sudo adduser [user_name] # sambaユーザーは既存のユーザー名じゃないと作れません
sudo pdbedit -a [user_name] # sambaログインユーザー
sudo mkdir /share/
sudo chmod 770 /share/
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd
/etc/samba/smb.conf
#20行目当たりglobal項に追記
[global]
  dos charset = CP932
  unix charset = UTF-8
  workgroup = WORKGROUP

#40行目当たりNetwroking項の;を外して編集
interfaces = 192.168.1.0/24 eth0 #interfacesにネットワークアドレスとネットマスク、インターフェイス名を
        #ip addrで出てきます。bind interfaces only = yes
  map to guest = bad User
  bind interfaces only = yes

#末尾に追加
[share]
 path = /share
 writeable = yes
 create mode = 0770
 directory mode = 0770
 guest ok = no
 valid users = @[group_name]

#以下minecraft用 、というかこんな感じに追記していきます。
[minecraft]
 path = /server/minecraft
 writable = yes
 create mode = 0770
 directory mode = 0770
 guest ok = no
 valid users = @[users]
最後に再起動
sudo systemctl reload nmbd.service smbd.service

**user周りについては、こと公開する場合にはもう少し細かい設定が必要でしょう。詳細は参考文献やらsudoersやらから調べてみてください。

注釈

vncについて

  • VNC周りを頭に置いていますが、優先度が高い物ではありません。私はこれのインストールに5度失敗してクリーンインストールし直す羽目になりました。グラフィック周りはハマるポイントが多いように思われたので、先に処理してしまうといいでしょう。
  • そもそも初学者はダミープラグを購入するべきだと、筆者は考えています。VGAやD-subならば電子工作の知識があれば100円以内に作れるでしょうし、Amazonでも500円程度で購入できることを確認しました。

構成について

  • 最低限構成にしないとセキュリティ上の問題があるという意見があると思いますが、今回は考慮しません。そもそもこのような初心者が書いた記事を見に来る人など初心者であるでしょうし、私はセキュリティはセキュリティで勉強するべきだと思っています。過不足なくより不自由なく、をモットーにしないと初学者は離れるでしょう。

参考文献