OpenWrt で UPnP を使用する

ポート開放に UPnP を使用しないといけない状況になったので、OpenWrt のルーターに miniupnpd をインストールして、特定の IP にのみ UPnP の利用を許可するようにしました。

実行環境

ルーター
Linksys WRT1900ACS
ファームウェア
OpenWrt 22.03.0
パッケージ バージョン
miniupnpd-nftables 2022-08-31-68c8ec50-1

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

  1. ルーターの Web コンソールへアクセス
  2. メニューの System -> Software をクリック
  3. “Update lists…” をクリック
  4. Filter に “miniupnpd” と入力
  5. リストから “miniupnpd-nftables” をインストール

設定を編集

以下がインストール時に作成される設定ファイルです。/etc/config/upnpd

config upnpd config
        option enabled          0
        option enable_natpmp    1
        option enable_upnp      1
        option secure_mode      1
        option log_output       0
        option download         1024
        option upload           512
#by default, looked up dynamically from ubus
#       option external_iface   wan
        option internal_iface   lan
        option port             5000
        option upnp_lease_file  /var/run/miniupnpd.leases
        option igdv1            1

config perm_rule
        option action           allow
        option ext_ports        1024-65535
        option int_addr         0.0.0.0/0       # Does not override secure_mode
        option int_ports        1024-65535
        option comment          "Allow high ports"

config perm_rule
        option action           deny
        option ext_ports        0-65535
        option int_addr         0.0.0.0/0
        option int_ports        0-65535
        option comment          "Default deny"

option enabled を変更して UPnP を有効にします。

config upnpd config
        option enabled          1

このままではルーターに接続されたすべてのデバイスが UPnP を使用できてしまうので、最初の perm_rule セクションを以下の様に変更します。この場合 192.168.1.101 にのみ UPnP の使用を許可しています。

config perm_rule
        option action           allow
        option ext_ports        1024-65535
        option int_addr         192.168.1.101/32
        option int_ports        1024-65535
        option comment          "Allow high ports"

設定ファイルを変更後、以下のコマンドで miniupnpd を有効化します。

/etc/init.d/miniupnpd restart
/etc/init.d/miniupnpd enable

/etc/init.d/miniupnpd restart 実行時に以下のエラーがでましたが、その後の再起動では表示されなくなりました。

Automatically including '/usr/share/nftables.d/table-post/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/chain-post/dstnat/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/chain-post/forward/20-miniupnpd.nft'
Automatically including '/usr/share/nftables.d/chain-post/srcnat/20-miniupnpd.nft'

Include '/usr/share/miniupnpd/firewall.include' failed with exit code -9

動作しているか確認

ルーターのポート 5000 にアクセスして確認します。例: http://192.168.1.1:5000/rootDesc.xml

miniupnpd が動作していれば XML ファイルを閲覧できます。

UPnPCJ という UPnP を使用してポートを開放するツールのポート開放テスト機能を使用してテストします。

UPnPCJ を使用したテスト結果

参考

マイナンバーカードを受領した日に返納してもマイナポイントはもらえるのか?

久しぶりに日本へ帰国して住民票を入れ直しマイナンバーカードの申請をしました。

住民票を入れてからマイナンバーカードの申請書が届いて実際にカードを受領するまでに7週間かかり、オーストラリアへの帰国ギリギリになってしまいました。

マイナンバーカードを受領した日にマイナポイントの受取を申請し、受領日に住民票を海外へ移すとどうなるか試してみました。

住民票を海外へ移すとマイナンバーカードは返納する必要があります。返納といってもカードに返納した旨が記録されるだけで、マイナンバーカード自体はそのまま所有者が保管することになります。

結論から言うと、受領日に返納してもマイナポイント 20,000 ポイントは受け取ることができました。

