Sourcetree で diff ツールが起動しなくなる問題

mac 版の Sourcetree の外部 diff ツールがいつの間にか開かなくなっていました。

Xcode に付属している FileMerge を外部ツールとして使えるように設定しなおします。

実行環境

OS
macOS Catalina Version 10.15.7
Sourcetree
Version 4.0.2 (236)

症状

ファイルを右クリックして “External Diff” をクリックしても FileMerge が開きません。

対策

Sourcetree の Preferences を開いて、Diff タブを開きます。

Visual Diff Tool で Custom… を選び、Diff Command と Arguments に以下を入力する。

/Applications/Xcode.app/Contents/Applications/FileMerge.app/Contents/MacOS/FileMerge
-left $LOCAL -right $REMOTE

MS Office Home & Business 2019 で必要なアプリだけをインストールする

信じられない事ですが、どうやら Microsoft Office 2019 では、必要なアプリのみを選択してインストールするということができないらしい・・。以前のバージョンであれば、インストールする時に選択できたのですが・・。

一応、不可能ということではなく、Office Deployment Tool という企業向けのツールを使って、XML に設定を書く事でインストールするアプリケーションを選択することが可能です。

今回は Microsoft Office Home & Business 2019 を Outlook と OneNote を除いてインストールしました。

実行環境

OS
Microsoft Windows [Version 10.0.19042.630] 64bit

Office Deployment Tool の準備

Office Deployment Tool をダウンロードして実行します。どこにファイルを解凍するのかを選択します。

解凍先のフォルダを開いて、”configuration-Office365-x64.xml” をエディタで開き、以下の内容に置き換えます。

<Configuration>
  <Add OfficeClientEdition="64" Channel="Monthly">
    <Product ID="HomeBusiness2019Retail">
      <Language ID="en-us" />
      <!-- <Language ID="ja-jp" /> -->
      <ExcludeApp ID="Access" />
      <!-- <ExcludeApp ID="Excel" /> -->
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="Lync" />
      <ExcludeApp ID="OneDrive" />
      <ExcludeApp ID="OneNote" />
      <ExcludeApp ID="Outlook" />
      <!-- <ExcludeApp ID="PowerPoint" /> -->
      <ExcludeApp ID="Publisher" />
      <ExcludeApp ID="Teams" />
      <!-- <ExcludeApp ID="Word" />	 -->
    </Product>
  </Add>
</Configuration>

<Product ID=”HomeBusiness2019Retail“> の部分は、所持しているライセンスに対応する ID を指定しないとアクティベートできなくなります。 このページで指定可能な ID の一覧が見られます。

<ExcludeApp ID=”Outlook” /> で Outlook を除外しています。Excel、Power Point、Word のみがインストールされるように設定しました。

その他のオプションもあります。

Office をインストール

PowerShell を開き、Office Deployment Tool を解凍したフォルダへ移動します。

以下のコマンドで設定ファイルを指定して Office をインストールします。

.\setup.exe /configure .\configuration-Office365-x64.xml

後はインストールが終わるのを待つだけです。ちなみに、インストール中にインストールしているアプリケーションが表示されています。

Office Deployment Tool を使ってインストールした場合
標準のインストーラーでインストールした場合

すでにインストールしたアプリケーション

すでに不要なアプリケーションをインストールしてしまった場合は、上記の方法で再インストールすれば、不要なアプリケーションは自動的にアンインストールされます。Office を一度丸ごとアンインストールする必要はありません。

参考

CapsLock キーを Ctrl キーに変更する

CapsLock キーが邪魔すぎるので CapsLock キーを Ctrl キーに変更して、ダブル Ctrl キー状態にしてしまいます。

実行環境

OS
Microsoft Windows [Version 10.0.19042.610] 64bit

レジストリの変更

以下の内容をテキストファイルに保存して、拡張子を .reg に変更して実行します。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

OpenWrt にユーザーが SSH でログインした時にメールで通知する

予期していない SSH ログインを検知するために、 SSH でユーザーがログインした時にメールで通知を行うようにしました。

実行環境

ルーター
Linksys WRT1900ACS
OS
OpenWrt 19.07.3
パッケージ バージョン
msmtp 1.8.7-2

msmtp をインストール

ルーターからメールを送信するために SMPT クライアントをインストールします。

