The Man Who Fell From The Wrong Side Of The Sky:2017年4月分

2017/4/1(Sat)

[やきう] 広島×阪神 ズムスタ

80年ぶり珍記録! 広島-阪神で1試合四球最多タイ26個

球審のストライクゾーンがエイプリルフールだった説くるおしいほどすき

2017/4/2(Sun)

[やきう][横浜大洋ホエールズ][スッダレ] やきうおもんねーわ

やきうおもんねーわ( 須田、飛翔)

2017/4/4(Tue)

[音楽] The Durutti Column/DOMO ARIGATO

長らく廃盤だったThe Durutti Columnのライブ盤「DOMO ARIGATO」が同じく入手困難な同ライブのレーザーディスク盤と一緒に3CD+1DVDとして 再発されるようで素晴らしい、いいから買え(国内盤もディスクユニオンから発売するようで)。

映画「24 Hour Party People」にもなった所属レーベル「Factory」崩壊によって彼らの旧譜は長らく入手困難でしたが、2013年くらいからベルギーの友人ことアニーク・オノレの立ち上げた 「Factory Benelux」からボチボチ再発はじまってます。

しかもその理由がフロントマンのヴィニ・ライリーがここ数年、脳梗塞の後遺症で治療費すら払えない貧困に陥ってしまったことへの支援というのが悲しいですやね。

少し前に Chillwaveというジャンルが流行りまして、私も 先日ライブに参戦した TychoBibioなどを好んで聴いておりますが、この音楽の源流として直接的には Boards Of Canadaあたりばっかり取り上げられるのですが、やっぱりThe Durutti Columnもオリジンでしょう。

2017/4/6(Thu)

[映像] Magix VEGAS PRO 14

ワイは 動画編集するにもクッソ貧民で *1かつての師匠のように Adobe Premiere Proやら After Effectsなんかバーンと買える財力は持ち合わせておらんので *2、ビデオカードはカノープス難民だった記憶からその末裔である Grass Velleyが販売するアマチュア向け編集ソフトである EDIUS Neoを長らく使ってたわけです。

ところがちょっと前にGrass VelleyはEDIUS Neoをディスコンにして EDIUS Proのみに絞ってしまったんですな、期間限定でNeo 3.5からPro 8へのアップグレードの優待販売はあったんですが、ちょっとアマチュアには今後のお布施額が跳ね上がるお高い買い物の上に将来も不透明なわけです。

そもそも以前にもEDIUS Neo 3 → 3.5のアップデート時に自社のハードウェア H.264アクセラレータである Firecoder Bluのサポートを打ち切りやがったのも悪印象やったしね…

まぁ一兆円という小学生でも言わねえよという金額の赤字をリアルで叩き出して名を売った東芝がかつて作った産廃 SpursEngine *3搭載だったのが運の尽きだったとか、Intel QSV/AMD(Radeon) VCE/nVidia NVEnc などが登場し世間的にはもはや用済みではありましたが、ワイみたいに未だにC2Q Q6700とかで動かしてる人間も居るわけでな...

ちなみにGrass Velleyがアマチュアを切り捨てていく一方で、ライバルである映像編集ソフトの SONY VEGAS PROはプロ向けに売れないからヤケクソになったのか突如としてソースネクストから80%以上オフという破格の安価で投げ売りした挙句、事業ごと一切合切を Magixに売り払うという、こっちもよく判らんことになっとります。

さすがにMagixへの移管が終ったらこんな投げ売り終わるだろ思ってたんですが、新バージョンの VEGAS PRO 14も継続してソースネクストで安売りしててどうやって儲けるつもりなんですかね...

ところでソースネクスト版のVEGAS PRO 14はバージョンがちょっと古く(build191)、私の環境では起動途中にクラッシュしてしまいます。 なのでMagixから最新版(build244)を落としてきたんですが、困ったことに日本語メッセージカタログはソースネクスト版のみに含まれていて、本家では切り捨てられてしまってるんですな。 まぁ日本市場なんてうまあじ無いし日本語化の工数のおちんぎん勿体ないからね仕方ないね...

ちょっと検索すればソースネクスト版のメッセージカタログを抜いて本家に適用する方法もでてきますが、まぁワイはUIは英語でも構わんので困ってる人はググればいいと思うよ。

ちなみにソースネクスト版、先月は全部入りセットを購入するとオマケに HitFilm Ignite Pro 2017までついて2万切るみたいなオマケだけで元が取れるような価格設定だったりしたので そういうキャンペーン期間を狙う方がいいかも、まぁ安売り自体がいつまで続く契約なのかもようわからんのですが。 ちなみにHitFilm Pro/HitFilm Ignite Proもソースネクストで半額で売ってたり。

しかしもう日本人のアマチュアが映像編集で信じられるのはAviutlとかのフリーソフトくらいしか無いんですかねぇ…Creative Cloudもなぁ… *4

*1:未だにカメラはPanasonic LUMIX DSC-GH1のカスタムファームでしのいでいる、4kは来世で買うよ。
*2:なんせあの人ホームビデオが欲しくなったとその足で業務用 DVCAMのSONY DXC-D30 + DSR-1とか合計ン100万の機材買ってきた伝説あるからな...
*3:SDKってもうどこからもダウンロードできないのねぇ...
*4:Adobe Premiere Elements? クラッシュする以外の動作をみたことが無いんですが…

2017/4/7(Fri)

[音楽] David Bowie Is デヴィッド・ボウイ大回顧展 (その2)

前回はボウイの命日に合わせて行ってきたんですが、この土日で会期終了になるので見納めに行ってきましたよ。

内容については気が向いたら書こうかと思ったんだけど Pen誌の特集が詳しいしワイが書かんでもええよね、とにかくボウイ好きなのに会場に行かなかったら一生後悔するレベル。

前回の感想のネガとしては、展示方法がちょっと 英国面に陥ってて人の流れが悪くストレス溜まったのですが(内容そのものはファンなら万難排して行けレベルで素晴らしいです、冥途の土産レベル)、今回は改善され…ることはなくそのまんまでしたね。空気清浄機が置かれるようになったのと展示物に手を触れないで下さい看板が増えてたくらいかな。

あと土産物がちょっと増えてましたな、Tシャツ類のデザインが大変微妙だったんですが「★ Blackstar」と「No Plan(EP)」のジャケットをモチーフにしたTシャツが投入されかなり売れてましたね、ワイはあのデザインどーしても戸田世紀「俺節」のオキナワの着てたシャツにしか見えなくてな…生地もプリントも安っぽいわりに4000円は出せないよ。

あと山本寛斎の「TOKYO POP」ジャンプスーツをモチーフにしたグッズも、3万近い高価なTシャツやらバッグじゃさすがにビジネスチャンス逃すと思ったのか

が新商品として投入されてました。こちらもすげーやっつけな出来栄えでオリジナルのカミキリムシみたいな昆虫のヌメヌメ感は出せなかったのかと残念な仕上がり。

前回はアルバム「アースリング」のジャケットで使われたユニオンジャックコート(デザインはアレキサンダー・マックイーン)の前で、おそらく服飾専門学校生っぽい金髪ピアスのおねーちゃんが大喜びしてるのが印象に残りました。 時代を超えてスターマンの歌詞のように若い子の「心を吹き飛ばす(blow our minds)」瞬間をみれるのは大変喜ばしい限りです。

Earthling (album).jpg
By Source, Fair use, Link

なお今日はどっかのインターナショナルスクールの国籍バラバラな生徒達の修学旅行かなんかのコースになってたようで、イギリス人っぽいキリッとした眉が印象的なかわいい少女が、ステージでボウイとミック・ロンソンがキスしそうな距離で顔を近づけ歌う映像をみて、文字通り 野獣の眼光になったのを目撃しワイ大満足です、 妖怪ホモくれ┌(┌^o^)┐ホモォ…が生まれる瞬間を見た。 会場の主な層は単身の40-50代のオバハンばっかなんですが彼女らも3-40年前に同じ顔をしてたんだろうなと… Nothing Has Changed.

[WWW] Chrome 56

Chrome 56 sucks.

ERR_BLOCKED_BY_XSS_AUDITOR

2017/4/8(Sat)

[音楽] Where Are We Now?/David Bowie (その3)

前回の続き、今回も歌詞の解釈ではなくボウイとベルリンの壁の関わりについて書こうと思います。

@ Glass Spider Tour

1987年6月にベルリンのブランデンブルク門で3日間に渡って開催されたロックフェスの最終日、ボウイの「 Glass Spider Tour」が開催されました。

このツアーはアルバム「 Never Let Me Down(1987)」の発表にあわせ、これぞ アリーナロックという当時においては過去例のない規模のステージセットを構築して行われました。

Never-Let-Me-Down.jpg
By Source, Fair use, Link

このような大規模なステージセットが作れたのも RCAから EMIに移籍し、売れっ子プロデューサーの ナイル・ロジャースを起用し、スターダムへ駆け上がったアルバム「 Let's Dance(1983)」の商業的成功があってのものです。

@ Diamond Dogs Tour の失敗

実はこのような巨大ステージでのライブを行ったのはボウイにとっては初めてではありません、過去にもアルバム「 Diamond Dogs(1975)」に伴うツアーも例を見ない規模の大がかりなステージを作り上げています。

ボウイは元々SFの古典であるオーウェル「1984」のミュージカル舞台化を熱望していたのです。

しかし遺族の許可が得られず断念し、自ら「ダイヤモンドの犬」という

核戦争後によるポストアポカリプスを生きる獣人達、そしてコンピューターが支配する全体主義

という物語を作り上げました、 おいそこ「けものフレ〇ズ」とか言うなよ!

「1984」が暗示したディストピアと、ジギーのファッションにも大きな影響を与えていたキューブリック「時計じかけのオレンジ(1971)」の若者の集団性と暴力そして残虐性もテーマになっています。

そこは死の世界
蒸発を免れたわずかな屍体もやがて腐り果て、血と肉だったものは通路を滴り落ちる
「略奪者の丘」にそびえるビル、1インチほどのシャッターの隙間から
突然変異の怪物がその血走った目で見下ろす、かつてマンハッタンと呼ばれた「飢餓の街」
もうどこにもアメリカの象徴だった自動車の姿はない

