pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


作業用のデスクトップPCにIntelAMTの脆弱性CVE-2017-5689が見つかったようなので対処するテスト

Twitterでこういうのを見かけたので、

ためしに 127.0.0.1:16992 してみたら、 f:id:pslabo:20170508143918p:plain

はい、アウトですね。

ここらへんの記事を読むと、Intelが配布するツールで本件の影響の有無を確認できるとか。

japan.cnet.com

ダウンロードのページはこちらだそうです。 downloadcenter.intel.com

そこでダウンロードしてツールを実行してみた。 f:id:pslabo:20170508144659p:plain

はい、完全にアウトですね、本当にありがとうございます。さて、このツールで案内されているURLの記事を見ると、OEMベンダー経由でファームウェアのアップデートの提供を受けるか、または INTEL-SA-00075 Mitigation Guide を読んで軽減策を実施しろ、と書いてある。

f:id:pslabo:20170508144223p:plain

しかし手元のの機材向けにはファームウェアのアップデートがリリースされていないようなので、軽減策を実施することにしてみる。英語の文書をとりあえず流し読みしてみると、LMS (Local Managemanet Service) の機能を止めるには、以下のように実行しろ、と書いてあるようだ。

sc.exe config LMS start=disabled

なお、オリジナルの文書は単に sc と書かれているけど Windows10 1703 以降のように PowerShell がデフォルトな環境では sc だと別の処理が動いてしまうから、この手の文書には拡張子を含めたコマンドを書いて欲しいものだと思う。

さて、これを実行したら再起動して、前述のURLに再度アクセスしてみる。 f:id:pslabo:20170508145748p:plain

とりあえずサービスは止まったようだ。これで安心してよいのかどうかはイマイチ分からんけど。

AWSやGCEの無料枠でmastodonを立てるための情報収集

とりあえずのメモ。とは言っても、すでに誰かがやっていることの後追いでしか無いわけだが。

ポイントは、無料枠のインスタンスではビルド時のメモリが足らんので、スワップを確保せねばならんことだろうか。

リファレンスの情報は、たとえばこんなあたり。

qiita.com

translucens.hatenablog.jp

ただしDockerで立てるのは内部構造がわかりづらい。そういう意味では、こちらの記事の方が参考になるかも。 https://lithium03.info/mastodon/index.html

自分がやってみた場合の手順は別途ログをまとめる予定。とりあえずはDockerで平文のサーバが稼働するところまでは来ている。あとはSSL/TLSの処理をLBに載せるのか、それとも自力で扱うか。自力で扱うにしても、Dockferの中のWebサーバでやるのか、それともDockerの外側にreverse proxyを立てるのか、など、方法はいろいろ。

Ubuntu 16.04LTS に入れておきたいパッケージのメモ

完全に自分用のメモ。思いついたら追記する。

汎用的に使いそうなパッケージ

sudo apt install jq nkf dos2unix clang gcc vim fish

説明は省略。

Delphi for LInux の必須パッケージ

RAD Studio/Delphi 10.2 Tokyo Enterprise 以上では Linux 向けのコンパイラが含まれるけど、それを利用する場合の必須パッケージを記しておく。

なお、Embarcadero の evangelist な方々の手順には joe が入っているけど、これは要らんと思う。サーバ屋が joe とか使わないでしょ。せいぜい、vimemacs 。また、同様の理由で p7zip-full も要らないはず。そもそも p7zip が必要な状況が良くわからん。アーカイブ作ったり展開したりするなら必要だけど、Delphi for Linux のビルドでそんな作業は無いはず。

sudo apt install wget curl build-essential zlib1g-dev libcurl4-gnutls-dev

WindowsでIPv6を無効化したり有効化したり

単なるメモ。

IPv6 を無効化したらDelphi/C++BuilderLinux版PAServerがWindows10 1703 Creators Update の Bash on Windows で動かないかな、と思ったので試してみたけど変化なし。

https://support.microsoft.com/ja-jp/help/929852/how-to-disable-ipv6-or-its-components-in-windows

日付から曜日を求めるワンライナーを awkで

ウェブサイトにイベントの告知記事を書くときに、過去の記事を書き換えて流用しようとすると、日付は書き換えたけど曜日を書き換え忘れていたり、あるいは間違えて書いてしまったり、ということがあります。そういう間違いをチェックするのに日付とカレンダーを付き合わせても良いのだけれど、どうせなら何かのロジックで処理したい。

さて、曜日の計算を汎用的に行うにはツェラーの公式を使うのが基本ですけど、それだと処理が冗長になります。そんなことをせずとも、指定した日付に対応する曜日を取得する処理をカレンダー関連のコマンドや関数で取得する方がシンプルです。