Postfix のような完全な MTA をインストールすることもできますが、ソフトウェアのサイズが大きい、定期的なディスクアクセスが発生する等の OpenWrt で使うには不向きな点があります。このため、SMPT クライアントから外部のメールサーバーを経由してメールを送信します。

以下のコマンドで msmtp をインストールします。

# opkg update
# opkg install msmtp

ファイル /etc/msmtprc を編集して以下の行を追加、変更します。パスワードを平文で設定ファイルに書くことになるので、 msmtp のために新しく送信専用のフリーメールアドレスを取得しました。

host           smtp.gmail.com
port           587
from           username@gmail.com
auth           on
user           username
password       PASSWORD

gmail を使う場合は以下のような設定ファイルになります。PASSWORD は記号を含まない英数字が無難です。

# Example for a system wide configuration file

# A system wide configuration file is optional.
# If it exists, it usually defines a default account.
# This allows msmtp to be used like /usr/sbin/sendmail.
account default

# The SMTP smarthost
host smtp.gmail.com

# Use TLS on port 465
port 587
tls on
tls_starttls off

# Construct envelope-from addresses of the form "user@oursite.example"
from username@gmail.com

auth on
user username
password PASSWORD

# Syslog logging with facility LOG_MAIL instead of the default LOG_USER
syslog LOG_MAIL

一般ユーザーでもメールが送信できるようにするために設定ファイルのパーミッションを変更します。

# chmod 644 /etc/msmtprc

msmtp は sendmail コマンドと互換性があるので、シンボリックリンクを設置して sendmail コマンドとしても使えるようにします。

# ln -s /usr/bin/msmtp /usr/sbin/sendmail

以下のコマンドでメール送信のテストをします。”Sender’s Name <username@gmail.com>” と recipient@gmail.com で送信元と受信先を指定します。

# echo -e "Subject: Test mail\n\nThis is a test mail." | sendmail -f "Sender's Name <username@gmail.com>" recipient@gmail.com

メール送信スクリプトを設置

メール送信を行うスクリプト notify-login.sh を以下の内容で作成します。HOST_NAME、RECIPIENT、SENDER を変更して下さい。

#!/bin/sh

HOST_NAME="hogepiyo.com"
RECIPIENT="recipient@gmail.com"
SENDER="OpenWrt <username@gmail.com>"

SOURCE_IP=`echo $SSH_CONNECTION | cut -d " " -f 1`

MESSAGE="To: $RECIPIENT
Subject: '$USER' has logged in '$HOST_NAME'
From: $SENDER

'$USER' has logged in successfully from '$SOURCE_IP' on $HOST_NAME.
Login Time: `date +\"%Y-%m-%d %T %Z\"`

`env`
"

echo "$MESSAGE" | sendmail -t &

パーミッションを変更して実行可能にします。

# chmod 755 ./notify-login.sh

作成したスクリプトを実行してメールが送信されることを確認します。

# ./notify-login.sh

/etc/profile ファイルに以下の行を追加して、ログイン時にメールが送信されるようにします。

/path/to/script/notify-login.sh

テスト

SSH で再ログインしてメールが送信されることを確認します。

注意

SSH のポートフォワーディングのみを利用する接続ではメールが送信されません。

参考

OpenWrt 19.07 で Extroot を使ってディスク容量を拡張する

OpenWrt に必要なパッケージをインストールしているとディスク容量が不足してきたので、Extroot 機能を使ってディスク容量を拡張しました。もともとルーターは利用できるスペースが少ないので、サーバーをインストールする予定であれば早めに Extroot を適用しておくとよいと思います。

パッケージや設定ファイルが置かれているドライブ /overlay を USB メモリーにコピーして、以後 USB メモリーを /overlay としてマウントして使用します。

実行環境

ルーター
Linksys WRT1900ACS
OS
OpenWrt 19.07.3

USB メモリーをストレージとして追加

パッケージをインストール

必要なパッケージをインストールします。root で作業します。

# opkg update
# opkg install kmod-usb-storage kmod-usb-storage-uas usbutils block-mount

USB メモリーを接続し以下のコマンドでデバイスが認識されていることを確認します。

# lsusb -t
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=orion-ehci/1p, 480M

“Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M” が接続された USB メモリーを示しています。

以下のコマンドで USB メモリーが /dev/sd* として接続されていることを確認します。

# ls -l /dev/sd*
brw-------    1 root     root        8,   0 Jun 20 16:37 /dev/sda
brw-------    1 root     root        8,   1 Jun 20 16:37 /dev/sda1

