一畳のくつろぎタイム

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

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


 

2019年10月9日水曜日

systemdでtimerの作り方(秒単位の最小限のサンプル)

Qitaのaosho235さんの記事
https://qiita.com/aosho235/items/7656d5568af8f48b2dc1
で、最小限のsystemd Timerの例があり、とても参考になりました。

いくつか検証した結果、もう少し最小限にできたっぽいのと、タイマーの間隔が記載通りにならなくて原因追究にやたらと時間がかかったので、同じ轍を踏む人が減るよう情報を共有したい。


問題点1 タイマー間隔が1分になる。

 aosho235さんの記事通りに作ってみると、tail -fで見ているdateコマンドの出力が1分単位でしか出てこないのだ。

2019年 10月  9日 水曜日 18:51:24 JST
2019年 10月  9日 水曜日 18:52:24 JST
2019年 10月  9日 水曜日 18:53:24 JST

 https://www.freedesktop.org/software/systemd/man/systemd.timer.html
 ここの
AccuracySec=のところを読むと、Defaults to 1min.の記載が、他のサイトも見ていくとcronの仕様に合わせて1分単位になっているとのこと。変更する場合はこの設定を変更しなさいという事だった。

なのでtimerファイルはこのようになった
hoge.timer
[Unit]
Description=hogeService Execute
 
[Timer]
# 精度がcronに合わせて1分なので1秒に
AccuracySec=1
# 初回起動時は起動から3秒後に動作
OnActiveSec=3
# 前回の起動から3秒毎に動作
OnUnitActiveSec=3

Unit=の記載はtimerとserviceの名称が一致する場合は書かなくてもいいらしい。 OnActiveSec=もなくてもいいかと思ったが、 OnUnitActiveSec=はあくまで、前回の起動があっての話で初回起動は欲しいらしい。
[Install] WantedBy=の記載はsystemctrl enableとかブートとか何かのきっかけで起動する必要がなければいらないらしい。
serviceファイルの内容も載せます。
hoge.service
[Unit]
Description=hogeService

[Service]
ExecStart=/home/hoge/hoge.sh


hoge.shはdateコマンドが書いてあるだけです。

起動

[Install]がないのでenableはしなくてよい。startのみ、止めたければstopで
# systemctl start hoge.timer

検証

# systemctl list-timers
とjournalctrl -fや実行されたプログラムの出力を見る journalctrl -fの結果、3秒と指定したが、4秒ごとに出てる、まぁあとは調整ですね。
10月 09 21:55:55 hoge.local systemd[1]: Started hogeService.
10月 09 21:55:59 hoge.local systemd[1]: Started hogeService.
10月 09 21:56:03 hoge.local systemd[1]: Started hogeService.
10月 09 21:56:07 hoge.local systemd[1]: Started hogeService.
10月 09 21:56:11 hoge.local systemd[1]: Started hogeService.

2019年6月13日木曜日

ラズパイにVisual Studio Code の Remote Developmentできない件

神エディタのVSCodeの神度が上がったという記事をgoogle先生がお勧めしてきたので、Remote Development試してみましたが、

Raspberry Pi3につなぐ設定をしてみたら

Can't connect to : unreachable or not Linux x86_64 (Linux armv7l)


 x86_64でないとダメっぽい。
 
そのうち対応するじゃないかとは思いますが、現時点では残念だった。