経緯

  • 1日目 10:00 – マイナンバーカード受け取り
  • 1日目 11:00 〜 12:00 – スマホでマイナポイント受取申請
  • 1日目 16:00 – 市役所で海外への転出を申請。市役所側ではまだマイナンバーカードの受取が記録されておらず未所持者として記録されていたので、今日受け取ったばかりだと伝える。転出予定日は1週間後に指定。
  • 1日目 16:45 – まだマイナカードを使用してマイナポータルへログインできる事を確認。返納手続き後すぐにカードの証明証が失効するわけではないらしい。
  • 2日目 08:45 – マイナポイント 15,000 ポイントの受け取りを確認 (健康保険証 + 公金受取口座)
  • 2日目 10:00 – PayPay チャージで 5,000 ポイント受取を確認
  • 転出予定日 + 5日目: マイナカードを使用してマイナポータルへログインできない事を確認。カードの証明証が失効しているらしい。

結論

受領日に返納してもマイナポイント 20,000 ポイントは受け取ることができます。マイナカードの利用者証明用電子証明書は転出予定日までは失効しないらしく、転出予定日までは問題なくマイナポイントとマイナポータルのアプリで使用できました。

アプリ画面

1日目 健康保険証と公金受取口座登録直後 (マイナポイントアプリ)
1日目 健康保険証と公金受取口座登録直後 (マイナポータルアプリ)
2日目 健康保険証と公金受取口座登録分のポイントを獲得 (マイナポータルアプリ)
転出予定日+5日目 電子証明書の失効 (マイナポイントアプリ)
転出予定日+5日目 電子証明書の失効 (マイナポータルアプリ)

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

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

実行環境

ルーター
Linksys WRT1900ACS
OS
OpenWrt 22.03.0
パッケージ バージョン
msmtp 1.8.19-1

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

さくらメールの場合の例は以下です。

# 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 example.sakura.ne.jp

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

auth on
user router-admin@hogepiyo.com
password myPasswordHere

# Construct envelope-from addresses of the form "user@oursite.example"
from router-admin@hogepiyo.com

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

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

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

メール送信を行うスクリプト /root/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 /root/notify-login.sh

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

# /root/notify-login.sh

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

/root/notify-login.sh

バックアップ設定

/etc/sysupgrade.conf に以下の行を追加してバックアップファイルに作成したスクリプトを含める用に設定します。

/root/

テスト

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

注意

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

参考

OpenWrt に OpenVPN サーバーをインストール

OpenWrt のルーターに OpenVPN サーバーをインストールして、ルーターのネットワークへ外部からアクセスできるようにしました。

実行環境

ルーター
Linksys WRT1900ACS
ファームウェア
OpenWrt 22.03.0
パッケージ バージョン
openvpn-openssl 2.5.5-1
openvpn-easy-rsa 3.0.8-4

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

ルーターへ SSH でアクセスし以下のコマンドを実行しパッケージをインストールします。

opkg update
opkg install openvpn-openssl openvpn-easy-rsa

パラメータを設定

以下のコマンドでパラメータを設定します。

OVPN_DIR="/etc/openvpn"
OVPN_PKI="/etc/easy-rsa/pki"
OVPN_PORT="1194"
OVPN_PROTO="udp"
OVPN_POOL="192.168.8.0 255.255.255.0"
OVPN_DNS="${OVPN_POOL%.* *}.1"
OVPN_DOMAIN="$(uci get dhcp.@dnsmasq[0].domain)"
OVPN_SERV="vpn.hogepiyo.com"

PKI と RSA キーの作成

以下のコマンドでパラメータを設定します。

export EASYRSA_PKI="${OVPN_PKI}"
export EASYRSA_REQ_CN="ovpnca"
export EASYRSA_BATCH="1"
export EASYRSA_CERT_EXPIRE="3650" # Increases the client cert expiry from the default of 825 days to match the CA expiry
export EASYRSA_KEY_SIZE="4096" # Increase key length 

以下のコマンドで PKI とサーバー用の鍵を作成します。