さらに block コマンドで詳細な情報を確認します。

# block info | grep "/dev/sd"
/dev/sda1: UUID="34E8-19B0" LABEL="USB128GB" VERSION="FAT32" TYPE="vfat"

USB メモリーをフォーマット

USB メモリーを OpenWrt で使用するのに適したファイルシステムでフォーマットします。

ドライブの種類によって異なるパッケージをインストールし、適したファイルシステムでフォーマットします。

USB メモリーや SSD 等のフラッシュドライブの場合 (F2FS)

# opkg install f2fs-tools kmod-fs-f2fs
# mkfs.f2fs /dev/sda1

ハードドライブの場合 (EXT4)

# opkg install e2fsprogs kmod-fs-ext4
# mkfs.ext4 /dev/sda1

マウント設定を変更

現在の /overlay を別の場所 (/rwm) にマウントするように設定を変更します。以後、古いデータを参照したい場合に利用します。

# uci -q delete fstab.rwm
uci set fstab.rwm="mount"
uci set fstab.rwm.device="`sed -n -e "/\s\/overlay\s.*$/s///p" /etc/mtab`"
uci set fstab.rwm.target="/rwm"
uci set fstab.rwm.enabled=1
uci commit fstab

USB メモリーを /overlay としてマウントします。

# DEVICE="/dev/sda1"
eval `block info "${DEVICE}" | grep -o -e "UUID=\S*"`
uci -q delete fstab.overlay
uci set fstab.overlay="mount"
uci set fstab.overlay.uuid="${UUID}"
uci set fstab.overlay.target="/overlay"
uci set fstab.overlay.enabled=1
uci commit fstab

(任意) マウント時にファイルシステムのチェックを行う場合は以下のコマンドを実行します。

# uci set fstab.@global[0].check_fs='1'
uci commit fstab

以下のコマンドで fstab サービスを有効化します。

# service fstab boot

データを USB メモリーにコピー

すでにインストールされているパッケージ等のデータを Extroot で使用する USB メモリーにコピーします。新しい fstab の設定をコピーするため最後に行います。

USB メモリーをマウントしデータをコピーします。

# mount /dev/sda1 /mnt/sda1
# cp -a -f /overlay/. /mnt/sda1
# umount /mnt/sda1

再起動

ルーターを再起動します。

# reboot

テスト

df コマンドでマウントされているドライブと容量を確認します。

# df

/overlay の容量が USB メモリーの容量になっているのが確認できます。

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                 2560      2560         0 100% /rom
tmpfs                   255976       120    255856   0% /tmp
/dev/sda1            121304064    533672 119353176   0% /overlay
overlayfs:/overlay   121304064    533672 119353176   0% /
ubi1:syscfg              30276       312     28380   1% /tmp/syscfg
tmpfs                      512         0       512   0% /dev
/dev/ubi0_1              24312     19696      3340  86% /rwm

参考

OpenWrt 19.07 と Gitolite で Git サーバーを構築

OpwnWrt をインストールしたルータで Git サーバーを構築しました。低消費電力でプライベートな Git サーバーです。

実行環境

ルーター
Linksys WRT1900ACS
OS
OpenWrt 19.07.3

マルチユーザー環境はすでに構築済みであることが前提です。また、Extroot を使ってディスク容量を拡張済み でありディスクの空き容量も数GB以上あることを前提にしています。

パッケージ バージョン
gitolite 3.6.11-2

Gitolite をインストール

OpenWrt の gitolite パッケージは /srv/git/ にリポジトリを保存することを想定しています。

Gitolite をインストールします。

# opkg update
# opkg install gitolite openssh-keygen

リポジトリ用のディレクトリを作成します。

# mkdir -p /srv/git/.ssh
# touch /srv/git/.ssh/authorized_keys
# chmod 700 /srv/git/.ssh
# chmod 600 /srv/git/.ssh/authorized_keys

git リポジトリ用のディレクトリのオーナーを変更します。git ユーザーと git グループは Gitolite のインストール時に作成されています。

# chown -R git:git /srv/git/

(ローカルPCで作業) Gitolite 管理用ユーザー git 用の鍵を作成します。Linux か mac の場合は以下のコマンドで作成できます。作成後に公開鍵を表示してコピーします。

$ ssh-keygen -t rsa -b 4096 -C "Gitolite-admin" -f ./gitolite_key_admin.key
$ cat ./gitolite_key_admin.key.pub

