ぱっそ あ ぱっそ

個人的なメモをだらだらと。無保証。記事は随時書き直しています。

dockerのログがsyslogを埋め尽くす

/var/log/syslogのファイルが想定しているものよりも大きかったので中身を確認すると、以下のようなdockerのログが5秒ごとに記録されていることを発見
Jun 25 04:40:05 ubuntu systemd[1515]: run-docker-runtime\x2drunc-moby-0fe552edf164ae2853dfc0f7dd6c5ddbf4c9883cf33b672a1d4f5a4c7a0ccd1b-runc.hYki93.mount: Succeeded.
Jun 25 04:40:05 ubuntu systemd[1]: run-docker-runtime\x2drunc-moby-0fe552edf164ae2853dfc0f7dd6c5ddbf4c9883cf33b672a1d4f5a4c7a0ccd1b-runc.hYki93.mount: Succeeded.
Jun 25 04:40:48 ubuntu systemd[1515]: run-docker-runtime\x2drunc-moby-0fe552edf164ae2853dfc0f7dd6c5ddbf4c9883cf33b672a1d4f5a4c7a0ccd1b-runc.PjaEa1.mount: Succeeded.
Jun 25 04:40:48 ubuntu systemd[1]: run-docker-runtime\x2drunc-moby-0fe552edf164ae2853dfc0f7dd6c5ddbf4c9883cf33b672a1d4f5a4c7a0ccd1b-runc.PjaEa1.mount: Succeeded.
検索すると、同様の悩みを持つ人がいるみたい。

dockerのHEALTHCHECKの機能が関係していると判断して、自身の環境を確認すると、2つのコンテナがHEALTHCHECK を行っていることを確認。

 HEALTHCHECKの機能は実際には使っていないから、機能を無効化することで対応します。稼働中のコンテナのパラメータをupdateできる方法はすぐには分からなかったので、コンテナの構築時のパラメータ追加で対応します。

sudo docker run --name samba --restart=always ....

sudo docker run --name samba --no-healthcheck --restart=always ...

に変更することでHEALTHCHECK機能の無効化。ログが出ないことを確認しました。

stackoverflow.com

Ubuntu20.04にてmultipathdのエラー

自宅サーバ(ESXi 5.5)で使っていたubuntuを18.04 LTSから20.04 LTSに更新したら、/var/log/syslogに大量のログが発生。以下のようなログが数分おきに記録されていた。
2392  Jun 23 00:46:32 ubuntu multipathd[688]: sda: add missing path
2393  Jun 23 00:46:32 ubuntu multipathd[688]: sda: failed to get udev uid: Invalid argument
2394  Jun 23 00:46:32 ubuntu multipathd[688]: sda: failed to get sysfs uid: Invalid argument
2395  Jun 23 00:46:32 ubuntu multipathd[688]: sda: failed to get sgio uid: No such file or directory

 

検索して調べたところ、ESXiの設定の問題とのこと。

一旦仮想マシンを終了して、[仮想マシンの設定の編集]-[オプション]タブ-[全般]を選択すると「構成オプション]ボタンが押せるはずなので、追加パラメータで

disk.EnableUUID = "TRUE"

 を登録すればOK。設定後はsyslogに保存されなくなりました。

 

wireguardでlinuxサーバとandroidスマホとでvpn接続

目標

WireGuardを使って、Androidスマホを自宅ネットワークにVPN接続します。

WireGuardとは

LinuxカーネルLinux 5.6」からカーネルレベルでサポートされたVPN実装(とはいっても今回のlinuxカーネルは5.4)
モダンなつくりで、高速でセキュアがウリとのこと。なにがモダンかはともかく、OpenVPNより高速とのことです。

機器の構成

自宅ネットワーク側のlinuxサーバにAndroidスマホが接続する構成となります。接続している間はAndroidスマホからの通信はすべてWireGuardのVPN経由となります。

自宅ネットワーク側

alpine linux(VIRTUAL) Version 3.11.6 (Released Apr 23, 2020)

# cat /proc/version
Linux version 5.4.34-0-virt (buildozer@build-3-11-x86_64) (gcc version 9.2.0 (Alpine 9.2.0)) #1-Alpine SMP Wed, 22 Apr 2020 19:26:07 UTC

Androidスマホ

HUAWEI P20 lite(Android 9.0 Pie)

自宅ネットワーク側の作業

基本的にはすべてrootで行います。sudo使えるならもちろんそれでも問題ありません。
また、自宅ルータにてポートマッピングの設定はもちろん必要。ISPによって違ったりなので割愛します。

communityレポジトリの有効化

必要なパッケージ(wireguard-tools)が標準設定ではレポジトリに入っていないため、レポジトリリストを修正します。/etc/apk/repositoriesを編集します。

