たぶんubuntu 13.10からだと思うのだが、GUIログイン後numlockが有効にならなくなった。
追加でアプリ入れれば回避出来そうなのだが、そこまでしなくてもと放置していた。
1 |
$ sudo apt-get install numlockx |
ただ、これだけ。特に設定とかもしなくて、ログイン後numlockが有効になった。
ログイン画面では有効にはならない模様。
とあるnetの記事を見ていたら、watchdogタイマーのテストで以下を実行すると良いとか見た。
1 |
:(){ :|:& };: |
なんじゃ、この顔文字みたいなのは!と困惑していたのだが、よく見てみると、
「コロン(:)を名前とした関数を定義して、その関数内で自身を再帰的に呼び出して、パイプでつないで、バックグラウンド実行している。」といった感じだ。コロンじゃなくて、aとかでも同じ
1 2 3 |
$ a(){ a|a& } $ a |
上でも同じことになるし、理解しやすい。
実際にサーバ上でrootで実行すると、即座に何も出来なくなり、強制的に再起動するしか復旧方法が無さそう。
heartbeat構成で、サービス監視がしっかり出来ているか確認するときに使うと便利かも。
因みにFork爆弾と言って結構有名な手法らしい。wikipediaの解説がわかりやすい。
初めて見た時は、記号だらけなんで検索しても、全然ヒットしなくて困ったが、Fork爆弾って単語にたどり着いたらスッキリした。
新PCを入手したことで、ubuntu13.10をクリーンインストールしたが、ほぼ毎朝アップデートの通知が来てうざい。
確か毎回、自動アップデートの設定をしているが、いつも忘れるのでメモ。
unattended-upgrades
というパッケージが必要だがたぶん入っているはず。設定ファイルは、
1 2 3 4 5 6 7 8 |
$ grep "^[^/]" /etc/apt/apt.conf.d/50unattended-upgrades Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; "${distro_id}:${distro_codename}-updates"; "Google\, Inc.:stable"; }; Unattended-Upgrade::Package-Blacklist { }; |
こんな感じ。コメント行は抜いております。
securityは、標準で入っているが、updatesはコメントを外しております。
googleの行はchromeをインストールしているのでその設定です。
また、なぜかあまり情報が無いのですが、これだけでは動きません。
/etc/apt/apt.conf.d/10periodicに追加する必要があります。
1 2 3 4 5 |
$ cat /etc/apt/apt.conf.d/10periodic APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "0"; APT::Periodic::AutocleanInterval "0"; APT::Periodic::Unattended-Upgrade "1"; |
APT::Periodic::Unattended-Upgrade “1”; が追加した行です。
これで自動アップデートされるはず。
サーバ版だと、ちょっと手順が違うかもです。
ふと、rootでも消せないファイルに出会った。
1 2 3 4 5 6 7 8 |
# rm cant-delete.txt rm: `cant-delete.txt' を削除できません: 許可されていない操作です # whoami root # ls -l -rw-r--r-- 1 root root 9 12月 11 14:13 cant-delete.txt |
なんでやねーん。と思っていろいろ調べたところ、lsattrコマンドで確認してみると良いとのこと。
1 2 |
# lsattr cant-delete.txt ----i--------e-- cant-delete.txt |
このiフラグが付いてると、例えrootであろうと、変更削除が出来ない。
このフラグを取るには、chattrにハイフン(-)取りたいフラグとしてあげればよい。
今回は、
1 2 3 4 |
# chattr -i cant-delete.txt # lsattr cant-delete.txt -------------e-- cant-delete.txt |
逆に付けたい場合は、プラス(+)
1 2 3 |
# chattr +i cant-delete.txt # lsattr cant-delete.txt ----i--------e-- cant-delete.txt |
他にも沢山フラグがあるようだが、
なんだか、連日java関連が続いているが。。。
仮想環境の管理画面で、javaアプレットが必要になることが多々あるのだが、
oracle-java6では、何故か上手く行かず、オープンソース実装のopenjdkに戻してみた。
1 |
$ sudo apt-get remove oracle-java6-installer |
自分の環境では、依存関係で、自動的にopenjdkが入ったが、インストールされない場合は
1 |
$ sudo apt-get install openjdk-7-jre |
jreじゃなくてjdkが良ければ適宜変更すれば良いと思います。
これでアプレットのページを開くと、何故かプラグインが足りないと言われる。
icedtea-plugin
を入れれば、ブラウザ上でjavaアプレットが動くようです。
1 |
$ sudo apt-get install icedtea-plugin |
なんとなくですが、eclipseとかもoracleよりも早い気がする。
openjdkの出始めの頃は、互換性がイマイチで(特に日本語フォント関連)
即sun-javaを入れてましたが、最近はopenjdkのままで充分(むしろ良い)かも。
tcpdumpを実行していると、以下のようなパケットが流れてちょっとうざい時がある。
1 2 3 4 5 6 |
# tcpdump -nn -i eth0 "! port 22" tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 10:19:37.862776 STP 802.1d, Config, Flags [none], bridge-id 8000.fe:00:00:26:eb:a4.8001, length 35 10:19:39.862782 STP 802.1d, Config, Flags [none], bridge-id 8000.fe:00:00:26:eb:a4.8001, length 35 10:19:41.862766 STP 802.1d, Config, Flags [none], bridge-id 8000.fe:00:00:26:eb:a4.8001, length 35 |
どうやら802.1d(スパニングツリー)用の、パケットのようだ。
恐らく仮想環境のLinux bridgeでSTPが有効になっていて流れているのだと思う。
tcpdumpに以下を指定すれば除外出来るとのこと。
not ether proto 0x42
実行はこんな感じ
1 |
# tcpdump -nn -i eth0 "! port 22" and "not ether proto 0x42" |
昨日androidの開発環境を用意したが、同梱されていたeclipseが落ちまくって使いもんにならなかった。
javaを8から6に下げたところ、今の所大丈夫そう。
sunからoracleへの弊害がこんなところにも出てるんですかね。
過去に何度も挫折している、androidの開発だが、PCも新しくなったし久しぶりに挑戦しようと開発環境をサクッとインストールした。
が、開発環境だけなら今まで何度も入れているのでスムーズに行くと思ったが、見事に躓いてしまった。
sdk本体はこちらからダウンロード。
自分の環境は、ubuntu13.10の64bit環境なので、「Linux 64-bit」をダウンロード。
「ADT Bundle」って方は、eclipseまで同梱されている模様。
普通にダウンロードして、eclipseを実行してみると、adbがないとかerror 2とか出てる。
なんだと思って、adbを手動実行してみると。
1 2 3 4 5 6 |
$ ./adb bash: ./adb: そのようなファイルやディレクトリはありません $ LANG=C $ ./adb bash: ./adb: No such file or directory |
いやいや。見つからないって。ライブラリが足りないのかと思って
1 2 3 4 5 6 |
$ ldd adb 動的実行ファイルではありません $ LANG=C $ ldd adb not a dynamic executable |
いやいや。
1 2 |
$ file adb adb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped |
うーん。32bit環境だからかな。
ubuntuの32互換環境は、ia32-libsをインストールしろとかの情報があるが、13.10ではそんなパッケージは無さそう。
結局以下で必要そうな32bitライブラリをインストールしたら使えるようになった。
1 2 3 4 5 |
$ sudo dpkg --add-architecture i386 $ sudo apt-get update $ sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386 |
やっとこさ環境だけ出来た。なんかeclipseではなくて、android studioなんてのもいつの間にか発表されてるんですね。
また、Hello worldで終わりそう。。。
非常に時間のかかるコマンドなんかを実行した時、「今はちょっとブラウザ見たいから、お前ちょっと黙っててくれない。」なんて気持ちになる時がある。
ちょっと調べたら、その名の通り、cpulimitなるコマンドがあった。ubuntuならパッケージで簡単インストール
使い方は、
* プロセスID指定(50%)
1 |
$ cpulimit -p 12345 -l 50 |
* 実行ファイル名指定(50%)
1 |
$ cpulimit -e dd -l 50 |
* PATH指定(50%)
1 |
$ cpulimit -P /bin/dd -l 50 |
とこんな感じ
ちょっと試したところ
1 2 3 4 5 6 7 8 9 10 11 |
$ dd if=/dev/urandom of=/dev/null & $ top -b -n 1 |egrep " dd|PID" PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2752 foo 20 0 12432 680 560 R 103.6 0.0 1:37.03 dd $ cpulimit -e dd -l 30 & $ top -b -n 1 |egrep " dd|PID" PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2752 foo 20 0 12432 680 560 T 32.3 0.0 2:20.74 dd |
とこんな感じ。上はいい感じの部分をとってるが、パーセンテージは結構ばらついていた。
仕組みを解説されているかたがいたのですが、
SIGSTOP
SIGCONT
を繰り返しているだけの模様。実際straceで見てもそんな感じだった。
シグナル送るだけなら、whileループで回せば、sleep時間調整すれば同じようなこと出来るんじゃないかと思ってやってみた。
1 |
while /bin/true ; do kill -SIGSTOP 2752; sleep 0.0001; kill -SIGCONT 2752; done |
これで40%近くで安定した。sleep値はモロ環境に依存すると思う。