(注意) 鍵のコメントにスペースが入っていると、後のセットアップでエラーが出ます。スペースはハイフン等で置き換えてください。

FATAL: algorithm mismatch: AAAAB3Nz... vs. +^ at /usr/libexec/gitolite/lib/Gitolite/Common.pm line 409.

(OpenWrt で作業) 先ほどコピーした公開鍵を OpenWrt の /srv/git/admin.pub にペーストします。

# vi /srv/git/admin.pub

git ユーザーに切り替えて Gitolite の初期設定を行います。

# su - git
$ gitolite setup -pk ~/admin.pub

admin.pub はすでに管理用リポジトリにコピーされていて不要なので削除します。

$ rm ~/admin.pub

Gitolite の管理用リポジトリをクローン

(ローカルPCで作業) Gitolite の管理用リポジトリ gitolite-admin をクローンします。以下のアドレスをクローンします。鍵は先ほど作成した gitolite_key_admin.key を使用します。Linux の git でも Windows の Sourcetree でもクローンできました。

ssh://git@<ADDRESS>:<PORT>/gitolite-admin
ssh://git@hogepiyo.com:2020/gitolite-admin

以後はこの gitolite-admin リポジトリを操作して Gitolite を設定していきます。

新しいユーザーを追加

(ローカルPCで作業) 管理ユーザーではない一般ユーザーを追加します。一般ユーザー用の鍵を新たに作成し、公開鍵を <Username>.pub のファイル名で gitolite-admin/keydir/ に保存します。

.../gitolite-admin/keydir/john.pub

新しいリポジトリを追加

(ローカルPCで作業) リポジトリの管理は gitolite-admin\conf\gitolite.conf を編集して行います。

テストとして hello-world リポジトリを追加します。

repo gitolite-admin
    RW+     =   admin

repo testing
    RW+     =   @all

repo hello-world
    RW+     =   @all

変更をコミット

(ローカルPCで作業) 変更を反映するには gitolite-admin リポジトリにコミットしてプッシュします。

hello-world リポジトリをテスト

(ローカルPCで作業) ssh://git@<ADDRESS>:<PORT>/hello-world を新しく作成した一般ユーザーでクローンできるかテストします。

参考

OpenWrt 19.07 でマルチユーザー環境を構築

実行環境

ルーター
Linksys WRT1900ACS
OS
OpenWrt 19.07.3

一般ユーザーを追加

初期状態では root ユーザーのみで一般ユーザーが存在しないので一般ユーザーを追加します。 useradd コマンドも使用できないので opkg でインストールします。

# opkg update
# opkg install shadow-useradd

useradd コマンドで一般ユーザーを追加します。シェルは busybox ビルトインの ash を指定します。同時に追加するユーザー名と同名のグループを作成してメンバーにします。

# useradd -m -d /home/<USERNAME> -s /bin/ash -U <USERNAME>
-m
ホームディレクトリを作成
-d
ホームディレクトリのパスを指定
-s
シェルを指定
-U
ユーザー名と同じ名前のグループを作成して新しいユーザーをメンバーにする

一般ユーザーにパスワードを設定します。

# passwd <USERNAME>

一般ユーザーに sudo 権限を付与

sudo コマンドもインストールされていないのでまずはインストールします。

# opkg install sudo

visudo コマンドで /etc/sudoers を編集し、sudo の設定をします。

# visudo

sudo グループユーザーが sudo コマンドを利用できるようにするため、以下の行のコメントを解除して有効化します。

%sudo ALL=(ALL) ALL

グループを編集するために groupadd と usermod コマンドをインストールします。

# opkg install shadow-groupadd shadow-usermod

sudo システムグループを作成します。

# groupadd --system sudo

一般ユーザーを sudo グループに追加します。

# usermod -a -G sudo <USERNAME>
-a
ユーザーのサブグループを追加する。-G オプションと併用
-G
サブグループのリストを指定する。複数指定時はカンマで区切る

su コマンドをインストール

su コマンドも使えないのでインストールしておきます。

# opkg install shadow-su

一般ユーザーに SSH アクセスを許可

一般ユーザーのホームディレクトリに公開鍵を保存して、SSHでアクセスできるようにします。

# su - <USERNAME>
$ mkdir ~/.ssh/
$ chmod 700 ~/.ssh

