一畳のくつろぎタイム

このブログでは紹介する商品画像をAmazonアソシエイトより借りています。画像やリンクにはアフィリエイト広告が含まれる事があります
ラベル しくじり の投稿を表示しています。 すべての投稿を表示
ラベル しくじり の投稿を表示しています。 すべての投稿を表示

2022年8月9日火曜日

HTML_QuickForm2のドはまり

 PHPのサンプルプログラムを作成しまして、バリデーターのHTML_QuickForm2を使ったのですが、バリデート後の値を取得するメソッド

$form->getValue()

で得られる連想配列が空っぽで値がありません。 ($formがHTML_QuickForm2のインスタンスとして)

$_POSTには値があるのにgetValue()では取得できない。3時間ぐらい調査して原因は1行の書き忘れだった。

2022年7月26日火曜日

環境変数LD_PRELOADの効果を身をもって体験する

以前Ryosuke Iwanagaさんの記事

https://blog.riywo.com/2012/04/01/023321/

を読んで根本的な関数などをまるっと置き換えられる便利な環境変数があるんだなーという印象を持ち、どこかで検証のために使ってみたいと思っていましたが、自動的に使うことになってしまいました。

ARMコアのLinuxでtensorflowを使おうとしましたが、色々バージョンがあわずglibcを最新に更新する必要がありそうで、試したところOSがぶっこわれました。

 ちゃんとコンパイルするglibcを選んできた気がしたのですが、互換性のないglibcが入ってしまったようで基本のlsコマンドすら打てない状態。

何もできないし、ログアウトしたらもう2度とログインできない状態になりましたが、

 export LD_PRELOAD="/lib64/libc-2.17.so" 

と元のバージョンを指定するとlsコマンドなど普通のコマンドが復活しました。

なるほど「LD_PRELOAD」を使えるとOSが持っているライブラリをパスして自分が用意したライブラリを使うことができるのだと。

残念ながらシステム復元はできませんでした。システム領域のシンボリックリンク書き換えのためにsudoするとLD_PRELOADが無効になり、スーパーユーザーになれません。

普段sudoしか使わないので、パスワードは設定しておらずsuもできず。最初からスーパーユーザーで作業しておれば復元可能でした。

システムは復元できませんでしたが、LD_PRELOADの働きについては身に染みて理解しました。 既存のコマンドたちにも影響を与えるのでセキュリティ的にも際どい気がします。

あとglibcの手動置き換えは結構やばい作業だと感じました。まぁオペレーションが悪かっただけでしょうが、今回のような実験用環境でなかったら冷や汗ものです。