ネズミほどの蚤が、ネコほどのネズミを吸血する
生き残った1万の民はもはや人の感情を失った獣であり、似通ったもの同士で群れを成す
無人の摩天楼の最上階を自分たちの住処として作り替えていく
それはまるでショーウィンドウに野犬の群れが襲いかかるように
ミンクやシルバーフォックスの毛皮を剥ぎ取り、そしてレッグウォーマーに作り替える
そしてサファイアやひび割れたエメラルドを「群れ」という家族の徽章とする

明日にでも訪れるかもしれない、ダイヤモンドの犬たちの時代だ
これはロックンロールなんかじゃない

大量殺戮だ

ボウイちゃんはロックンロールが得意な犬のフレンズなんだね!

最終日を迎えたDavid Bowie Is展でもこのミュージカルの絵コンテとそのムービー、セットのミニチュア、そしてライブ映像が展示されています。

しかしこのツアーはあまりに巨大なセットの移動と設置そして大勢の演者のギャラと費用がかかり過ぎることで、ボウイの財布も悲鳴を上げ全日程を消化することなく打ち切りになってしまいます、あまりの負担に「最終日を終えてセットを焼き払った後はとにかくホッとした」みたいな事が書かれていました。

「Let's Dance」以降は商業主義に走ったという批判は多くて、最近のボウイは聴くに堪えないみたいな話をあちこちで公言する日本のロックミュージシャン様や、もう交通事故で死んだと思わないとやっとれんみたいな批評を書く某ロック雑誌の記者やらようけおりましたが、結局金・銭・マニーがないと成し遂げられない表現をこの時期追い求めていて、この「Glass Spider Tour」は10年かけてようやく「Diamond Dogs Tour」のリベンジを果たしたという事なんでしょう。

ちなみに「Diamond Dogs Tour」の当初の構想としては、毎回ビッグブラザーの住まう摩天楼を模したセットを破壊したいというアイデアがあったそうです。 では「Glass Spider Tour」では何を破壊しようと思ったのか?それは東側の全体主義とその象徴であるベルリンの壁だったのではないでしょうか。

@ ベルリンの壁

話を1987年6月に戻しましょう。

このブランデンブルク門の前に作られた巨大なセットは、本来であればステージ前に向けるスピーカーの1/4は後ろ側、つまり壁の反対側の東ベルリンに向けられていました。

そしてコンサートの中盤では東側の全体主義への抵抗を呼びかける "Heroes" を演奏し、そしてメンバー紹介のコーナーでも

壁の向こう側にいる友人達にも多幸を祈るよ(We send our best wishes to our friends who are on the other side of the wall.)

とメッセージも送りました。

この明らかに政治的な意図のあるイベントを東ドイツはもちろん警戒し、東ベルリンは警官隊によって厳重な監視下だったのですがそれでも演奏を聴きに5000人を超える群衆が集まり、最終的には数十人の若者が警官隊に逮捕される暴動に発展します。秘密警察シュタージが撮影した記録映像には

この壁を退けろ(The wall must go!)
ブタ野郎(=政権)と一緒に引き摺り下ろせ (Down with the pigs!)

と叫ぶ若者の映像が残されています。

この様子については「 新・映像の世紀 第5集 若者の反乱が世界に連鎖した」が詳しいです。

@ レーガン大統領の演説

この騒乱からわずか一週間後、当時のアメリカ大統領であるレーガンが同じブランデンブルク門の前で とある演説をします。

ゴルバチョフさん、この門を開くのです (Mr. Gorbachev, open this gate.)
ゴルバチョフさん、この壁を倒すのです! (Mr. Gorbachev, tear down this wall!)

呼びかけの相手は1985年に「ペレストロイカ(改革)」を掲げてソ連共産党書記長の座に就いたゴルバチョフ書記長です。

これより前にベルリンの壁の前で演説したアメリカの大統領はケネディにまで遡ります。

  • 共産主義は悪い文明
  • 東と西の経済格差こそ自由主義の勝利の証明
  • 私もベルリン市民と価値観を共有する一人だ

という演説はレーガンのものよりも有名であり、この広場の名前が ジョン・F・ケネディ広場に変更されてしまったほどです。

実際のところケネディ演説の評価については

  • ウィーン会談以後、フルシチョフに国境封鎖を黙認するかのような誤ったメッセージを与えていた(「壁の建設を止める手立てはない」発言)
  • その結果フルシチョフは即座に国境封鎖と初期の鉄条網による壁の建設を実行した(ベルリン危機)
  • その成功によってキューバに核ミサイル基地建設まで企てることになり全面核戦争の危機まで陥った(キューバ危機)

というケネディの失策を割り引いて考えるべきと思うんですがね。

というのもこの演説では西ベルリンの安全保障についてのみ触れていて、建ってしまった壁については

  • おれじゃない
  • あいつがやった
  • しらない
  • すんだこと

という おあしす運動レベルの無責任さだというCIA高官からの批判もあったようです。

まぁキューバ危機で学んだ通り米ソで直接ドンパチやったら世界滅ぶからね、これによって 代理戦争が世界中にまき散らされることになったわけでな…

@ 次回

ケネディとレーガンのそれぞれの演説の間の1/4世紀の間の冷戦の歴史について、そしてその歴史とボウイの作品の関わりについて書きます。

2017/4/9(Sun)

[Windows] Windows 10 Creators Update

いやもう本当はWindows 7に戻したいんだけどね...

Anniversary Updateまでは右クリックの「プログラムから開く」を選択すると、初回だけアプリの全スキャンが走るようでその度にエクスプローラーがハングアップしてたんだけどようやく直ったね。

あと相変わらずスタートメニューがクソなので検索ボックスからアプリ起動するというCUI的使い方してるんだけど、初回だけやたらとアプリの起動に時間がかかってサクラエディタが出てくるのに数十秒とかゆー状態だったのも直ったっぽい。

後はIMEがらみでメモ帳ですらわりと頻繁にクラッシュするのが直ってるといいんだけどねー。

あと旧コンパネの「アプリケーションの追加と削除」が設定の「アプリと機能」に移ったけど、一覧表示のスクロール描画が異常に遅くてクソ萎える、マジで旧コンパネ返してくれ…

それと「アプリ」って略語の利用ってUIの国際化として適切なんですかねこれ。

スタートボタン右クリックで旧コンパネ出なくなったけど、検索からはいけるのね… はー早よう Windows 7 に戻そう…

もういっちょ、何かのダイアログ出すたびにそいつにテキストボックスとかあるとIMEのモードがでっかく画面中央に出てくるクソ仕様って切れないんですかねこれ…

2017/4/10(Mon)

[Windows] Windows 7 のセキュリティアップデート統合済DVDを作成する (その1)

昨日書いたエクスプローラーのハングとかやっぱ直ってなかったようで再発しはじめたので、もうWindows 7に戻すよ。

なのでついでに以前からtwitterとかでWindows Update終らねぇみたいな話が流れてきてその度に呟いてたけど、解決方法をまとめてチラシの裏に残しておこう。

@ Windows Update 地獄へようこそ

長らく放置してたり真っ新な状態から再インストールした Windows 7 の Windows Update がクソ遅いどころか終わらないってのは有名な話で、知恵袋やらの質問サイトは文字通り阿鼻叫喚地獄となっております。

この終わらない原因については、去年くらいにワイが自分でいろいろ調査した結果

  • クリーンインストール状態のWUA(Windows Update Agent)はもうアップデートサーバ側でサポートされないので、最新版の7.6にする
  • WUA 7.6はそのままだとバグがありCPUとメモリを使い果たして永遠に終わらない上、特にメモリ3G制限のある32bit環境ではクラッシュするので、少なくともKB3138612以降のWUAアップデートパッチを必ず適用する
  • IE11が入ってる環境だとIEの累積パッチで少なくともKB3154070以降が適用されていないとWUA 7.6がまともに動作しないので、最新のIEの累積パッチをあらかじめ適用しておく。
  • そもそもIEのバージョンが何であれ、IEの累積パッチの検証にかかる時間がWindows Updateが遅い原因のひとつなので、IE11でなくても適用しておく

で解決することが判りました、まぁここまでやってもクリーンインストールからだとゆうに200個を超えるパッチが必要なうえに 数回の再起動と整合性エラーによる適用失敗がでてくるので、最新にするまでは丸一日かかりますけどね(しろめ)。

ちなみにワイが自力で解決した後一月くらい経ってからJapan WSUS Support Teamのブログでほぼ同じ内容の記事がでてきて「おせーよ」と膝殴りましたが。

@ ロールアップ更新プログラムの公開

クリーンインストールからWindows Updateをまともに動くようにするだけでもこれだけの手順が必要になる上に、さらに大量のパッチ適用と果てしない再起動で丸一日の作業が必要になるようなパッチ地獄を、さすがのMSもこんなん放置してたら民衆の怒りがヤバいと思ったのか、Service Pack 2だけは死んでも出す気は無いけども

という Windows NT や 2000 以来となる懐かしのロールアップ更新プログラムを公開するようになりました。

また月例パッチの提供方法も改められ、KBごとに個別に配布せずにこちらもロールアップ化されることになりました。

しかしこれ事前適用してもまーだ数十個はパッチあって半日くらいは余裕でかかるんだよね…

@ 企業なんかではどないしてるん?

企業などでシステム管理の経験がある人であれば

というのはご存知かと思います *1

これらのツールは

  • OEMシステムビルダーが自社の販売するPC用におまけソフトやドライバ、修正パッチをプリインストールしたりをリカバリディスクを提供する
  • ボリュームライセンス持ちの企業が自社利用するアプリケーション、修正パッチをプリインストールしたカスタムインストーラを作成し、社員のPCに大量展開する

なんて目的で使われます、まぁ下層SIerだとこういうもの使わず奴隷にまっさらのPC渡して最初の一日ずーっとWindows Updateさせて椅子の前で虚空を眺めてるなんてアホな光景よく目にしますがね...