(ローカル PC で作業) OpenWrt ではなくローカルの PC で公開鍵を作成するか、すでにある鍵を利用します。Linux か mac の場合は以下のコマンドで作成できます。

$ ssh-keygen -t rsa -b 4096 -C "<COMMENT OF THIS KEY>" -f ./ssh_key
$ cat ./ssh_key.pub

(OpenWrt で作業) ~/.ssh/authorized_keys に公開鍵をペーストします。

$ vi ~/.ssh/authorized_keys

authorized_keys ファイルのパーミッションを変更します。

$ chmod 600 ~/.ssh/authorized_keys

参考

KVM 上の Ubuntu 18.04 LTS サーバーに KVM で仮想化環境を構築 (Nested KVM)

KVM で動いている Ubuntu 18.04 の上でさらに KVM を動かして仮想化してみました。

結論から言うと KVM 上で KVM を入れ子にして動作させることはできますが、ものすごくパフォーマンスが悪くなります。

実行環境

サーバー
Network Presence – VALUE SSD VPS #2E
CPU
2コア
メモリー
8GB
ホストOS
Ubuntu Server 18.04.4 LTS
ゲストOS
Ubuntu Server 18.04.4 LTS
パッケージ バージョン
qemu 1:2.11+dfsg-1ubuntu7.26
qemu-kvm 1:2.11+dfsg-1ubuntu7.26
libvirt-bin 4.0.0-1ubuntu8.17
bridge-utils 1.5-15ubuntu1
virt-manager 1:1.5.1-0ubuntu1.2

なんでそんなことするの?

KVM で動いている VPS を借りているのですが、その VPS 上で仮想マシンを動かしたいということです。

実験的に入れるソフトウェアを実験後にきれいに消したり、バックアップやリストアも楽になるので仮想マシンが欲しいのです。

VPS 上で KVM を使うには前提条件としてホストの KVM で入れ子 (Nested) KVM が許可されている必要があります。

入れ子の KVM が利用可能かを調べる

以下のコマンドを実行して 0 より大きい数値が返れば OK です。

$ egrep -c '(vmx|svm)' /proc/cpuinfo

利用可能の場合

$ egrep -c '(vmx|svm)' /proc/cpuinfo
2

例えば、お名前.com の VPS は入れ子の KVM は使えないので0が表示されます。

$ egrep -c '(vmx|svm)' /proc/cpuinfo
0

kvm-ok ユーティリティで KVM のハードウェア高速化がサポートされているかを確認します。まずは、 cpu-checker をインストールします。

$ sudo apt update
$ sudo apt install cpu-checker

sudo kvm-ok で以下の表示が出れば OK です。

$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

サポートされていない場合は以下の表示になります。

$ sudo kvm-ok
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used

必要なパッケージをインストール

apt で KVM 構築に必要なパッケージをインストールします。

$ sudo apt update
$ sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager

必要なパッケージをインストール

apt でパッケージをインストール。大量の依存パッケージもインストールされます (自分の環境では100個以上)。

ネットワークブリッジの作成

KVM のゲストマシンに外部からアクセスするためにはネットワークをブリッジする必要があります。/etc/netplan/ にある netplan の設定ファイルを変更して、インターネットに接続されているインターフェースの IP アドレスをブリッジに割り当てます。

変更前

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses: [100.200.254.127/24]
      gateway4: 100.200.254.254
      nameservers:
        addresses: [100.200.1.1,100.200.1.2,1.1.1.1,8.8.8.8]

変更後

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no

  bridges:
    br0:
      interfaces: [eth0]
      dhcp4: no
      addresses: [100.200.254.127/24]
      gateway4: 100.200.254.254
      nameservers:
        addresses: [100.200.1.1,100.200.1.2,1.1.1.1,8.8.8.8]

設定ファイルの内容を適用します。

$ sudo netplan apply

ネットワークの設定で問題が起きた場合は、以下のコマンドでデバッグ情報を表示できます。

$ sudo netplan --debug  apply

ネットワークブリッジの状態を確認します。State が routable になっていれば OK です。

$ sudo networkctl status -a
● 3: br0
       Link File: n/a
    Network File: /run/systemd/network/10-netplan-br0.network
            Type: ether
           State: routable (configured)
      HW Address: 00:00:00:00:00:00
         Address: 100.200.254.127
                  ffff::ffff
         Gateway: 100.200.254.254
             DNS: 100.200.1.1
                  100.200.1.2
                  1.1.1.1
                  8.8.8.8