そこで awk で日付文字列をパースしつつ、mktimeで内部形式(unix秒)に変換したのち、strftime で曜日だけ取得するように書いてみました。

awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'

そうするとこんなふうに利用できます。

$ echo 2017/05/18 | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
Thu
$ echo '2017年5月18日' | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
Thu
$ awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
2017年 5月 18日
Thu
2017/5/18
Thu

日本語で表示してほしいなら LANG=ja_JP.UTF8 しておけばOKですね。

$ export LANG=ja_JP.UTF8
$ echo 2017/05/18 | awk -F "[年月日/]" '{ print strftime("%a", mktime( $1 " " $2 " " $3 " 0 0 0" )) }'
木

Windows10でスタートメニューが出ない場合の解決方法として良く紹介される手順の意味を確認する

自分自身はWindows10でスタートメニューが出ない不具合に遭遇したことは無いけれど、世の中的には割とあるらしい。

さて、そういう場合の対処方法として良く紹介される手順にはこういうものがある。これを管理者権限で実行するらしい。

dism /online /cleanup-image /restorehealth
sfc /scannow
powershell
Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like “*SystemApps*”} | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}

これを単にコピペしてもよいのだけど、エンジニア的には内容を理解しておくほうが良さげ。

そこでこれらのコマンドの意味を確認しつつ、もっと切りつけ可能な部分はないかと考えてみる。

個々の処理の意味

dism.exe

dismはWindowsのイメージを操作するツール。

パラメータ 意味
/online 現在実行中のOSイメージに対して操作を行う
/cleanup-image イメージに対してクリーンアップおよび回復を試みる
/restorehealth コンポーネントストアの破損の有無をスキャンし、必要に応じて修復を試みる

sfc.exe

ファイルシステムの整合性をスキャンして、間違ったバージョンを正しい Windows バージョンに置換する

パラメータ 意味
/scannow 整合性をスキャンすると同時に、問題のあるファイルの修復も行う

Get-AppXPackage -AllUsers

すべてのユーザ向けのインストール済みストアアプリの情報を取得する

powershell

cmd.exe から PowerShell を起動する。

Where-Object {$_.InstallLocation -like “SystemApps”}

インストール先のフルパスに SystemApps を含むアプリだけを抽出する。

Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}

抽出されたストアアプリについて、DisableDevelopmentMode でアプリを再登録する(サイドローディングする)

処理の最適化?

最適化、というほどでもないけれど、今回の作業はそもそも「PowerShellを管理者権限で実行」し、PowerShell上から下記3点を実行すればよさげ。特に Windows10 Creators Update ではコマンドプロンプトから PowerShell への置換が進みつつあるので、わざわざコマンドプロンプトから powershell を実行する意味がない。

dism /online /cleanup-image /restorehealth
sfc /scannow
Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like “*SystemApps*”} | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “$($_.InstallLocation)\AppXManifest.xml”}

sedで日本語表記の日付から年月日の漢字を消して/に置き換える

2017年 4月 19日や2017年4月19日のような日付形式をsedで置換しようとしたら意外にハマったのでメモ。

ポイントは以下の通り。 - ( や ) はエスケープ必要 - blankspace もエスケープ必要? - + や ? もエスケープ必要 - { や } もエスケープ必要

やりたいパターンマッチはこういう内容。

https://regexper.com/#(%5B0-9%5D%2B)%E5%B9%B4%20%3F(%5B0-9%5D%2B)%E6%9C%88%20%3F(%5B0-9%5D%2B)%E6%97%A5

だけど sed ではエスケープせねばならない部分が多いので、結果的にこういう処理になる。

$ echo '2017年  4月 19日' | sed 's/\([0-9]\+\)年\ \?\([0-9]\+\)月\ \?\([0-9]\+\)日/\1\/\2\/\3/g'
2017/4/19

上記の内容を踏まえたうえで日本語の日付時刻から漢字を抜く処理をこんなふうに書いてみた。

#!/bin/sed -f

s/\([0-9]\+\)年\ \?\([0-9]\+\)月\ \?\([0-9]\+\)日/\1\/\2\/\3/g
s/\([0-9]\+\)時\ \?\([0-9]\+\)分\ \?\([0-9]\+\)秒/\1:\2:\3/g
s/曜日//g
s/日/Sun/g
s/月/Mon/g
s/火/Tue/g
s/水/Wed/g
s/木/Thu/g
s/金/Fri/g
s/土/Sat/g