ただこれドキュメントに目を通すと、システムビルダーおよびボリュームライセンスに含まれる特典の「再イメージング権」が無いとアウトなんですよな。

ですが「再イメージング権」の範囲についてよく調べると

  • テンプレートとなるPCにインストールしてカスタマイズした後に、Sysprep /generalizeで一般化を実行しイメージを作成する
  • そのイメージをテンプレートとなるPCだけでなく、他のPCに対して展開する

シナリオの場合だけであって、インストールDVDに修正パッチを統合してしまうのはこれに含まれないんですな。

規約(PDF)から引用すると

再イメージングとは、1 つの基本イメージから複数のデバイスにソフトウェアをコピーすることです。

とあるしね。

このへんのQAは Is SYSPREP illegal for retail customers?

質問A: もし私がWindows 7 Ultimate Edistionを3ライセンス購入したとして、1台のPCにテンプレートとしてインストールしたものを
sysprepした上で他の残りの2台にそのイメージを展開するってーのは許されないですよね?

質問B: でもリテール版のDVDを"dism.exe"や"oscdimg.exe"(後者はWindows AIKのもの)を使い、自分だけのカスタマイズをしたコピーを作ることは許されますかね?

という質問に対して

A: その通りダメです
B: もちろん、そのシナリオであればdismでパッケージを追加したり削除するのは構いません。

と回答があります。

ちょっとこれだけだと曖昧なので追加の質問もあります。