Windows 10 から Cygwin を使って qemu+ssh で virt-manager にアクセス (失敗)

Windows に Cygwin をインストールして virt-manager にアクセスしようとしましたが失敗しました。どうやら Cygwin の virt-manager が古すぎて正常にインターフェースを描画できないようです。

接続手順

Cygwin に以下のパッケージをインストールします。

  • virt-manager
  • xorg-server
  • xinit
  • openssh
  • gnome-ssh-askpass

以下のスクリプトを Cygwin の .bashrc に追加します。

if [[ -z "$DISPLAY" ]] 
then
    DISPLAY=":0" 
    export DISPLAY 
fi

以下のコマンドで接続します。

$ startxwin -- -listen tcp &
$ virt-manager -c 'qemu+ssh://username@hogepiyo.com:22/system?keyfile=~/.ssh/ssh_key'

問題点

  • インターフェースで表示されない選択肢がある
  • 仮想マシンを作成して起動できるが画面が真っ暗

Ubuntu 18.04 から qemu+ssh で virt-manager にアクセス

接続手順

クライアントの Ubuntu に必要なパッケージをインストールします。

$ sudo apt install virt-manager ssh-askpass-gnome

以下のコマンドで接続します。

$ virt-manager -c 'qemu+ssh://username@hogepiyo.com:22/system?keyfile=~/.ssh/ssh_key'

秘密鍵のパスワードを聞かれるので入力します。

開いた画面から仮想マシンの作成と管理が行えます。

問題点

  • 仮想マシンを作成して起動できるが画面が真っ暗

起動中の仮想マシンに Spice でリモートアクセス

qemu+ssh で virt-manager にアクセスすれば仮想マシンの管理は行えるので、起動後は仮想マシンを spice プロトコルで操作することにしました。

仮想マシンに接続できるポートを外部に公開したくないので SSH のポートフォワーディング機能を使います。仮想マシンの画面描画用のポート (デフォルトで5900) をクライアント側へフォワードします。

画面描画用のポートは virt-manager で確認できます。

Virtual Machine Manager で対象の仮想マシンをダブルクリックします。

メニューから ViewDetails を開きます。

Display SpicePort を確認します。

以下のコマンドでサーバーのポートをローカルにフォワードします。

$ ssh -p 22 -i ~/.ssh/ssh_key -L 5900:127.0.0.1:5900 username@hogepiyo.com -N
-p
SSH ポートの指定 (22の場合は省略可能)
-i
秘密鍵のパス
-L
ポートフォワード設定 (5900 がローカル側 127.0.0.1:5900 がサーバー側)
-N
接続後コマンドを実行せずに待機

クライアントの Ubuntu のアプリケーションメニューから Remote Viewer を開きます。

接続先に “spice://localhost:5900” を指定して接続します。

接続後は仮想マシンを操作できます。

接続方法のまとめ

GUI を使用して管理したい場合は以下の方法で管理します。

  • 仮想マシン管理: クライアント Ubuntu からサーバーの virt-manager に qemu+ssh で接続
  • 仮想マシン操作: クライアント Ubuntu からサーバーで起動中の仮想マシンに SSH ポートフォワード経由で spice で接続

海外のフォーラムで推奨されていたのは以下の方法でした。

  • 仮想マシン管理: サーバーに SSH でアクセスし virsh コマンドを使用する
  • 仮想マシン操作: クライアント Ubuntu からサーバーで起動中の仮想マシンに SSH ポートフォワード経由で spice で接続

参考

AMP でマインクラフト (Java) のサーバーを構築 (Ubuntu 18.04 LTS)

マインクラフトサーバー管理ソフトの McMyAdmin 2 を試してみたところ便利だったので、McMyAdmin 2 の後継である AMP (Application Management Panel) のライセンスを購入してインストールすることにしました。£7.50 GBP で5つのゲームサーバーを管理できます。(2020年5月7日現在)

McMyAdmin 3 は AMP の機能の一部として提供されています。AMP は以下を含む多数のゲームをサポートしていて、ゲームサーバを公開するのに便利です。

  • 7 Days to Die
  • ARK: Survival Evolved
  • ARMA III
  • Counter-Strike 1.6
  • Counter-Strike Source
  • Counter-Strike Global Offensive
  • Factorio
  • Garry’s Mod
  • Insurgency (2014)
  • Left 4 Dead (2)
  • Minecraft Bedrock/Java/Pocket Edition
  • Rust
  • Space Engineers
  • StarBound
  • Team Fortress 2
  • The Forest

