揮発性のメモ2

http://d.hatena.ne.jp/iww/

呼び出しているライブラリと関数の一覧

nmでシンボルを抜き出して、フィルタをかける

Man page of nm

nm -C hogehoge
C C++ の関数名を可読にする


nm コマンド – オブジェクトファイルのシンボル情報を表示する | Linuxコマンド.NET
呼び出してる関数⇒自分じゃ定義していない関数⇒未定義シンボル
というわけで、こういう行を抜き出せばだいたいよさそう

                 U std::string::swap(std::string&)@@GLIBCXX_3.4
                 U strcpy@@GLIBC_2.2.5
nm -C hogehoge| grep ' U '| sort | uniq


あとは @@ で区切ればOK

PhpStormで、  を常に表示する

PhpStormのデフォルトでは   がスペースで表示される小さな親切機能がある。
コーディング中にこれが非表示になるメリットは皆無なので、この機能をオフにする。
f:id:iww:20181217204522p:plain


PhpStorm showing space instead of   - Stack Overflow
File ⇒ Settings ⇒ Editor ⇒ General ⇒ Code Folding ⇒ XML entities が有効になっていると変換されて表示されるので、このチェックを外せばよい

f:id:iww:20181217204508p:plain

ネットワーク共有が使えない

エクスプローラのアドレスバーにIPアドレスで指定したところ
f:id:iww:20181217001500p:plain
綴りを確認して再実行してください。 というエラーに。
綴りもへったくれもないだろと思って「ファイル名を指定して実行」してみたところ、原因のようなものが出た。

安全でないためファイル共有には接続できません。この共有には最新でないSMB1プロトコルが必要です。
そのプロトコルは安全ではないため、システムが攻撃にさらされる可能性があります。
このシステムにはSMB2以降を使用する必要があります。

気になるのは、他のPCでは接続できているという点で、つまり他のPCは危険にさらされているのでは・・・?
大丈夫かよ

fatal: protocol error: expected old/new/ref, got 'shallow

fatal: protocol error: expected old/new/ref, got 'shallow xxxxxxxxx'
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly

シャローなクローンをしたリポジトリをプッシュしたときのエラー。

クローン元のgitのバージョンが1.7.1とかベリーオールドだったので、あきらめてアンシャローした


[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ロスト・バケーション【Blu-ray】 [ ブレイク・ライブリー ]
価格:1500円(税込、送料無料) (2018/12/13時点)

expectで、ログを取りながらログインする

#!/usr/bin/expect -f

set IPADDR "192.168.0.2"
set USERID "hoge"
set USERPW "piyo"
set LOGFILE "test.log"

# エラー・タイムアウト用関数
proc ABORT {} {
    exit 1
}

# ログ取得開始
log_file $LOGFILE
# expectのタイムアウトを30秒とする
set timeout 30

# ログイン
spawn ssh $USERID@$IPADDR
expect {
    default ABORT
    "assword:" { send "$USERPW\n"; exp_continue }
    "\\$ "
}

# 制御をユーザーに渡す
interact

puts "END"
exit 0


今日勉強したこと:

  • 文字としての$記号は、\\$と二重エスケープしないといけない
    • 本来\$とすべきところだけど、\もエスケープ対象なので
  • 制御をユーザーに渡すと、spawnしたコマンドが終了するまでinteractは終わらない
  • sendで文字列を送るとき、改行は\r
    • \nを使ってもどうせ\r\nに変換されるので、そんなに気にしなくてよい
  • ログにはspawn関数自体も表示される
    • spawn以外のほかの関数はログに出ない
    • putsもログには残らない


[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

スポーン ディレクターズカット【Blu-ray】 [ マイケル・J.ホワイト ]
価格:1080円(税込、送料無料) (2018/12/11時点)

let's encrypt の証明書を取得する

ユーザーガイド - Let's Encrypt 総合ポータル

動き

実行すると、このスクリプトが /var/www/.well-known/ 配下に適当な一時ファイルを作成する。
let's encrypt の人が http://example.com/.well-known/ にアクセスしにくる。
それが成功したらドメインがちゃんと存在する証明になり、証明書をダウンロードする。
ダウンロードできた証明書は /etc/letsencrypt/live/ に置かれる。
apacheなりnginxなりで、証明書がそこにありますと設定して完了。

スクリプトのダウンロード

https://dl.eff.org/certbot-auto
スクリプト certbot-auto がダウンロードされるので、適当に実行属性をつける

スクリプトの実行

/root/letsencrypt/certbot-auto certonly --webroot -w /var/www/ -d www.example.com -m hoge@example.com --agree-tos
certonly 証明書のダウンロードだけする
--webroot Webrootプラグインを使用する
稼働中のwebサーバを止めず、一時ファイルを作ってドメインの認証をする
-w Webrootプラグイン使用時のrootディレクトリの実体の場所
-d 証明書を取りたいドメイン
-m 連絡先メールアドレス
--agree-tos 利用規約なんか読まず自動で全同意

定期的な証明書の更新

/root/letsencrypt/certbot-auto renew --post-hook "/etc/init.d/apache2 restart"

(wheezyで実験したのでsystemdじゃない)

これをcronで数カ月に1度とか適当に動かす