揮発性のメモ2

知識をメモ書きしておく

vpncmd を非対話で使う

ソフトイーサで、vpncmd を非対話で使うために試行錯誤した内容を書く

マニュアルは下記を参照
https://ja.softether.org/4-docs/1-manual/6/6.2

接続

vpncmd はVPNブリッジなどへ接続して設定するためのクライアントであり、つまりVPNブリッジ(管理サーバ)が起動していないと設定は出来ない

オプションは /SERVER でも --server でもどっちの形式も受け付ける。 -hでヘルプは出ないので --helpか /? を使う。 大文字小文字の区別はほぼ無い

vpncmd localhost:443 /SERVER /PASSWORD:password /adminhub:BRIDGE
localhost:443 接続先ホスト名とポート番号
/SERVER VPNブリッジへ接続するモード指定
/PASSWORD:password 管理用パスワード
/ADMINHUB:BRIDGE ブリッジ名(HUBの編集をするとき)


ポート番号は省略すると 443

コマンド

/CMDオプションで直接実行するのと、/INオプションでファイルから読んで実行するのとある。ファイルから読む形式の方がつぶしが効く

vpncmd localhost /SERVER /PASSWORD:password /adminhub:BRIDGE /IN:/tmp/cmdlist.txt /OUT:/tmp/result.log
/IN:/tmp/cmdlist.txt コマンドファイル
/OUT:/tmp/result.log ログファイル(画面に出るので上書きする)

コマンドファイル

基本的にプロンプトから手で打つのと同じものを書くだけ。
そのためか、コメント機能は無いので そこだけどうするかわからん。 天才にコメントは不要なのか

例:/tmp/cmdlist.txt (カスケード接続の設定の編集)

CascadeSet cas_hoge /SERVER:vpn.example.com:443 /HUB:hub_hoge
CascadeUsernameSet cas_hoge /USERNAME:username
CascadePasswordSet cas_hoge /PASSWORD:password /TYPE:standard
cas_hoge 編集対象のカスケード接続名
/SERVER:vpn.example.com:443 接続先VPNサーバ ホスト名とポート番号
/HUB:hub_hoge 接続先HUB名
/USERNAME:username 接続に使うユーザ名
/PASSWORD:password 接続に使うパスワード
/TYPE:standard 認証方式(固定)


エラー処理

最後のエラーだけエラーコードが取得できる。途中でエラーが発生しても次のコマンドの成否で上書きされるので全然だめ。

VPN Server/BRIDGE>CascadePasswordSet cas_hoge /PASSWORD:password /TYPE:standard
CascadePasswordSet command - Set User Authentication Type of Cascade Connection to Password Authentication
Error occurred. (Error code: 29)   ★←これをgrep
Object not found.

ログファイルを見て、Error occurred.を探すしかなさそう

ipコマンドとifconfigコマンドで LANケーブル抜けとかを見る