A: OEM製品の話はしてなくてさ( ;´Д`)
正真正銘リテール版の"Win7 Ultimete"を3箱買って(例えば今アマゾンじゃ269ドル22セントだけど)を
買いました、うちにはボリュームライセンス契約ありません、たった3人ぼっちの法律事務所だから。
そもそも"Ultimate"ってのは"機能全部入り"のはずだよね? でもsysprepで手間を省くのは許されていない、これであってる?

B: いやボリュームライセンスがあればできるのは分かってるんだよ、そうじゃなくてボリュームライセンスが無い場合しちゃダメなのかどうか。
なのでもう一度: 私の考えではDVDイメージを"dism.exe"でカスタマイズするだけなら"再イメージング"には当らない、なぜなら
テンプレートPCへのインストールは実行していないから。よってオフラインでinstall.wimをマウントして、ソフトウェアを追加したり修正パッチを適用してよい。
上に書いた条件でこのシナリオは許されるのか?って質問なんですが。

これに対しての回答も

A: その通りダメです
B: もちろん、そのシナリオであればdismでパッケージを追加したり削除するのは構いません。

あ゛ーこういうオウム返しな回答いかにも技術コミュニティの嫌な感じでほんとアレ、質問者の法律事務所は今後ソフトウェア関係者の訴訟には激辛であたってええわksg

ということでカスタムDVDをテンプレートPCへのインストール無しに作って、カスタムDVDを使い回ししないのであれば問題なしということですな。

@ 次回

Windows インストーラーの構造についての簡単な説明と、実際に修正パッチ統合済のインストールDVDを作成する手順について書きます。

*1:Sysprep + 応答ファイルによる自動化は最近の Windows 10 では obsolete で プロビジョニングパッケージに置き換えられるようですな、今回の話では無関係なので放置。

2017/4/12(Wed)

[Windows] Windows 7 のセキュリティアップデート統合済DVDを作成する (その2)

昨日の続き。

@ 修正パッチのダウンロード

まずサービスパック及び修正パッチをオフライン適用すべく全部ダウンロードします、以下に直接リンクのリストを置いてあります *1

中身はTSV形式なので、ExcelでもEmEditorでもawkでもCSV/TSVの編集に適したエディタで、普段お使いのダウンロードツール用のリストに編集して使ってください。

あるいはPowerShellで書いた ダウンロードスクリプトをご用意しましたので、これをdownload.ps1として保存します。

$config = @{
"x86"="https://bitbucket.org/!api/2.0/snippets/tnozaki/Myk47/master/files/Windows%207(x86).txt";
"x64"="https://bitbucket.org/!api/2.0/snippets/tnozaki/p6oer/master/files/Windows%207(x64).txt";
}
[System.IO.Directory]::SetCurrentDirectory((Get-Location -PSProvider FileSystem).Path)
$webClient = New-Object System.Net.WebClient
$downloadList = [System.IO.Path]::GetTempFileName()
$url = $config[$Args[0]]
$webClient.DownloadFile($url, $downloadList)
Import-CSV -Encoding UTF8 -Delimiter '	' $downloadList | ForEach-Object {
  $url = $_.URL
  $webClient.DownloadFile($url, ([System.Uri]$url).segments[-1])
}
Remove-Item -Force $downloadList

通常は自分で作成したPowerShellスクリプトですら実行は禁止なので、現在開いてるウィンドウだけ制限を緩めます。

PS C:\Users\tnozaki\Download> Set-ExecutionPolicy RemoteSigned -Scope Process

32bit版をダウンロードする場合、引数に"x86"をつけて実行してください。

PS C:\Users\tnozaki\Download> .\download.ps1 x86

64bit版の引数は"x64"で。

PS C:\Users\tnozaki\Download> .\download.ps1 x64

リストについてですが

  • Windows 10へのアップグレード関連のパッチ(KB3035583, KB2952664, KB3021917, KB3123862)
  • テレメトリ関連(KB3068708, KB3075249, KB3080149)

の修正パッチは含まれていません、必要な人はご自分でリストに追加するかインストール後でWindows Updateからどうぞ。

またRDP8.0(KB2592687)も除外してあります、RDP8.1(KB2923545)があれば不要なはずなので。

@ 次回

実際にWindows 7インストールDVDへの修正パッチ統合作業を行います。

*1:最近は Microsoft Update カタログからのダウンロードにIE + Active Xが不要になったので便利になったもんだ。

2017/4/13(Thu)

[Windows] Windows 7 のセキュリティアップデート統合済DVDを作成する (その3)

前回の続き。

@ カスタマイズ元となるインストールDVDの準備

まずWindows 7のインストールDVDを用意します、リテール版やDSP版どちらでもいいです。 プリインストールのOEM版であってもHPやDELLのリカバリDVDはそのままこれから説明する手順でカスタマイズ可能です。

ただしLenovoのリカバリパーテーションおめーはダメだ、Rescue & Recoveryベースなのでとりあえず腹筋でもしてろ(また回を改めて説明します)。

@ サービスパック1適用済のISOファイルを(可能であれば)入手しておく

もしインストールDVDがRTM版(いわゆる無印)の場合、時間の節約にサービスパック1適用済のISOファイルの入手をお勧めします。

有効なWindows 7のシリアルをお持ちであればMSの公式サイト

から入手することができます。

ただしシリアルはリテール版およびDSP版のみに限られます、OEM版のシリアルだと

エラー

指定されたプロダクト キーは、デバイスの製造元によ
ってプレインストールされたソフトウェアのキーである
と思われます。デバイスの製造元に、ソフトウェアの回
復オプションをお問い合わせください。

とエラーになりますのであきらめてどうぞ、時間はかかりますがRTM版から作業を進めましょう。

またリテール版であってもアップグレードエディションの場合、サイトのバグかなんなのかダウンロードの選択肢に

  • フランス語版
  • 韓国語版

しか表示されず、日本語版が選択肢に出てこないトラブルが報告されてます。 特にこれ海賊版を掴まされたという事ではないようで、この場合もあきらめてどうぞ。

@ インストールDVDの中身を書込可能なメディアにコピーする

適当にハードディスクにフォルダ用意してそこにrobocopyでもxcopyでも使ってフォルダ構造を保ったままコピーでもいいんですが、今回はブート可能なUSBメディアを作成しそこを作業環境とします。

まずは最も簡単な方法、先ほどの公式サイトからISOイメージをダウンロードしたのであれば

を使えばウィザードに従うだけであっという間にブート可能なUSBメディアとWindows 7インストール環境が完成します。

もし先ほどのダウンロードできない条件に引っかかってDVDメディアしか手元に無いのであれば、それからISOイメージを作成することも可能です。

などで簡単に作れます。

ただしこれらの手段でISOイメージを作成した場合、どうも一部のメディアでは Windows USB/DVD Download Toolが

無効なISOファイルです

選択したファイルは、有効な ISO ファイルではありません。有効な ISO ファイルを選択して、もう
一度やり直してください。

とド演歌の歌詞みたいなメッセージを出して先に進むことができないケースがあるんですな。

このエラーについてこれ以上の話は、先人の方が調査結果を詳細に書かれていますのでそっち読んでください。

要約すると UDF仕様では Anchor Volume Descriptor Pointers(AVDP)という読み取り開始ポイントは

  1. 256セクタ
  2. 最終セクタ - 256セクタ
  3. 最終セクタ

の3つのうち1は必須、2と3はどちらかに記述する(計2ヶ所)というものらしいです。

そしてWindows USB/DVD Download ToolはファイルがUDFフォーマットかどうかチェックするのにAVDPの有無をチェックしてるのですが、実装がアレで(通常運転)必ず最終セクタにあると信じていてISOイメージの最終2048バイトしか見ていないという事のようです (記事によるとそもそも最終セクタ - 256セクタにも無い規格違反っぽい?)。

ちなみにこの方はISOイメージを修正 *1するツール isoavdpcopy も配布していたようですが現在はリンク切れ、注意深くググれば発見できるんですが道に落ちてるものを拾い食いする趣味はあまりないので以下略、でも.Net 2.0なのでDecompilerでソース読んでみましたが別に怪しくはなかったよ。

@ Windows USB/DVD Download Toolを使わずにブート可能なWindows 7 インストール用のUSBメディアを作成する

実はこっちもそんなに難しい話ではないです、管理者権限でコマンドプロンプトを起動して

  • USBメモリをNTFSでフォーマットする(USBメモリはF:ドライブとする)
    • FORMATコマンドを使う場合
      C:\WINDOWS\system32> format F: /fs:ntfs /q
      新しいディスクをドライブ F: に挿入してください
      準備ができたら Enter キーを押してください...
      ファイル システムの種類は NTFS です。
      クイック フォーマットしています  28.9 GB
      ボリューム ラベルを入力してください。
      (半角で 32 文字、全角で 16 文字以内)
      必要なければ、Enter キーを押してください:
      ファイル システム構造を作成します。
      フォーマットは完了しました。
            28.9 GB: 全ディスク領域
            28.8 GB: 使用可能領域
      C:\WINDOWS\system32>
      
    • DISKPARTコマンドを使う場合
      C:\WINDOWS\system32> diskpart
      
      Microsoft DiskPart バージョン 10.0.15063.0
      
      Copyright (C) Microsoft Corporation.
      コンピューター: X201
      
      DISKPART> list volume
      
        Volume ###  Ltr Label        Fs    Type        Size     Status     Info
        ----------  --- -----------  ----  ----------  -------  ---------  --------
        Volume 0         SYSTEM_DRV   NTFS   Partition   1199 MB  正常         システム
        Volume 1     C   Windows7_OS  NTFS   Partition    920 GB  正常         ブート
        Volume 2     Q   Lenovo_Reco  NTFS   Partition      9 GB  正常
        Volume 3     F                NTFS   リムーバブル        28 GB  正常
      
      DISKPART> select volume 3
      
      ボリューム 3 が選択されました。
      
      DISKPART> format fs=ntfs quick
      
        100% 完了しました
      
      DiskPart は、ボリュームのフォーマットを完了しました。
      
      DISKPART>
      
  • パーテーションをアクティブにする
    DISKPART> list disk
    
      ディスク      状態           サイズ   空き   ダイナ GPT
      ###                                          ミック
      ------------  -------------  -------  -------  ---  ---
      ディスク 0    オンライン           946 GB      0 B
      ディスク 1    オンライン            28 GB      0 B
    
    DISKPART> select disk 1
    
    ディスク 1 が選択されました。
    
    DISKPART> list partition
    
      Partition ###  Type                Size     Offset
      -------------  ------------------  -------  -------
      Partition 1    プライマリ               28 GB  1024 KB
    
    DISKPART> select partition 1
    
    パーティション 1 が選択されました。
    
    DISKPART> active
    
    DiskPart は現在のパーティションをアクティブとしてマークしました。
    
    DISKPART>exit
    DiskPart を終了しています...
    C:\WINDOWS\system32>
    
  • インストールDVDに含まれるbootsect.exeで、USBメモリのブートセクタを書き換える(インストールDVDはE:ドライブとする)
    C:\WINDOWS\system32> E:
    E:\> dir
    
    
        ディレクトリ: E:\
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d-r---       2009/07/15      1:59                boot
    d-r---       2009/07/15      1:59                efi
    d-r---       2009/07/15      1:59                sources
    d-r---       2009/07/15      1:59                support
    d-r---       2009/07/15      1:59                upgrade
    --r---       2009/07/15      1:59            122 autorun.inf
    --r---       2009/07/15      1:59         383562 bootmgr
    --r---       2009/07/15      1:59         667712 bootmgr.efi
    --r---       2009/07/15      1:59         106760 setup.exe
    
    
    E:\> cd boot
    E:\boot> dir
    
    
        ディレクトリ: E:\boot
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d-r---       2009/07/15      1:59                fonts
    d-r---       2009/07/15      1:59                ja-jp
    --r---       2009/07/15      1:59         262144 bcd
    --r---       2009/07/15      1:59        3170304 boot.sdi
    --r---       2009/07/15      1:59           1024 bootfix.bin
    --r---       2009/07/15      1:59         112640 bootsect.exe
    --r---       2009/07/15      1:59           4096 etfsboot.com
    --r---       2009/07/15      1:59         607296 memtest.efi
    --r---       2009/07/15      1:59         485440 memtest.exe
    
    
    E:\boot> bootsect /NT60 F:
    対象のボリュームは BOOTMGR 互換のブートコードで更新されます。
    
    F: (\\?\Volume{c9d7356c-e7a7-11e5-8e78-70f39545fa73})
    
        NTFS ファイルシステムのブートコードを正常に更新しました。
    
    すべての対象ボリュームでブートコードが正常に更新されました。
    E:\boot>
    
  • インストールDVDの内容をUSBメモリにコピーする
    E:\boot> cd ..
    E:\> xcopy E:\ F:\ /s /e
    ...
    874 個のファイルをコピーしました
    E:\>
    

とやるだけなんですよな、コマンドプロンプトに慣れてさえいればWindows USB/DVD Download Tool無くても作れます。

@ 次回

さてWindows 7 インストーラをブート可能なUSBメディア上に作成しましたので、次回はいよいよ修正パッチの統合の手順についてです。

*1:別の場所にあるADVPを探してこれを最終セクタに書き込んでツールを騙すみたいな感じのツール

2017/4/15(Sat)

[音楽] Jamiroquai/Space Cowboy(Demo Version)

Toby Smithが亡くなられたそうで、若いのにガンで闘病してたようで残念だ。

Jamiroquai時代のToby SmithといえばFender Rhodesサウンドをリバイバルさせた印象なんだけど、当時バイトしてた 音楽スタジオの倉庫に同 Suitcase 73が放置状態でオーナー処分したがってて、同期のJamiroquai好きな友人連れてきて 引き取ったのを思い出すね、日産マーチの後部座席に無理矢理積み込んでそのまま夜の江ノ島で遊んで帰った記憶。 ちなみに15kという破格の値段で買ったんだけど、この後からリバイバルで中古価格が跳ね上がって元のオーナーが慌てて引取にきたけど時すでに遅し。

自分は当時JamiroquaiよりもJames Taylor Quartetなんかのオルガンジャズファンクの方が好きであまり興味なかったんだよな。 まぁどっちみち置き場所無かったしなぁ、とはいえその倉庫にハモンドが放置されてたら考えたけど(ぉ

ちな現在のワイは HOHNER Pianet-T なぞ使っております、これはこれでチープで良いよ。

ちなみにその持ち帰ったSuitcase 73の現物はこのアルバムで使われております(ステマ)

2017/4/17(Mon)

[Windows] Windows 7 のセキュリティアップデート統合済DVDを作成する (その3.5)

前々回の補足、というか(その4)書いてる途中でWindows 10が勝手にスリープになって復帰うさせたら永遠に終わらないディスクアクセスと真っ暗な画面で死んでしまい、書いてた記事が全部消えてしまったのでな…

@ KB番号から修正パッチのダウンロード先を探す方法

Windows 10が出て唯一良かったことは、ブラウザの標準がEdgeになったおかげで Microsoft Update カタログの操作にActiveXが不要になったので他社製ブラウザはもちろん、スクリプトでスクレイピングしてダウンロードリンクを探すのが簡単になったことですね。

昔はKBからのリンクも記事からダウンロードセンターへのリンク方法もまちまちだったし、ダウンロードセンターからのダウンロード方法もまちまちだったりで非常にクソめんどくさかったんだけど。

以下はクッソ雑に書いたPowerShellでWindows 7用のKB番号から修正パッチのダウンロード先をスクレイピングするツールです、そもそもx86とx64の区別が製品欄にはなくタイトルの中にx64が含まれるかからまずは推察するしかないというクソなUIだし、全てのケースで上手くいくかは確認してませんけどNE。

Param(
[parameter(Mandatory)][string]$arch,
[parameter(Mandatory)][string]$kbnumber
)
$search = Invoke-WebRequest -Uri ("http://www.catalog.update.microsoft.com/Search.aspx?q={0}" -F $kbnumber) -Headers @{"Accept-Language"="ja,en-US;q=0.8,en;q=0.6"}
$document = $search.ParsedHtml
$table = $document.GetElementById('ctl00_catalogBody_updateMatches')
foreach ($row in $table.GetElementsByTagName("TR")) {
  $cols = $row.GetElementsByTagName("TD");
  $title = $cols[1].InnerText
  $os = $cols[2].InnerText.Trim() -split ","
  if ($os -contains "Windows 7") {
    if ($title -match "x64") {
      if ($arch -eq "x86") {
        continue
      }
    } else {
      if ($arch -eq "x64") {
        continue
      }
    }
    $download = $cols[7].GetElementsByTagName("INPUT")[0];
    $id = $download.id
    $updateIDs = ConvertTo-Json -Compress @(@{
      "size"=0;
      "language"="";
      "uidInfo"=$id;
      "updateID"=$id;
    })
    $form = @{
      "portNumber"=$null;
      "serverName"=$null;
      "sku"=$null;
      "ssl"=$null;
      "updateIDs"=$updateIDs;
      "updateIDsBlockedForImport"=$null;
      "contentImport"=$null;
      "version"=$null;
      "wsusApiPresent"=$null;
    }
    $list = [System.IO.Path]::GetTempFileName()
    Invoke-RestMethod -Uri "http://www.catalog.update.microsoft.com/DownloadDialog.aspx" -Method POST -Body $form -OutFile $list -Headers @{"Accept-Language"="ja,en-US;q=0.8,en;q=0.6"}
    Get-Content -Encoding UTF8 $list | ForEach-Object {
      if ($_ -Match "^downloadInformation\[\d+\]\.files\[\d+\]\.url\s*=\s*'(.+)';$") {
        Write-Output ("{0}`t{1}" -F $kbnumber, $Matches[1])
      }
    }
    Remove-Item -Force $list
    break
  }
}

いやしかし自分いつもCygwinでそれが使えない時はWSH/JScriptだったんだけど、PowerShellにも慣れておこうと思って書いてるんだが、ほんと気持ち悪い言語だよなこれ蕁麻疹でそう。

言語思想として Invoke-{WebRequest,RestMethod}の戻り値のHtmlWebResponseObjectからDOM APIでテーブル引っこ抜いたんだし、Select-ObjectやらWhere使ってRDB+SQLみたいな処理かけるべきだと思うんだけど、使えないっぽいんだよなー

2017/4/18(Tue)

[Windows] Windows 7 のセキュリティアップデート統合済DVDを作成する (その3.51)

前回KB番号からダウンロードリンクを探すスクレイピングを紹介しましたが、そもそも必要なKB番号をリストアップするにはどうすればよいか。