# Remove and re-initialize PKI directory
easyrsa init-pki
 
# Generate DH parameters
easyrsa gen-dh
 
# Create a new CA
easyrsa build-ca nopass
 
# Generate server keys and certificate
easyrsa build-server-full server nopass
openvpn --genkey tls-crypt-v2-server ${EASYRSA_PKI}/private/server.pem

以下のコマンドでクライアント用の鍵を作成します。CLIENT_NAMES にスペース区切りでクライアントキーの名前を入力します。

CLIENT_NAMES='client1 client2 client3 client4 client5'
for cn in $CLIENT_NAMES ; do
  easyrsa build-client-full "${cn}" nopass
  openvpn --tls-crypt-v2 ${EASYRSA_PKI}/private/server.pem \
    --genkey tls-crypt-v2-client "${EASYRSA_PKI}/private/${cn}.pem"
done

ファイアウォールの設定

以下のコマンドでファイアウォールの設定を行い OpenVPN への接続を許可します。

uci rename firewall.@zone[0]="lan"
uci rename firewall.@zone[1]="wan"
uci del_list firewall.lan.device="tun+"
uci add_list firewall.lan.device="tun+"
uci -q delete firewall.ovpn
uci set firewall.ovpn="rule"
uci set firewall.ovpn.name="Allow-OpenVPN"
uci set firewall.ovpn.src="wan"
uci set firewall.ovpn.dest_port="${OVPN_PORT}"
uci set firewall.ovpn.proto="${OVPN_PROTO}"
uci set firewall.ovpn.target="ACCEPT"
uci commit firewall
/etc/init.d/firewall restart

OpenVPN 設定ファイルの作成

以下のコマンドで OpenVPN のサーバー用とクライアント用の設定ファイルを作成します。