実行環境

サーバー
Network Presence – VALUE SSD VPS #2E
CPU
2コア
メモリー
8GB
OS
Ubuntu Server 18.04.4 LTS
パッケージ バージョン
ampinstmgr 1.9.9.6

AMP をインストール

自動スクリプトでインストール

手っ取り早くインストールする場合は以下のコマンドを実行して、質問に答えていくだけです。

$ sudo su -c "bash <(wget -qO- getamp.sh)"

マニュアルでインストール

AMP 用の実行ユーザーを作成

AMP 用の実行ユーザーを作成します。

$ sudo useradd -r -m -d /home/amp -s /bin/bash -U amp
-r
システムアカウントを作成
-m
ホームディレクトリを作成
-d
ホームディレクトリのパスを指定
-s
シェルを指定
-U
ユーザー名と同じ名前のグループを作成して新しいユーザーをメンバーにする

CubeCoders のリポジトリを追加

リポジトリのツールをインストールします。

$ sudo apt install software-properties-common dirmngr apt-transport-https

リポジトリ用のキーとリポジトリURLを追加して、リストをアップデートします。

$ sudo apt-key adv --fetch-keys http://repo.cubecoders.com/archive.key
$ sudo apt-add-repository "deb http://repo.cubecoders.com/ debian/"
$ sudo apt update

ファイアウォールの設定

AMP の管理用に 8080、マインクラフト用に 25565 を開放します。別のポートでも可能です。

$ sudo ufw allow 8080/tcp
$ sudo ufw allow 25565

AMP のインスタンスマネージャーをインストール

$ sudo apt install ampinstmgr

AMP のサービスを自動起動するために ampinstmgr.service を有効化します。

$ sudo systemctl enable ampinstmgr.service

JRE をインストール

マイクラの実行に必要な Java 実行環境をインストールします。

$ sudo apt install openjdk-8-jre-headless

(任意) srcds が使用するパッケージをインストール

srcds を必要とするゲームのサーバーを公開する予定なら、以下もインストールします。

$ sudo apt install lib32gcc1 lib32stdc++6 lib32tinfo5

ADS を起動

ゲームサーバーのインスタンスを管理する ADS (Application Deployment Service) を起動します。

USERNAME と PASSWORD は任意の文字列に置き換えてください。

$ sudo su - amp
amp$ ampinstmgr quickstart USERNAME PASSWORD
[Info] Instance created successfully!
[Info] Starting Instance: 'ADS01'
[Info] Waiting for AMP instance to start...
[Notice] AMP instance ADS01 is now running.
[Info] Instance started in new session. Run 'ampinstmgr View ADS01' to view this instances live output.
[Info] ## Please browse to the instance to complete first-time setup. ##
[Info] Please visit http://127.0.0.1:8080 to continue setup.
[Info] Waiting for user to complete first-time setup in browser...