$ /sbin/ifconfig eth0
eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.10.5  netmask 255.255.255.0  broadcast 192.168.10.255
        ether f0:45:da:7c:ad:16  txqueuelen 1000  (Ethernet)
        RX packets 556  bytes 81052 (79.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 557  bytes 85706 (83.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 182

$ ip a s eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f0:45:da:7c:ad:16 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.5/24 brd 192.168.10.255 scope global eth0
       valid_lft forever preferred_lft forever

それぞれのコマンドで、1行目が大事

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

動作可能な状態のとき、 RUNNING が表示される。
動作不能な状態のとき、 RUNNING が表示されない。 原因はケーブル抜けなど

4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
4: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000

動作可能な状態のとき、stateが UP になる。 LOWER_UP はケーブルが刺さってるという意味らしい。
動作不能な状態のとき、stateが DOWN になる。 NO-CARRIER はケーブルが刺さってないという意味。

stackoverflow.com

シリアルコンソールで ls の結果に色が付かない

sshでログインするとちゃんと色が付くのにシリアル接続だと色が付かない
~/.bashrc には次のように書いてある

export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'

調べたところ、TERM変数が変な値のときに色なしになることがわかった。

dircolors とは --color を持つコマンド用の環境変数を設定できる文字列を出力するコマンド
*1

このコマンドは環境変数 TERM を参照する。
TeraTermssh接続したときは xtermとかVT100になるので問題はない
シリアル接続ではどうやら vt220 になっていて、このときのLS_COLORSは空になり、その結果 lsに色が付かない状態になっていた


デフォルトがどこに設定されているのかよくわからなかったので、
.bashrcに vt220だったらvt100にするというインチキを追加して暫定対処

*1:この出力文字列をevalで実行するというのは ずいぶん適当な仕様だと思う

Linuxの起動日時を表示 2

/proc/stat に載ってる btime は、ちゃんと現在時刻を考慮する。


時計がまだ合っていないパソコンを起動したときの btime は、その不正確な時刻をもとに 起動日時を計算している。

btime 1478193392
$ date --date=@1478193392
Fri Nov  4 02:16:32 JST 2016


このあと、NTPなどで時計を合わせると、btime が現在時刻に合わせて表示される

btime 1596676638
$ date --date=@1596676638
Thu Aug  6 10:17:18 JST 2020

gitで、最新のファイルだけ全部cloneする

git clone -b master --single-branch --depth 1 --recursive --shallow-submodules https://gitlab.com/hogehoge/hogehoge.git
-b master ブランチ指定 (例ではmasterを指定)
--simgle-branch 指定したブランチだけclone
--depth 1 1階層(最新)だけclone
--recursive サブモジュールも再帰的にclone
--shallow-submodules サブモジュールのcloneも最新だけにする


Git - git-clone Documentation
git のクローンを最小量にする(サブモジュールを含めたshallow clone) - Qiita
Git - 特定のブランチをクローンする | git Tutorial
[Git] とにかく速く特定のブランチをgit cloneしたい場合のTips - Qiita


毎回ユーザ名とパスワードを聞かれないよう覚えさすには次の設定を ~/.gitconfig に足しておく

[credential]
#       helper = cache --timeout 36000
        helper = store --file /tmp/git-credentials
git config --global credential.helper store --file /tmp/git-credentials

Git - 認証情報の保存

とりあえず、電源を入れている間はパスワードを覚え続けてもらう設定にした。
これを書かないと、サブモジュールでも毎回パスワードを聞いてくる

2020-10-13 追記

最初の1回も聞かれたくないときは、URLのドメインの前に ログインID:パスワード@ を書いちゃう。
パスワードを覚えさせる設定はこれも記憶してくれる

git clone -b master --single-branch --depth 1 --recursive --shallow-submodules \
    https://username:password@gitlab.com/hogehoge/hogehoge.git

GitHubでユーザ名・パスワード省略(push, pull) - Qiita

PhpStormで、CTRLキーを押しながらファイルの複数選択ができなくなったとき

stackoverflow.com

This problem can be fixed by turning off "Open files with single click" in the Project tab > Gear icon.
It might be a bug; not sure.

https://youtrack.jetbrains.com/issue/WI-52883

そういうことかよ・・・

SHIFTキーを押しながらの複数選択はできるので、実質バグだと思う

bashで、ヘルプと初期設定をひとつにまとめる

スクリプト書いてるとき、ヘルプと実体を合わせるのが面倒だし
コメントに書いたことをヘルプにも書き写すのがアホっぽくなったので
できるだけひとつにまとめる実験

実行するとこんな感じになる

$ ./sabun.sh -h

# 差分確認プログラム
# 接続先の / と ローカルディレクトリの差分一覧を表示
# 使い方: sabun.sh -b 192.168.31.5 -d backup202007

# 設定項目と初期値
# -u 接続ユーザ
SSHUSER=hogehoge
# -b 接続先 (必須)
SSHHOST=
# -d 比較対象ディレクトリ (必須)
BBBDIR=

$


ヘルプ表示関数 で、スクリプトの一部分をそのまま表示するようにしてみる

head -$((LINENO-3)) $BASH_SOURCE | tail +3
tailコマンドで先頭を指定行数分 読み飛ばす - 揮発性のメモ2
Man page of BASH

LINENO は、現在の行番号
BASH_SOURCE は、スクリプト自身のファイル名 ($0は使えないよ)

変数の初期設定や定義、使い方などをソースの頭にまとめて書き、
ヘルプオプションで ソースをそのまま 表示する

続きを読む