#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.11/main
#http://dl-cdn.alpinelinux.org/alpine/v3.11/community
#http://dl-cdn.alpinelinux.org/alpine/edge/main
#http://dl-cdn.alpinelinux.org/alpine/edge/community
#http://dl-cdn.alpinelinux.org/alpine/edge/testing

communityレポジトリの情報が記載されている3行目の#を削除して有効化します。

#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.11/main
http://dl-cdn.alpinelinux.org/alpine/v3.11/community
#http://dl-cdn.alpinelinux.org/alpine/edge/main
#http://dl-cdn.alpinelinux.org/alpine/edge/community
#http://dl-cdn.alpinelinux.org/alpine/edge/testing

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

apk add wireguard-tools
apk add libqrencode  

  • wireguard-tools:wireguardに関係するツール(wg)を提供します。
  • libqrencode:ファイルの中身をQRコードにするツールで、設定ファイルをAndroidスマホ側にQRコード経由で渡すために利用します。

フォワーディングの許可

vpnセグメントからの通信を別のセグメントへ渡してあげる設定を行います。
これがないとAndroidスマホからの通信はlinuxまでしか届きません。

sysctl -w net.ipv4.ip_forward=1

ネットワークを再起動すれば有効化。今回は面倒なので再起動して有効化しました。

鍵の作成

wg genkey | tee server_private | wg pubkey > server_public
wg genkey | tee android_private | wg pubkey > android_public

自宅ネットワーク側用、Androidスマホ側の両方の秘密鍵、公開鍵を作成します。

設定ファイルの作成

ファイル(/etc/wireguard/wg0.conf)を作成して編集します。

[Interface]
PrivateKey = 【server_privateの内容をコピペ】
Address = 192.168.10.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT;iptables -A FORWARD -o %i -j ACCEPT;iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;

[Peer]
PublicKey = 【android_publicの内容をコピペ】
AllowedIPs = 192.168.10.0/24

alpine linuxが通常使っているネットワークインタフェースがeth0と想定した設定となります。ListenPortはサンプルで、他の値もOKです。

注意点

PeerのAllowedIPsは「接続を許可するネットワーク」だけの意味ではなくて、Peer側にあるネットワーク情報としても利用されます。

vpn接続の待ち受けを開始(wg up)する際に、ここに書かれているセグメントはルーティングテーブルに追加されるので注意が必要。

どこからでも許可したい。とか思って0.0.0.0/0と書くとデフォルトゲートウェイの情報がPeer側に上書きされてどこにも通信できなくなります。

Androidスマホ側 設定ファイルの作成

適当なファイル(ここではandroid_wg0.conf)を作成して編集します。EndPointはDDNSなど使えばURLを利用可能です。

[Interface]
PrivateKey = 【android_privateの内容をコピペ】
Address = 192.168.10.2/24
DNS = 【自宅ネットワークのDNSアドレス】

[Peer]
PublicKey = 【server_publicの内容をコピペ】
EndPoint = 【自宅ネットワークのグローバルIPアドレス】:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepAlive = 30

Androidスマホ側 設定ファイルの作成

qrencode -o android.png < android_wg0.conf

qrencodeはテキスト情報をQRコードに変換するツールです。

Androidスマホ側に必要な設定情報がQRコード化されてandroid.pngに保存されます。スマホ側ではこれを読み取れば必要な設定は完了です。

vpn用インタフェースの起動

wg-quick up wg0

vpn接続を受け付けるネットワークインタフェースが作成されます。これでAndroidスマホ側からの接続を受け付ける準備は完了です。

Androidスマホ側の作業

play.google.com

直感的に利用できるので割愛。先に作成したandroid.pngをなんとか画面に表示さ、スマホ側で読み取りを行う。
イチから手入力しても鍵情報の入力以外はそこまで大変ではないです(その場合はqrencodeの作業は不要)

スピードテスト(googleスピードテスト)

  • wireguard:(down 32Mbps / up 60Mbps)
  • openVPN:(down 30Mbps / up 36Mbps)

openVPNはサーバ側にsoftetherを利用し、udpで接続しています。ダウンロードはあまり変わりませんでしたね。vpn接続の開始はwireguardの方がずいぶん早いように感じました。

感想

基本的には簡便な構成で、設定に必要な項目は少ないです。なにも知らない状態から小一時間で作業は完了しました。
ただ、日本語のドキュメントは少なく、うまくいかないときに抜け出すのに時間がかかるかもしれません。

参考

wiki.alpinelinux.org

www.virment.com

HUAWEI P20 liteで急速充電が出来なかった(解決した備忘録)