サーバーの 8080 ポートをブラウザで開くと AMP の管理画面が表示されます。指定した USERNAME と PASSWORD でログインします。(例 http://localhost:8080)

(任意) ADS を8080以外のポートで運用

8080 ポート以外で運用したい場合は Ctrl+C で一度処理を中止します。

ADS インスタンスを停止します。

amp$ ampinstmgr --StopInstance ADS01

ADS の IP とポートを再設定します。IP_ADDRESS PORT を実際の値に置き換えてください。

ADS のポートを変更すると既存のゲームインスタンスにアクセスできなくなる旨を伝える警告が出ますが、まだゲームインスタンスは無いので問題ありません。大文字の Y で了承します。

amp$ ampinstmgr --RebindInstance ADS01 IP_ADDRESS PORT

設定の変更を確認するには –ShowInstancesTable オプションを使います。

 amp$ ampinstmgr --ShowInstancesTable

ポートの設定変更を確認したら ADS インスタンスを再起動します。

amp$ ampinstmgr --StartInstance ADS01

これで8080以外の任意のポートで AMP のコンソール画面を運用できます。

初回セットアップ

初めて AMP コンソールにログインすると初回セットアップのウィザードが表示されます。

まず AMP コンソールにログインします。ユーザー名とパスワードは “ampinstmgr quickstart USERNAME PASSWORD” の実行時に指定したものです。

実行モードとして “Standalone (Default)” を選択します。

ライセンス購入後にメールで送られたライセンスキーを入力します。

ライセンスキーの認証後に AMP (ADS) は再起動します。

再起動後にブラウザから AMP コンソールが開けない場合

いつまでたってもブラウザから AMP コンソールに接続できない場合はコマンドで ADS インスタンスを再起動する。

amp$ ampinstmgr --StartInstance ADS01

マインクラフトサーバーのインスタンス作成

AMP コンソールに接続したら、後は GUI でマイクラのサーバーを構築していきます。

AMP コンソールにログインし、”Create Instance” をクリックします。

“Minecraft Java Edition”“Do Nothing” を選択します。”Bedrock” と “Pocket/Windows 10” も選べますが試してません。ポートを変更しない場合は “Start Instance” でも良いです。

(任意) マイクラのサーバーのポートを変更する場合は “Edit Ports” をクリックします。“Port Number” を変更します。

“Start Instance” をクリックしてマイクラサーバーの管理インスタンスを起動します。

“Manage” をクリックしてマイクラサーバーの管理インスタンスを開きます。

“Configuration” メニューから各種設定が変更できるので用途に合わせて変更します。

”Configuration” → “Java” を開いて “Memory Limit (MB)” フィールドを変更して使用メモリ量を変更します。可能であれば 4096 MB 程度は割り当てたほうが良いです。

サーバーのプライベート化

デフォルトではサーバーはすべてのユーザーに対して公開されています。友人だけに公開する場合はホワイトリストを使ってプライベート化する必要があります。

”Configuration” → “Game” を開いて “Use Whitelist” のトグルを On にします。

“Status” をクリックして元の画面に戻り、“Start” をクリックしてマイクラサーバーを起動します。

初めてのマイクラサーバー起動時にソフトウェアの利用許諾条件を承認するかの問い合わせがあるので、確認後 “Accept” をクリックします。右下のプログレスバーが消えたら、もう一度 “Start” をクリックします。起動には2-3分かかるのでしばらく待ちます。

起動したら “Console” をクリックしてコンソールを開き以下のコマンドでホワイトリストを設定します。マイクラのプレイヤー名をホワイトリストに追加します。

whitelist add John
John をホワイトリストに追加
whitelist remove John
John をホワイトリストから削除
whitelist list
現在のホワイトリストを表示

AMP のアップデート

インスタンスマネージャのアップデート

apt コマンドでアップデートします。

$ sudo apt update
$ sudo apt upgrade

インスタンスのアップデート

インスタンスマネージャのコマンドでアップデートします。

$ sudo su - amp
amp$ ampinstmgr --UpgradeAll

参考

ネットワーク管理コマンドを ifupdown から netplan へ変更する (Ubuntu 18.04 LTS)

Ubuntu 18.04 では基本的に最初から netplan が標準で使われているようですが、利用している VPS が古い ifupdown を使用していたので netplan に変更しました。

通常 /etc/netplan/ には設定ファイルがあるようですが、利用している環境ではファイルは何も保存さていませんでした。

注意: 設定変更前に SSH 以外のアクセス方法を確保しておきます。ネットワークの設定変更で SSH が利用できなくなる場合があります。

設定ファイルのパス

  • ifupdown: /etc/network/interfaces
  • netplan: /etc/netplan/*.yaml

netplan 用の設定ファイルを作成

/etc/network/interfaces の内容を netplan の書式に直して /etc/netplan/01-netcfg.yaml として保存します。

作成した /etc/netplan/01-netcfg.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no

  bridges:
    br0:
      interfaces: [eth0]
      dhcp4: no
      addresses: [100.200.1.127/24]
      gateway4: 100.200.1.254
      nameservers:
        addresses: [100.200.254.1,100.200.254.2,1.1.1.1,8.8.8.8]

設定を反映

設定を反映させます。

$ sudo netplan apply

ネットワークのアドレスが正しく設定されているかを確認します。

$ ifconfig

ifupdown 用のサービスを無効化します。

$ sudo systemctl disable networking.service

netplan 用のサービスを有効化します。

$ sudo systemctl enable systemd-networkd

再起動時の問題

設定をコマンドで反映させた場合は問題なくネットワークが使用できましたが、再起動するとネットワークに接続できない問題が発生しました。

解決方法

/etc/network/interfaces の行をすべてコメントアウトしました。(削除しても大丈夫かも?)

参考