umask go=
OVPN_DH="$(cat ${OVPN_PKI}/dh.pem)"
OVPN_CA="$(openssl x509 -in ${OVPN_PKI}/ca.crt)"
ls ${OVPN_PKI}/issued \
| sed -e "s/\.\w*$//" \
| while read -r OVPN_ID
do
OVPN_TC="$(cat ${OVPN_PKI}/private/${OVPN_ID}.pem)"
OVPN_KEY="$(cat ${OVPN_PKI}/private/${OVPN_ID}.key)"
OVPN_CERT="$(openssl x509 -in ${OVPN_PKI}/issued/${OVPN_ID}.crt)"
OVPN_EKU="$(echo "${OVPN_CERT}" | openssl x509 -noout -purpose)"
case ${OVPN_EKU} in
(*"SSL server : Yes"*)
OVPN_CONF="${OVPN_DIR}/${OVPN_ID}.conf"
cat << EOF > ${OVPN_CONF} ;;
user nobody
group nogroup
dev tun
port ${OVPN_PORT}
proto ${OVPN_PROTO}
server ${OVPN_POOL}
topology subnet
client-to-client
keepalive 10 60
persist-tun
persist-key
push "dhcp-option DNS ${OVPN_DNS}"
push "dhcp-option DOMAIN ${OVPN_DOMAIN}"
push "redirect-gateway def1"
push "persist-tun"
push "persist-key"
<dh>
${OVPN_DH}
</dh>
EOF
(*"SSL client : Yes"*)
OVPN_CONF="${OVPN_DIR}/${OVPN_ID}.ovpn"
cat << EOF > ${OVPN_CONF} ;;
user nobody
group nogroup
dev tun
nobind
client
remote ${OVPN_SERV} ${OVPN_PORT} ${OVPN_PROTO}
auth-nocache
remote-cert-tls server
EOF
esac
cat << EOF >> ${OVPN_CONF}
<tls-crypt-v2>
${OVPN_TC}
</tls-crypt-v2>
<key>
${OVPN_KEY}
</key>
<cert>
${OVPN_CERT}
</cert>
<ca>
${OVPN_CA}
</ca>
EOF
done
/etc/init.d/openvpn restart
ls ${OVPN_DIR}/*.ovpn ${OVPN_DIR}/*.conf

設定ファイルをクライアントに適用

ルーターの Web コンソールへアクセスし、System -> Backup / Flash Firmware をクリックし Generate archive ボタンで全ての設定ファイルをダウンロードします。

ダウンロードした圧縮ファイルを解凍し、/etc/openvpn/ 内の *.ovpn ファイルをノートPCやスマホへコピーして接続テストを行います。

参考

OpenWrt に DDNS クライアントをインストール

OpenWrt のルーターに DDNS クライアントをインストールして、Namecheap で取得したドメインの IP アドレスをルーターの WAN IP で自動更新するようにしました。

実行環境

ルーター
Linksys WRT1900ACS
ファームウェア
OpenWrt 22.03.0
パッケージ バージョン
ddns-scripts 2.8.2-25
luci-app-ddns git-22.193.49501-e0f0502

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

  1. ルーターの Web コンソールにアクセスし、System -> Software をクリック
  2. Actions: Update lists… をクリック
  3. Filter に “ddns-scripts” を入力し、ddns-scripts と luci-app-ddns をインストール
  4. ページをリロード

パラメータを設定

  1. ルーターの Web コンソールから、Service -> Dynamic DNS をクリック
  2. “myddns_ipv4” の Edit をクリック
  3. DDNS Service provider を namecheap.com に変更し、Switch Service をクリック
  4. 以下の項目を設定し Save をクリック
    • Lookup Hostname: ホスト名を含めたドメイン (例: dyn.hogepiyo.com)
    • Domain: ドメイン (例: hogepiyo.com)
    • Username: ホスト名 (例: dyn)
    • Password: namecheap のコンソールに表示されているパスワード (例: cbd37628761928dbd37628761928dcef)
  5. Save & Apply をクリック
  6. “myddns_ipv4” の Reload をクリック

参考

OpenWrt に OpenVPN サーバーをインストール

OpenWrt のルーターに OpenVPN サーバーをインストールして、プライベート VPN サーバーを作成しました。

実行環境

ルーター
Linksys WRT1900ACS
OS
OpenWrt 21.02.1
パッケージ バージョン
openvpn-openssl 2.5.3-3
openvpn-easy-rsa 3.0.8-3

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

ルーターに SSH でアクセスしてパッケージをインストールします。

opkg update
opkg install openvpn-openssl openvpn-easy-rsa

パラメータを設定

パラメータを設定します。サーバーのアドレスを設定し、ポート番号等を標準から変更する場合はここで変更します。

OVPN_SERV="hogepiyo.com"
OVPN_DIR="/etc/openvpn"
OVPN_PKI="/etc/easy-rsa/pki"
OVPN_PORT="1194"
OVPN_PROTO="udp"
OVPN_POOL="192.168.8.0 255.255.255.0"
OVPN_DNS="${OVPN_POOL%.* *}.1"
OVPN_DOMAIN="$(uci get dhcp.@dnsmasq[0].domain)"

PKI と鍵の作成

easyrsa コマンドで PKI とサーバーとクライアントの鍵を作成します。まずパラメータを設定します。

EASYRSA_KEY_SIZE のデフォルトは2048ですが、以下のように鍵長を長くすることもできます。ただし鍵の生成に時間がかかります。

export EASYRSA_PKI="${OVPN_PKI}"
export EASYRSA_REQ_CN="ovpnca"
export EASYRSA_BATCH="1"
export EASYRSA_KEY_SIZE="4096"

PKI フォルダを初期化します。

easyrsa init-pki

DH パラメータを生成します。

easyrsa gen-dh

CA を作成します。

easyrsa build-ca nopass

サーバー用の鍵を作成します。

easyrsa build-server-full server nopass
openvpn --genkey tls-crypt-v2-server ${EASYRSA_PKI}/private/server.pem

クライアント用の鍵を作成します。2つのコマンドの “client” 部分を変更して繰り返し実行し必要な数のクライアント用の鍵を作成します。

easyrsa build-client-full client nopass
openvpn --tls-crypt-v2 ${EASYRSA_PKI}/private/server.pem --genkey tls-crypt-v2-client ${EASYRSA_PKI}/private/client.pem

ファイアフォールの設定

OpenVPN のネットワークを lan へ加え、wan から OpenVPN サーバーへのアクセスを許可します。

uci rename firewall.@zone[0]="lan"
uci rename firewall.@zone[1]="wan"
uci del_list firewall.lan.device="tun+"
uci add_list firewall.lan.device="tun+"
uci -q delete firewall.ovpn
uci set firewall.ovpn="rule"
uci set firewall.ovpn.name="Allow-OpenVPN"
uci set firewall.ovpn.src="wan"
uci set firewall.ovpn.dest_port="${OVPN_PORT}"
uci set firewall.ovpn.proto="${OVPN_PROTO}"
uci set firewall.ovpn.target="ACCEPT"
uci commit firewall
/etc/init.d/firewall restart

OpenVPN サーバーの設定とクライアント設定ファイルの作成

以下の長いコマンドを実行して、サーバー用の設定ファイルとクライアント用の設定ファイルを作成します。作成されたサーバー用の設定ファイルは *.conf として、クライアント用は *.ovpn として ${OVPN_DIR} 以下に作成されます。

umask go=
OVPN_DH="$(cat ${OVPN_PKI}/dh.pem)"
OVPN_CA="$(openssl x509 -in ${OVPN_PKI}/ca.crt)"
ls ${OVPN_PKI}/issued \
| sed -e "s/\.\w*$//" \
| while read -r OVPN_ID
do
OVPN_TC="$(cat ${OVPN_PKI}/private/${OVPN_ID}.pem)"
OVPN_KEY="$(cat ${OVPN_PKI}/private/${OVPN_ID}.key)"
OVPN_CERT="$(openssl x509 -in ${OVPN_PKI}/issued/${OVPN_ID}.crt)"
OVPN_EKU="$(echo "${OVPN_CERT}" | openssl x509 -noout -purpose)"
case ${OVPN_EKU} in
(*"SSL server : Yes"*)
OVPN_CONF="${OVPN_DIR}/${OVPN_ID}.conf"
cat << EOF > ${OVPN_CONF} ;;
user nobody
group nogroup
dev tun
port ${OVPN_PORT}
proto ${OVPN_PROTO}
server ${OVPN_POOL}
topology subnet
client-to-client
keepalive 10 60
persist-tun
persist-key
push "dhcp-option DNS ${OVPN_DNS}"
push "dhcp-option DOMAIN ${OVPN_DOMAIN}"
push "redirect-gateway def1"
push "persist-tun"
push "persist-key"
<dh>
${OVPN_DH}
</dh>
EOF
(*"SSL client : Yes"*)
OVPN_CONF="${OVPN_DIR}/${OVPN_ID}.ovpn"
cat << EOF > ${OVPN_CONF} ;;
user nobody
group nogroup
dev tun
nobind
client
remote ${OVPN_SERV} ${OVPN_PORT} ${OVPN_PROTO}
auth-nocache
remote-cert-tls server
EOF
esac
cat << EOF >> ${OVPN_CONF}
<tls-crypt-v2>
${OVPN_TC}
</tls-crypt-v2>
<key>
${OVPN_KEY}
</key>
<cert>
${OVPN_CERT}
</cert>
<ca>
${OVPN_CA}
</ca>
EOF
done

OpenVPN サーバーを再起動します。

/etc/init.d/openvpn restart

作成したクライアント用の設定ファイルを確認します。このファイルをダウンロードしてクライアント端末にインポートして接続確認を行います。

ls ${OVPN_DIR}/*.ovpn

参考

diff コマンド

コマンド概要

ファイルを比較し差異を表示する。

コマンドオプション

-q
差異があるファイルのみを表示
-r
サブディレクトリを再起的に処理
-N
存在しないファイルを空ファイルとして比較処理

コマンドサンプル

2つのディレクトリに差異がないかを確認

ファイルサーバーの引っ越しのために全てのファイルを古い NAS から新しい NAS へコピーしました。コピーした後にコピーされていないファイルがないかを確認しました。

diff -qrN /Volumes/SOURCE_DIR/ /Volumes/DEST_DIR/

参考

rsync コマンド

コマンド概要

ディレクトリの内容を丸ごとコピーする。

コマンドオプション

-a
アーカイブモード。-rlptgoD と同等。(注意: -A,-X,-U,-N,-H は含まれない)
-r
ディレクトリを再帰的に処理する
-l
シンボリックリンクをシンボリックリンクとしてコピーする
-p
パーミッションを保持する
-t
更新日時を保持する
-g
グループを保持する
-o
オーナーを保持する (root 権限で実行時のみ)
-D
–devices –specials と同等
–devices
デバイスファイルを保持する (root 権限で実行時のみ)
–specials
スペシャルファイルを保持する
-h
表示される数値に単位を付与して読みやすくする
–delete
コピー先に存在するがコピー元には存在しないファイルを削除する
–info=progress2
全コピー作業の総合的な進捗のみを出力する (バージョン 3.1.0 以降)

コマンドサンプル

ファイルサーバーの引っ越し

ファイルサーバーの引っ越しのために全てのファイルを古い NAS から新しい NAS へコピーしました。

rsync -ah --delete --info=progress2 /Volumes/SOURCE_DIR/ /Volumes/DEST_DIR

参考

7 Days to Die サーバーをインストール (Ubuntu 18.04 LTS)

サーバー
Network Presence – VALUE SSD VPS #2E
CPU
2コア + 2コア(追加) → 4コア
メモリー
8GB
OS
Ubuntu Server 18.04.4 LTS 64Bit
パッケージ バージョン
steamcmd 0~20130205-1

steamcmd をインストール

32 bit 用のリポジトリを追加

64 bit の Ubuntu を使っている場合は、steamcmd のパッケージをインストールできないので、以下のコマンドでリポジトリを追加します。

$ sudo add-apt-repository multiverse
$ sudo dpkg --add-architecture i386
$ sudo apt update

steamcmd をインストール

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

$ sudo apt install lib32gcc1 steamcmd

steamcmd を操作するユーザーを作成

以下のコマンドで steamcmd を実行するユーザーを作成します。

$ sudo useradd -r -m -U -s /bin/bash steam

7 Days to Die サーバーをインストール

以下のコマンドで steam ユーザーで steamcmd を起動します。初回の起動時にはアップデートまず開始されます。

$ sudo su - steam
$ steamcmd

しばらくすると、アップデートが終了して “Steam>” で始まる steamcmd のコンソールが開始します。 

匿名ユーザーでログインし、7 Days to Die の専用サーバー (ID:294420) をインストールします。

サーバーのバージョンを指定する場合は “-beta” オプションで指定します。a19.2 をインストールする場合は “-beta alpha19.2” を追加します。無効なバージョンを -beta オプションで指定すると最新版がインストールされます。

Steam> login anonymous
Steam> force_install_dir /home/steam/7dtd/
Steam> app_update 294420 -beta alpha19.2
Steam> quit

以下のエラーメッセージが出た場合は、ディスクの容量が不足しています。

Error! App '294420' state is 0x202 after update job.

設定ファイルを変更

サーバーを起動

以下のコマンドでサーバーを起動します。

$ cd ~/7dtd
$ ./startserver.sh  -configfile=serverconfig.xml

参考

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