そもそも論としてまともな企業ならWindows Server Update Services(WSUS)を建ててる(クソ企業は知らん)わけでそこから修正パッチ配信すればいいわけですが、今回の記事はあくまで個人であって…あっ個人でもボリュームライセンスとWindows Serverを保有してWSUSも構築済みたいなお客様、興奮せずにお静かにお願いしますお帰りは こちらです。

どっかに必要なパッチ一覧が公式でまとまってりゃいいんですが、そんものは無さそうなのでシステムから情報を引っこ抜くしか無さそうです。

@ Windows Management Instrumentation(WMI)を使う

すでに最新の状態に更新されてるWindows 7マシンが手元にあるのなら

を使うことで「現在適用済」の修正パッチ一覧がとれます。

ちなみにWMIはWindowsマシンをネットワーク越しに情報収集したりできる、まぁSNMPの高機能版みたいなもの。

実際の叩き方は

  • wmicコマンドを叩く*1
    C:\Users\tnozaki> wmic qfe get HotFixID
    HotFixID
    KB976902
    KB976932
    ...
    
  • PowerShell経由でWMIを利用する
    PS C:\Users\tnozaki> Get-WmiObject -Class "win32_quickfixengineering" | Select-Object -Property "HotfixID"
    
    HotfixID 
    -------- 
    KB976902
    KB976932
    ...
    

でおk。

ただし.Net Framework 4系に対する修正パッチ(KB2901983,KB3102433など)のKB番号は別製品扱いでここには出ません、そして

  • KB2454826 … SP1(KB976932)を適用する前に必要な更新
  • KB2965788 … MS14-030 リモート デスクトップの脆弱性により改ざんが起こる (2969259)

がなぜか出てこない感じ、あと大元のKB番号に対して修正パッチが対象製品によってさらに別のKBが降られてるようなのもあります。

  • KB976902 … SP1(KB976932)と一緒にインストールされる
  • KB4014565 … .Net Framework 3.5に対するKB4014981の修正パッチ

なもんでどうやら完全自動化するのは難しそうな感じっすね、それに修正パッチには依存関係があって

  • Aが適用された後に
  • Bを適用する
  • さもなくば死ぬ

みたいなのもあるんですが、それはここからだと読みとれなかったりもします。

@ Windows Update履歴から取得する

最新状態のWindows 7が無い場合はもうこれWindows Updateに問い合わせるしかないわけです、作業としては

  • クリーンインストールしたばかりのWindows 7環境から最新にまで一気にアップデートする
  • Windows Updateの履歴からパッチ一覧を取得する

で良さそうです、まぁそれなら最新にした後にさっきのWMIでどうこうすればいいんですがこっちの方法だと 依存関係のあるパッチの適用順もわかりやすいわけです(ちょっと動機として弱いナ…)。

Windows Updateの更新履歴は

  • コントロールパネル → システムとセキュリティ → 更新履歴の表示

ででてくるんですが、これ一括してファイルに出力とかボタンのひとつも用意してないのほんと無能ですわな。 まぁWindows XP時代は印刷ボタンとかあってそれもまた「印刷かよ…」と思ったんですが。

よく訓練されたWindows使いであればComponent Object Model(COM)経由でWindows Updateをスクリプトで操作できます、ワイがgdgd記事書くより本家TechNetの記事読んだ方がいいかと。

なんやねんこのタイトル…なお記事が書かれたのが干支が一回りする前の2005年で忌まわしきPowerShellが生まれる前ですので、VBScriptというより呪われた悲惨な言語で書かれてますが以下略。

$session = New-Object -ComObject "Microsoft.Update.Session"
$searcher = $session.CreateUpdateSearcher()
$searcher.QueryHistory(0, $searcher.GetTotalHistoryCount()) | Select-Object Title | Where-Object {$_.Title -match "(KB\d+)"} | ForEach-Object {
  Write-Output $Matches[1]
}

うーんKB番号はタイトルから切り出さないと取れないちゅー無能の極みなインタフェースやな…

それとこれの出力からはWindows Defender(KB915597)とか悪意のあるソフトウェアの削除ツール(KB890830)、それとドライバーの更新関係は除く必要があるので注意。

ちなみに必ずクリーンインストールからはじめる必要があります、Windows Updateの履歴って %SYSTEMROOT%\SoftwareDistribution(通常はC:\Windows\SoftwareDistribution)以下にあるんですが

  • トラブルがあってバックアップ(完全)から、あるいはシステムの復元ポイントを使ってリカバリした経験がある
  • Windows Updateが進まないので更新準備ツールなるものを使った経験がある
  • そもそもWindows Updateが重くなるので定期的に履歴を消してる、俺はパソコンには詳しいんだな人

ようなケースだと履歴が全部消えてたり壊れてたりもするのでな…使えないのですよ。

めんどいから仮想環境にぶち込んでアクチ猶予期間を利用して作業したくなりますが、これ過去回で説明した「再イメージ権」の侵害にあたるので以下略。

@ 直接Windows Updateサーバに問い合わせる

さっきのCOM経由でのスクリプトによるWindows Update操作ですが、直接更新ファイルの検索クエリをアップデートサーバに投げて結果を貰うこともできます。

$session = New-Object -ComObject "Microsoft.Update.Session"
$searcher = $session.CreateUpdateSearcher()
$result = $searcher.Search("Type='Software'")
$updates = $result.Updates
for ($i = 0; $i -lt $updates.Count; $i++) {
  if ($updates.Item($i).Title -Match "(KB\d+)") {
    Write-Output $Matches[1]
  }
}

履歴関係なくサービスパックのレベルや追加ソフトに合わせた結果が帰ってくるのでこっちの方が役立ちそうなんだけど、それでも必要なはずのパッチがだいぶ足りてない感じなので、こっちのやり方はあまり追求しないでおこう…

深入りしたい人は

読んでどうぞ。

@ 次回

次こそ本当にインストールDVDへの修正パッチ統合作業について書く。

*1:なおUTF-16で出力しやがるので以下略

2017/4/19(Wed)

[Windows] Windows 7 のセキュリティアップデート統合済DVDを作成する (そのNT4)

ちょっとした歴史のお勉強、なぜ本題から先に書かないかのか?書けないのか?書きたくないのか?書く度胸がないのか?( 椎野四段活用)

@ Windows 2000/XPまでのサービスパック及び修正パッチ

この頃の修正パッチはHotfix Packageと呼ばれていました、特徴としては

  • 実行可能形式(つまり.exe)
  • といってもいわゆる自己伸長形式の圧縮書庫
  • 実行するとCやDドライブ直下に16進数っぽい一時フォルダを作成しそこに書庫内のファイルを展開する
  • 書庫内には修正ファイル以外に次のファイルが含まれる
    • update\<KB番号>.cat … セキュリティカタログ(改竄検知の為のデジタル署名)
    • update\update.exe … インストーラー、正式名はWindows Service Pack Setup
    • update\update.inf … セットアップ情報、↑が実行するスクリプトであり、条件分岐やファイル置換やレジストリ編集などが可能
    • update\update.ver … 置換修正ファイルのチェックサム(MD5など)
  • Hotfix Packageは書庫の展開が終ったら渡されたスイッチをupdate.exeに引き継いで実行する
  • update.exeは次の機能を持つ
    • スイッチを指定しない場合、実行中のOSにオンラインで修正ファイルを適用する
    • /integrate:<完全なパス>スイッチをつけて実行した場合、<完全なパス>以下のインストールイメージにオフラインで修正ファイルを統合する

ちゅー感じ。

なもんで修正パッチ適用済のインストールCDを作成するにはインストーラーの /integrate スイッチ機能(通称Slipstream)を使うだけで可能だったのです、具体的にな作業としては

C:\Users\tnozaki> mkdir C:\installer
C:\Users\tnozaki> xcopy E:\ C:\installer /s /e
C:\Users\tnozaki> WindowsServer2003.WindowsXP-KB914961-SP2-x64-JPN.exe /integrate:"C:\installer"
…

みたいな感じでインストールCDの内容物をコピーし修正パッチの数だけSlipstreamを実行すればよかったのよね。

またこのSlipstreamの機能を持たなかったりバグってたり *1適用順によって問題が発生する修正パッチについては、インストールCDの内容物以下にある

  • <CPUアーキテクチャ>\SVCPACK.inf

というセットアップ情報ファイルの

[SetupHotfixesToRun]
KB911164.exe /q /n /z /b:SP1GDR

セクションにスクリプトを書くことでインストールプロセスの最後に実行させることができます、修正パッチは

[SetupData]
CatalogSubDir="\AMD64\svcpack"

セクションで指定されてるフォルダ以下に置きます。

さらには最初のログインのタイミングでも修正パッチを適用することも可能、これはさっきのSVCPACK.infのSetupHotfixesToRunセクション実行時にレジストリの

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

というキーに実行したい処理を登録します。

@ECHO OFF
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
SET SVCPACK=%~dp0
%SVCPACK%REG.EXE ADD %KEY%\901 /VE /D "DirectX End-User Runtimes" /F
%SVCPACK%REG.EXE ADD %KEY%\901 /V 1 /D "%SVCPACK%DIRECTX_AUG2008_REDIST\DXSETUP.EXE /SILENT" /F
...

えーっとREGコマンドはリソースキットあたりから持ってくるんだっけか…もう記憶が…

こうして完成した修正パッチ統合済のインストールイメージをCD-R/DVD-Rなどに焼くわけですが

  • ブータブルCD/DVDの作成に必要なブートカタログは提供されてない
  • ISOイメージを作成するためのツールは提供されてない

ので、サードパーティー製のツールにお世話になります。