HUAWEI P20 liteでは、端末と一緒についてくる純正充電器+ケーブルの組み合わせでは急速充電が可能となっているらしい。

p20lite-huawei-wiki.fxtec.info

が、先日購入した手元の端末では何回試しても、端末再起動しても急速表示にならず、充電時間も数時間かかるとても遅い状態。

 ネットで検索しても特に設定をいじるような項目もなく、途方に暮れていたが、ケーブルを純正から100円ショップのSeriaの0.5mケーブルに変えたら解決。急速充電表示になって、実際充電時間も大幅短縮できた。

 と言う解決メモ。追加で純正充電器+ケーブルを買おうとしている人の参考になれば。

Ubuntu 18.04 LTS Serverインストールメモ

Ubuntuをファイルサーバ+αで利用するためのメモ

各リンクは元ネタサイト

サーバのインストール

acecat.hatenablog.com

ストレージが故障したときに安心して捨てられるように、ディスク全体を暗号化、そのためには標準インストーラではダメで代替インストーラを利用する。また、インストール時は途中でループしてインストールが完了しない場合があるので、日本語ではなくて英語を選択してインストールする。途中で出てくるサーバ機能はopenSSHのみ選択(sambaは後で)

以降の説明はユーザ名piを仮定

日本語パッケージを導入

www.yokoweb.net

インストールの際に日本語を選択してない場合に日本語化を実施

$ sudo apt install language-pack-ja-base language-pack-ja ibus-mozc

ESXiで利用しているとコンソールが文字化けするのでコンソールの場合には英語表示のままにするため、.bashrc に行追加

case $TERM in
linux) LANG=C ;;
*) LANG=ja_JP.UTF-8;;
esac

最後にmanも日本語に

 $ sudo apt install manpages-ja manpages-ja-dev

dockerのインストール

qiita.com

後で利用するsambaもnginxもdockerを使って気軽に環境を更新できるように。インストールはスクリプトを利用した簡単コースで

$ wget -O get-docker.sh https://get.docker.com
$ sudo sh ./get-docker.sh

共有用フォルダの作成とsamba設定

Samba4 の共有フォルダーにあるアプリケーションが起動できない事象の対処

以前のSambaでは特に気にしなくてもWindows用のファイルサーバとして利用できていたけど、Samba4では実行権限がデフォルトでは無くなっている。"acl allow execute always"はあまり推奨されていないようだけど、"force create mode = 0777"で解消するよりはマシと判断。

$ mkdir /home/pi/share
$ chmod 777 /home/pi/share
$ sudo docker run --name samba --restart=always -p 139:139 -p 445:445 -v /home/pi/share:/mnt/pub -d dperson/samba -s "share;/mnt/pub;yes;no;yes" -g "acl allow execute always = Yes" -g "dfree cache time = 60"

Web用フォルダの作成とnginx設定

$ mkdir /home/pi/share/html
$ chmod 777 /home/pi/share/html
$ sudo docker run --name webserver --restart=always -v /home/pi/share/html:/usr/share/nginx/html -d -p 80:80 nginx

ソフトのアップデート

タイミングは適当に。再起動も実施する。

$ sudo apt update
$ sudo apt upgrade
$ sudo reboot

 

Ubuntu 18.04 LTS Serverでインストール時に暗号化LVMをセットアップしたい場合

Ubuntu 18.04 LTSのサーバ版では、Ubuntu 16 LTSでは可能となっていた、インストール時に暗号化LVMをセットアップし、ディスク全体を暗号化する方法は標準ではで利用できません。

 BionicBeaver/ReleaseNotes - Ubuntu Wiki

Server installer

server installer, brings the comfortable live session and speedy install of Ubuntu Desktop to server users at last.

どうすればよいかというと、同じくWikiに書いてあって、alternate installer(パソコンならubuntu-18.04.1-server-amd64.iso)を利用すれば以前のメニューが表示されます。

N.B., If you require multipath, full-disk encryption, or the ability to re-using existing partitions, you will want to continue to use the alternate installer which can be downloaded from http://cdimage.ubuntu.com/releases/18.04/release/ As of 18.04.1, the Subiquity server installer now supports LVM, RAID, vlans, and bonds. 

 

シェルエクステンションを頑張ってみる(その2)

 サンプルのままだと、複数ファイルを右クリックしたときに反応しない。これは右クリック時に呼び出されるFileContextMenuExt::Initializeの処理でファイルの個数が1の場合のみに反応するようにしているから。修正。

処理は

  1. FileContextMenuExt::Initialize
  2. QueryContextMenu
  3. InvokeCommand

と呼び出されていくはず。GetCommandStringもどこかのタイミングで呼び出されるはずなんだけど。