前者はCygwinあたり入れてdd(1)コマンドで切り出せますが、どこをどれだけ切り出すかはcd9660やEl Torio形式の知識が必要になるので

  • BBIE - Bart's Boot Image Extractor v1.0
  • という簡単ツールでやってる人が多かったもよう、なおすでに一次配布元は消滅してるので道に落ちてるものを拾い喰いする時は以下略。

    Cygwinのdd(1)で切り出すなら ここでも読んでちょうだい。

    市販のCD-R/DVD-R/BD-Rライターのソフトは当時ブータブルメディアなんて作れないウンコばっかだったので、Cygwin向けにビルドされた

    に含まれるmkisofs(1)を使ってました *2

    $ mkisofs -b <ブートカタログ> -hide <ブートカタログ> -hide-joliet <ブートカタログ> -no-emul-boot -J -N -V "ボリューム名" -o <ISOイメージ名> <インストーラー展開先>
    

    とか実行すればおk

    これらの処理は自分でバッチスクリプト書いても簡単にできるレベルなんですが、よく判ってない素人でもGUIでポチポチすれば作成できるツールもいくつか存在しました。

    あたりが有名どころ、長々とグダグダ書いた説明なんか読まずにこれ使えば良かったんや!

    ところがですね、Vista以降はインストールDVDの内容物も修正パッチの形式も全然別物になってしまいましてな、これらのツールは全部使い物にならなくなってしまったんです。

    @ 次回

    Windows Vista以降はどうしたらいいのかを書く予定。

    *1:Windows2000の頃はかなりの数がバグっててほとんどSetupHotfixesToRunで処理する必要がありましたね…
    *2:最近のCygwinには公式にmkisofs(1)が含まれてますが実体はgenisoimage(1)なんよね、前者は後者のwrapperとして提供されてます。

    2017/4/21(Fri)

    [旅行] 群馬県立森林公園 さくらの里

    一昨年以来なんだけど 群馬県立森林公園 さくらの里に花見に行ってきたよ、妙義山の奇岩の麓に咲き乱れるソメイヨシノ、オオヤマザクラ、ヤエベニはいいぞ。

    管理センター周辺のソメイヨシノは散りはじめで今週末がラストチャンス、土日には盛大な桜吹雪を散らしてシーズン終了と思われます。 でもソメイヨシノが終っても月末からGWにかけては寒山なんかの八重桜がまた見頃を迎えるので5月上旬一杯は楽しめます。 5/3には妙義山下仁田さくら祭というのをやってるそうです。

    ただしメチャクチャ交通の便が悪い所なのよね、自家用車持ってるブルジョアならいいけど。 はるか昔に駐車場で腐らせてたインテグラを廃車にしたプアーとしましてはなかなか行くのが厳しい場所です。

    さくらの里の最寄駅は上信電鉄の下仁田駅なんだけど、ワイの最寄り駅の大船駅から行くとすると 東京上野ラインの始発5:09に乗れば下仁田駅には9:23に到着するんですが、妙義山登山口(下仁田側)を通るバス(しもにたバス中之岳線)は9:20発ですでに出てしまった後で 次のバスは11:40まで無いのよね、駅前のタクシー使って駐車場まで4,000円前後かかってしまいます。

    このバスに乗るためにはプラス2,990円で新幹線(とき301号)で加速キメれば8:15には着くんだけど、タクシー料金との差がわずかな上に なーんもない駅前でバス待ちに一時間以上潰さないとならんのが困りもの。

    これ出発地が横浜駅なら京浜東北線の始発4:22に乗って上野から高崎線乗れば特急料金無しで8:15分着なんだよな、やはり横浜以南には人権は無い。

    あとバスにはもういっちょ問題あります、料金は200円で安いのですが中村停留所で降りてすぐの妙義山登山口(下仁田側)からさくらの里までは1時間弱の登り路なので、体力の無い人は厳しいです。

    なので今回は高崎から上信電鉄乗って下仁田駅に出るのではなく、信越本線に乗換で松井田駅に出てみました。 松井田からさくらの里まではタクシー以外足はなくやっぱり4,000円弱かかってしまうんですが、新幹線使わずとも8:26には松井田駅には到着できるので1時間も時間的余裕があるという。 なのでこのコースが一番コスパいいかな、なおタクシーは下仁田駅とは違って駅前に常駐してないので事前に予約しておいた方がスムーズにいきます。

    ただし管理センターには9時には到着してしまうので、この時間だと妙義山側は順光で綺麗なんですが 管理センターにある展望台のハイライトである金鶏山をバックにしたソメイヨシノはちょうど逆光の時間帯なんですな。

    時刻と光線の関係からするとやっぱり下仁田側からさくらの里の管理センターまで山昇ってくルートの方がいいんだけどね。 まぁ体力あれば一度下まで降りてまた登ってりゃいいんですが。

    帰りはリッチマンならまた松井田駅からタクシー迎車すればいいのですが、ワイはプアーなもんで(念押し)財布に優しく今度こそしもにたバス中之岳線に乗って帰ります。 さっきも書いた通りさくらの里からバス停までは1時間くらい歩かないとならないのと、最終バスの時刻が15:49(土日は15:46)とクソ速いので15:00前には下山をはじめないとならんのが難点。 まぁ山間部だし15:00過ぎたら光線の具合的に写真撮影も切り上げ時でもあるのでええわもう。ちなみにこの最終バスはスクールバス扱いなので無料です。

    この最終バスは16:08に下仁田駅着なんですが、また上信電鉄との連絡が悪くて16:00発高崎行は出てしまった後で、次の電車16:58分まで待たなければならんのも難点やね。 朝も3分差だったり帰りも8分差だったりと連絡が悪いというか、観光客には地元民の足は絶対に使わせないゾという意図を感じる…なお地元民もバスは使ってないもようでガラガラです。

    別解としてさくらの里から妙義神社の方まで出れれば乗り合いタクシー(菅原線)の最終が18:06まであるんですが、さくらの里から妙義神社までは 中間道(関東ふれあいの道)の一本杉コースを通るちょっとした登山らしく時間が読めないのと、途中の金鶏橋が去年の台風で崩落中で通行できないということで諦めた。 一本杉コースを避けた場合は金鶏山をぐるっと周る県道196号をひたすら歩く感じっぽい、この道もさくらの里を一望に見下ろせていいんだけどね。

    紅葉シーズンも良いそうなので今度は秋に行きたいんだけど、ここ数年の紅葉狩りは甲府の昇仙峡でな…

    2017/4/22(Sat)

    [音楽] MUTEMATH/Changes

    完全に見過ごしてたんだけどMUTEMATHって最新アルバム「Vitals」の リミックスアルバムを半年前に出してたのね、しかも新曲入り。

    配信オンリーなので全く気付かんかった、つーかyoutubeの公式チャンネルでろくに宣伝しなかったあたりメリケンでもyoutubeって日本のニコ動並みの腐乱死体なんじゃねぇの、まぁ残念でも無ければ当然なんだが。お勧めにいくら興味ない押してもクソみたいなチューバー動画チャンネルばっか出してきやがって。

    しかしMUTEMATHは偶然にyoutubeで観たライブのヤバさでファンになったので、プロモーションの場としてのyoutube投げ捨ててしまったとしたらそれは感慨深いものがある。

    たしか2007年くらいに友人から音出るオモチャや楽器を改造して変な音出すCircuit Bendingつー遊びが流行ってるときいて、検索したら関連動画かなんかにMUTEMATHのライブ映像が出てきたんだっけかな。またリアルタイムの音楽を聴いたりライブに足を運ぶようにになったきっかけでもある。

    そういえば「Odd Soul」ツアーの時には突然 ニコ生でスタジオライブまでやってたし、動画サイトでのプロモーションを重視してた感があったけど、力入れてたのは本人たちでなく当時契約してたWarnerなんかねぇ。

    とにかくMUTEMATHはライブが凄いバンドなんだけど、前作「Odd Soul」の完成が遅れるわメジャー契約切れてインディーに戻ったからか、新作「Vitals」出てから2年経っても全然来日しないよな。ホステスエンタあたり頑張ってくれんもんだろうか。いや声はかけてるけど来たがらないとか条件で折り合わないならしゃーないんだけども。

    そもそも洋楽アーティストが来日するのは日本国内でのCD販売のプロモーションなわけだけど、アルバム「Vitals」も日本発売がぜんぜんアナウンス無いから輸入盤で買ってしまったよ、結局半年遅れで出たけど。

    まぁ音ゲーかアニメの主題歌しか売れないし日本はもはや市場じゃないからなぁ。一部の洋楽好きはフジロックやらサマソニでフェスでいつものUKあたりのロートル共を出しときゃ満足だろうし。

    2017/4/23(Sun)

    [セキュリティ] Googleアカウントのバックアップ確認コード

    先日スマホ(Nexus5)を置き忘れてしまったんですよな。

    こいつGoogle認証アプリを入れて複数要素認証のトークン生成に使ってた端末なので、気づいて即

    と雄叫びを上げながらバックアップコード使ってあらゆるサービスからMC5ならぬNexus5をキックアウトしないとならん羽目になってもうグッタリでございます。

    ところが数あるサービスの中、なぜかGoogleアカウントだけ認証アプリのコード入力を求められた時に

    ちゅーよくわからん状態。

    いやーこれ乗っ取り済みでこっちがキックアウトされてんのかと思ったんだけど、そもそもロックにPIN4桁使わずクッソ長いパスコード毎回打ち込んでるパラノイアだし、その可能性はまず無いよなぁと。

    結局「このマシンは頻繁にログインするから2段階認証をスキップ云々」なガバガバ設定のマシンが1台あったのでそれで助かったんだけど、これもWindows 10 Creator's Updateがここ最近頻繁にクラッシュするせいで、Chromeのプロファイルが壊れてたから昔のバックアップに戻したりで大変だった…

    そんで活動履歴みたけど、紛失する直前までのワイのログしか残ってないし、やっぱりGoogleアカウント側がおかしかったんじゃないのかなと。

    2016年3月頃に生成したバックアップコードは以下のような書式で、8桁(3+2+3形式)なんだよね。

    バックアップ確認コード
    <アカウント>@gmail.com
    
    1. XXX XX XXX          6. XXX XX XXX
    2. XXX XX XXX          7. XXX XX XXX
    3. XXX XX XXX          8. XXX XX XXX
    4. XXX XX XXX          9. XXX XX XXX
    5. XXX XX XXX         10. XXX XX XXX
    
    日付: CCYY/MM/DD hh:mm:ss
    
    バックアップ コードをすべて使用してしまった場合は、次の URL で新しいコードを生成してください:
    https://www.google.com/accounts/SmsAuthConfig
    最新のセットのバックアップ コードのみが使用できます。
    
    コードはすぐに取り出せる場所に保管してください。
    各コードは 1 回のみ使用できます。
    

    ところが今改めて再作成したら

    バックアップ コードの保存
    バックアップ コードはすぐに使える状態で安全な場所に保管しておいてください。
    
    1. XXXX XXXX		 6. XXXX XXXX
    2. XXXX XXXX		 7. XXXX XXXX
    3. XXXX XXXX		 8. XXXX XXXX
    4. XXXX XXXX		 9. XXXX XXXX
    5. XXXX XXXX		10. XXXX XXXX
    
    (<アカウント>@gmail.com)
    
    * それぞれのバックアップ コードは 1 回しか使用しません。
    * さらに必要な場合は https://g.co/2sv をご覧ください
    * コードの生成日: CCYY/MM/DD
    

    と、同じ8桁なんだけど4+4形式に代わってて、これを保存したら今度はちゃんと「別の方法でログインを」するで「8 桁のバックアップ コードのいずれかを入力する」が候補に出てくるようになった。

    もしかすると互換性のない方法に代わって古い形式は無効にされたんですかね…コワイコワイ。

    結論、定期的にバックアップコードが使えるか確認しとけですな、忘れがちだけどもファイルバックアップからリカバリができるか定期的に確認しておけと一緒。

    2017/4/26(Wed)

    [Mobile Phone] Nexus5見つかった

    置いた場所がさっぱり思い出せなくて俺まで認知症かと思ったんだけど、やっぱ家の中にあった。 さすがに情報機器をお外に置き忘れるほど耄碌しとらんって…

    しかしNexus5(2014年2月発売)も3年ちょい経って

    とゴミになりつつあるんだけど

    ということでもう二度とGoogle端末なんぞ買わねえよという気分なんですが、そもそもAndroid操作性ksだしな。

    同じ時期に買ったiPhone5s(2013年9月発売)にはまだ最新のiOS10.3.1が降ってきるしまだしばらくはいけそうなんだけど、とはいえこいつも

    とか問題ありありだしな、そもそも故障も多くこの3年間で

    という羽目になってて、もう二度とクソサポートのApple端末なんぞ買わねえよという気分にもなっている。

    残るはWindows Phoneか、IS12T使ってて気に入ってたんだがあれも7.8→8のアプデがキャンセルでサポートが3年ちょいで終わった上にその後は長いことおま国だったしな。

    ということで新しい端末買う気も無いのでもう暫くはNexus5使うかなんだけど

    という2択はどうしたもんかね。

    とりあえずいくつかのカスROMは試してみた結果

    しかしこの手のカスROMって細かい不具合がストレスで端末壁に投げつけたくなるだけだから金の力で解決(新端末購入)しようぜと、Android4系(Kitkat)をMOTOROLA PHOTON(ISW11M)やhtc Evo 3D(ISW12HT)に入れた時に悟ったはずなんだが。 もはや金のパワーは失われておるし仮にあっても欲しい端末が無い。

    2017/4/27(Thu)

    [Windows] Windows 7 のセキュリティアップデート統合済DVDを作成する (その2000)

    ちょっと間が空いたけど 前回の続き、いつもの通り脱線しまくりでいつ本線に戻るのかそしてちゃんと最後まで書くかは知らん。

    @ Windows Vista以降のサービスパック及び修正パッチ

    これまでのHotfix Packageに代わり、Microsoft Software Update Package(MSU)という新しい方法に切り替わりました。

    拡張子.msu をダブルクリックすると修正パッチの適用がはじまりますが、これは実行可能形式というわけではなくwusa.exeつまり

    と関連付けられているだけで、中身はただのCAB形式(Micorsoft Cabinet Format)のアーカイブです。

    試しにWindows6.1-KB2454826-v2-x64.msuをexpandコマンドで伸長してみましょう。

    D:\>mkdir KB2454826
    D:\>expand -F:* Windows6.1-KB2454826-v2-x64.msu KB2454826
    Microsoft (R) File Expansion Utility  Version 6.1.7600.16385
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    ...
    
    ファイルの解凍が完了しました...
    合計 4 ファイル
    

    「解凍」なら「圧縮」じゃなくて「冷凍」じゃねちゅークッソ古いネタでキャッキャしたいご老体はfjへどうぞ。

    ということで.msuの中に入ってたのは

    • Windows6.1-KB2454826-v2-x64-pkgProperties.txt … Windows Update メタデータ
    • Windows6.1-KB2454826-v2-x64.cab … パッケージ本体
    • Windows6.1-KB2454826-v2-x64.xml … 無人インストール応答ファイル
    • WSUSSCAN.cab … オフライン更新時のスキャン定義ファイル

    という4つのファイルです。

    @ Windows Update メタデータ

    このパッケージに関する情報が書かれたファイルです。

     ApplicabilityInfo="Windows 7.0 Client;Windows 7.0 Server Core;Windows 7.0 
     Embedded;Windows 7.0 Server;"
     Applies to="Windows 6.1"
     Build Date="2011/01/26"
     Company="Microsoft Corporation"
     File Version="2"
     Installation Type="FULL"
     Installer Engine="Component Based Servicing - WUSA.exe"
     Installer Version="6.0.0.0"
     KB Article Number="2454826"
     Language="ALL"
     Package Type="Update"
     Processor Architecture="amd64"
     Product Name="Windows 6.1"
     Support Link="http://support.microsoft.com?kbid=2454826"
    

    という情報が書かれています。

    このうち

    • Product Name … 製品名
    • KB Article Number … KB番号(その詳細についてはSupport LinkにあるURLを参照)
    • File Version … 改定番号
    • Processor Architecture … CPUアーキテクチャ
    • Language … 言語

    は連結するとパッケージのファイル名になりますな。

    <製品名>-<KB番号>-v<改定番号>-<CPUアーキテクチャ>-<言語>.msu
    

    なお改定番号が1、言語がALLの場合はそれぞれファイル名では省略される命名規約っぽい。

    また製品名と被る部分がありますが

    • ApplicabilityInfo … 適用対象となる(製品名より詳細な)OSとそのエディションの名称、サービスパックの有無など
    • Applies to … 適用対象のWindowsバージョン

    という項目もあり、インストーラーがより厳密にチェックすることができます(それでも簡易チェックね、インストール時にはスキャン定義ファイルを使ってもっと厳密にやります)。

    パッケージには用途に応じて

    • FeaturePack … 新機能
    • Foundation … Windowsの機能の有効化または無効化
    • Hotfix … 重大な更新
    • LanguagePack … 言語パック
    • LocalPack … 特定の地域だけに提供される機能
    • Product … エディション(Home{Basic,Premium}/Professional/Ultimate)それぞれ固有機能
    • SecurityUpdate … セキュリティの更新
    • ServicePack … サービスパック
    • Update … 更新

    という分類があるのですが、これはPackage Typeとして記載されています。

    そして最後はインストーラーについてです。

    • Installation Type="FULL"
    • Installer Engine="Component Based Servicing - WUSA.exe"
    • Installer Version="6.0.0.0"

    Installer Engineには

    など他にもありますが、ここではWUSAのバージョン6.0.0.0を使って「完全インストール(FULL)」を実施するという情報が書かれています。

    Component Based Servicingとは何ぞやについてはまたいずれ。

    @ 無人インストール応答ファイルとパッケージ本体

    無人インストール応答ファイルとは何ぞやというと、これは元々Windows XPの時代から存在する

    において、本来ならユーザーがインストーラーと対話型で選択や入力をしながら行っていく設定内容(例えばコンピューター名やシリアル番号など)を、事前に作ったunattend.xmlというファイルを食わせることで自動で設定するものです。

    ですがWindows Vista以降はSysprepだけではなく

    というパッケージインストーラーが使うインストールスクリプトとしても使われてるんですな。

    <?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
        <servicing>
            <package action="install">
                <assemblyIdentity  name="Package_for_KB2813347" version="6.1.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
                <source location="%configsetroot%\Windows6.1-KB2813347-x86.CAB" />
            </package>
         </servicing>
    </unattend>
    

    はい、WSUAやMSIに続いてPkgmgrとかまた新しいパッケージインストーラーが出てきて混乱の極みですが、これらの関係はまた後日説明します。

    この無人インストール応答ファイルの中でsource localtionとして指定されてる拡張子.cabなファイルですが、こいつはただのCAB形式ではなくて

    と圧縮アーカイバとバイナリ差分パッチの掛け合わせになっております。未対応のツール(エクスプローラーの圧縮フォルダなど)でみると

    • _manifest_.cix
    • 0
    • 1

    みたいな意味不明のファイルになってしまうので注意、なんでわざわざバイナリ差分なのかはまたいずれ説明します。

    このIPDについてはさっき使ったばっかりのexpandコマンドが対応済(Vista以降)なので、この.cabもそれで展開してみましょう。

    D:\>mkdir KB2454826\expaned
    D:\>expand -F:* expand -F:* Windows6.1-KB2454826-v2-x64.cab KB2454826\expaned
    Microsoft (R) File Expansion Utility  Version 6.1.7600.16385
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    ...
    
    ファイルの解凍が完了しました...
    合計 239 ファイル
    

    大量のフォルダとファイルが展開されますが、中身は

    • update.mum
    • update.cat
    • package_1_for_kb2454826~31bf3856ad364e35~amd64~~6.1.2.0.mum
    • package_1_for_kb2454826~31bf3856ad364e35~amd64~~6.1.2.0.cat

    という同名ペア(拡張子.mum + 拡張子.cat)がまずひとつ。

    そして

    • amd64_microsoft-windows-activexproxy_31bf3856ad364e35_6.1.7600.20743_none_6eb606b01cfa520a
    • amd64_microsoft-windows-activexproxy_31bf3856ad364e35_6.1.7600.20743_none_6eb606b01cfa520a.manifest

    というやはり同名ペア(フォルダ + 拡張子.manifest)がもう一つ。

    これらが何なのかはまた次回改めて説明します。

    @ オフライン更新時のスキャン定義ファイル

    Windows Updateを実施した場合はオンラインでWindows Updateサーバと通信して更新ファイルの検索を行うんですが、インターネットにつながってない環境でも

    を使うと必要なパッチの検索ができます、その為のデータベースで本題とあまり関係ないので説明はここまで。

    @ 次回

    飽きてきた、パッケージ本体の中身について引き続き書く予定。

    2017/4/29(Sat)

    [旅行] 厚木基地 日米親善春まつり(NAF Atsugi Spring Festival)

    去年も行きそびれたのだけど、今年も入場に必要な

    を用意するのを忘れててダメだった、まぁ海軍機もEA-6が退役でもはやF/A-18しかないし *1まあ騒ぐほどでもないか(エリア88脳)…

    写真は2013年に撮影したもの。

    ところで厚木基地へのアクセス方法ってNAFの公式Facebookもなんだけど「飛行場正門」で下車ってやつがネットの検索結果で大多数なのよね。

    なのでこれを信じて、以下のアクセス手段を選ぶ人が多いかと思われるんだけど。

    でもこの日ばかりはこのルート使うと絶対後悔するので注意ね、というのも

    というトラップがあるんですよな。

    例年だと一番混雑する時間帯の最後尾は光陵運動公園をグルっと一周しても足りずに綾北中学校の前あたりでまた折り返したりしてます。

    なのではじめっから光陵運動公園を目指して

    で行くといいです、20分に1本あるし知られていないのか長後駅発とか全然空いてるしね。

    今年は列の長さはいくぶんマシだったぽいですが、その場合は上深谷からもうひと停留所だけ飛行場正門寄りの「観音入口」で降りればおk。

    そういえば写真撮るのに何とかのひとつ覚えで「白い大砲」みたいな超望遠レンズつけた一眼で来場するオッサンが多いんですが

    のでむしろフルサイズ換算17-35mmくらいの広角レンズ一本あれば事足りるんだよね…

    というか一昨年行った時はどっかの団体客のジジイ連中が

    という世にも醜い光景をみたゾ、やっぱりコンデジより上のサイズのカメラは免許制にした方がいいと思う。

    *1:前は海軍の方がいろんな機体があって行くなら厚木だったんだけど、最近は空軍の方がまだ種類多いので以下略
    *2:数年前からF/A-18FやE-2Cが離陸をみせたりしますが「通常の飛行訓練(棒)」という建前らしいのでド派手な機動飛行は(ヾノ・∀・`)ナイナイありません。

    2017/4/30(Sun)

    [NetBSD] Let's Encrypt(certbot + dehydrated)で遊んでる程度でも地雷を踏みぬく素晴らしいユーザランド

    @ 昨今はブラウザがHTTPだと安全でない安全でないうるさいので…

    つーことでしばらく前にこのチラシの裏にも証明書入れたんですが、証明書に金かけられないので無料の

    を使ってたんですが、こいつも Chromeやら MozillaにBANされる雑魚だったようで慌てて

    に変更するハメに。

    @ certbotがまずクラッシュ

    StartSSLの期限切れでrenewしたらこの事態になってることに気づいたのもあって、時間も無いので深く調べずに公式がお勧めしてる

    をpkgsrcから導入したんですが、こいつが

    # certbot-auto certonly --standalone -d ドメイン
    

    を実行しても使用言語のPythonがオレオレN6上でバグってんのかcore吐いて死んでくれやがります、うーんこの。

    障害原因を調べようにもやたらと牛刀割鶏な作りだし--standaloneがクラッシュするって事はPython本体のHTTPServerクラスのdebugになりかねんのでめんどくさい、また来世で。

    とりあえず深追いしたくないのでnginxの設定に

    location /.well-known/acme-challenge/ {
        alias <砂場>;
    }
    

    を追加して

    # certbot-auto certonly --webroot -w <砂場> -d <ドメイン>
    

    を実行して別の方法で導入は済ませた。

    @ dehydratedも動かねぇ

    とはいえ、チラシの裏はディスク容量も無いしもっと軽量なやつがええなってことで、Bashだけで書かれた(うわBashかよ…)

    に切り替えたんだけど、こっちもpkgsrcから突っ込んだところ

    # dehydrated -register --accept-terms
    

    の実行中にsed(1)が

    sed: RE error: invalid argument to regex routine
    

    とおっしゃられる、ハハハこやつめ(ブチ切れ)。

    問題のコードはこの部分やね。

    262   # Get public components from private key and calculate thumbprint
    263   pubExponent64="$(printf '%x' "$(openssl rsa -in "${ACCOUNT_KEY}" -noout -text | awk '/publicExponent/ {print $2}')" | hex2bin | urlbase64)"
    

    パイプで繋いでるhex2bin及びurlbase64という2つのシェル関数の中でsedが使われてます

    320 # Encode data as url-safe formatted base64
    321 urlbase64() {
    322   # urlbase64: base64 encoded string with '+' replaced with '-' and '/' replaced with '_'
    323   openssl base64 -e | tr -d '\n\r' | _sed -e 's:=*$::g' -e 'y:+/:-_:'
    324 }
    325
    326 # Convert hex string to binary data
    327 hex2bin() {
    328   # Remove spaces, add leading zero, escape as hex string and parse with printf
    329   printf -- "$(cat | _sed -e 's/[[:space:]]//g' -e 's/^(.(.{2})*)$/0\1/' -e 's/(.{2})/\\x\1/g')"
    330 }
    

    コマンドそのものは_sedシェル関数でラップされてますがこれは

    300 # Different sed version for different os types...
    301 _sed() {
    302   if [[ "${OSTYPE}" = "Linux" ]]; then
    303     sed -r "${@}"
    304   else
    304     sed -E "${@}"
    305   fi
    306 }
    

    Linuxの場合(つまりGNU sedと言いたいのだろう)であれば-rオプション、それ以外(つまりBSD sed以下略)なら-Eを使うようになってます。

    unameでsedのチェックってクッソ雑やなーディストリとかによって差異あるやろとか、そもそも最近のGNU sedなら

    	-E
    	-r
    	--regexp-extended
    		Use extended regular expressions rather than basic regular expressions. Extended regexps are those that egrep accepts; they can be clearer
    		because they usually have fewer backslashes. Historically this was a GNU extension, but the -E extension has since been added to the
    		POSIX standard (http://austingroupbugs.net/view.php?id=528), so use -E for portability. GNU sed has accepted -E as an undocumented
    		option for years, and *BSD seds have accepted -E for years as well, but scripts that use -E might not port to other older systems. See
    		Extended regular expressions.
    

    と-Eも実装されてる(-rと等価)ので意味ないよね…

    @ とりあえず原因は特定

    まぁ心のマサカリは封印しつつ今起きてる障害の最小ケースを作成すると、Base64の末尾につくパディング目的の「=」を除去する目的の正規表現である

    $ echo -n 'A' | sed -E -e 's/=*$//g'
    sed: RE error: invalid argument to regex routine
    

    を実行するとこでエラー出てることがわかりまんた。

    • echoに-nをつけない(つまり最後に改行がある)時はエラーにならない
    • 入力の最後に'='がある(つまり正規表現で置換が実行される)時はエラーにならない

    ちゅー挙動、これどう考えても正規表現エンジンのバグよね。

    まぁそもそも末尾のパディング除去なら

    $ echo -n 'A' | sed -E -e 's/=+$//'
    

    と「*(0個以上)」でなく「+(1個以上)」にして、g(最初の1つだけでなく全て検索)も要らないよなと思うんだけど、これだとエラー出ない。

    つーことで相変わらずpkgsrcを6.1でテストしてる人間がおらんことが証明されてしまった、つか誰も騒いでないなら7.1とかでは直ってるんだろうと思ったけど

    $ echo -n 'A' | sed -E -e 's/=*$//g' | od -x
    0000000     0a41
    0000001
    

    バグ直ってるように見えて実は勝手に改行コード(0xA)が付与される新たなバグが埋められてて草不可避、サイレントに壊れてるってよりタチが悪いんですが。

    ちなみにFreeBSD(11.0)とかOpenBSD(6.1)は問題ないもよう。

    $ echo -n 'A' | sed -E -e 's/=*$//g' | od -x
    0000000     0041
    0000001
    

    @ 暫定回避策

    ふつうBSD sedはlibcのregex(3)に正規表現は丸投げなのでそっちのバグを修正しないとならんけど、今日のところは暫定でGNU sed(gsed)を呼ぶようにして回避でおしまい。

    --- dehydrated.orig     2017-04-30 15:10:33.000000000 +0000
    +++ dehydrated  2017-04-30 15:14:45.000000000 +0000
    @@ -301,6 +301,8 @@ init_system() {
     _sed() {
       if [[ "${OSTYPE}" = "Linux" ]]; then
         sed -r "${@}"
    +  elif [[ "${OSTYPE}" = "NetBSD" ]]; then
    +    gsed -r "${@}"
       else
         sed -E "${@}"
       fi
    

    今度こそ正しいunameの使い方である(ひどい)

    さっきも書いたように「*」でなく「+」を使う方法もあるけど。

    --- dehydrated.orig     2017-04-30 15:10:33.000000000 +0000
    +++ dehydrated  2017-04-30 16:13:01.000000000 +0000
    @@ -320,7 +320,7 @@ clean_json() {
     # Encode data as url-safe formatted base64
     urlbase64() {
       # urlbase64: base64 encoded string with '+' replaced with '-' and '/' replaced with '_'
    -  openssl base64 -e | tr -d '\n\r' | _sed -e 's:=*$::g' -e 'y:+/:-_:'
    +  openssl base64 -e | tr -d '\n\r' | _sed -e 's:=+$::' -e 'y:+/:-_:'
     }
    
     # Convert hex string to binary data
    

    でも、他にもバグあるかもだし一番テストされてるであろうGNU sedに寄せるのが安全よね。