flat7th

+ Unix関連のtips

created 2004-06-14 modified 2004-11-30 

tips:/dev/random メモ
tips:CDROMから isoファイル
tips:EUC-JPなFedoraでのman文字化け対策
tips:FTPやTELNETの自動化
tips:Fedoraでパケットの転送を行う
tips:Gnome3左上アクティビティ マウス ホットコーナー無効
tips:Solaris10のTICK数 設定
tips:coreが出てくれない場合
tips:cssのセレクター
tips:eth0になるかeth1になるか
tips:iBus-Anthyで常に半角spc
tips:isoのマウント
tips:putty上のemacsでBSがあやしい動きをする件
tips:ssh exit時のハングアップ防止
tips:syslog高速化
tips:こんなコマンドあんなコマンド
tips:カーネル関係の調べ方メモ
tips:サブネット内のホスト数が多くてパケット導通しない
tips:シリアルログイン
tips:デーモン起動・停止でI18Nなメッセージが出る件
tips:プロセッサ固定
tips:一般ユーザでrpmbuild

/dev/random メモ

2chからコピペ。知らなかった。
"Fedora 総合スレッド Part 48" より。

637 名前:login:Penguin 投稿日:2010/12/06(月) 18:31:54 ID:eBcICc5w
fedora14です。 
起動時やシャットダウン時に時折固まって、キーボードから入力信号を送ってやると 
動き出すという現象があります。 
インストール時でも上記と同様の現象があり、砂時計の動きが止まったらマウスを動 
かすかキーボードのキーを押さないと処理が再開されない。 
何すかこれwww。 

641 名前:login:Penguin 投稿日:2010/12/06(月) 20:19:26 ID:bG4gTsbu
>>637 
何かのコマンドが /dev/random から乱数を読もうとしていて、 
システムに十分なエントロピーが蓄積されていない時に 
その現象が起きることがある。 
od -c /dev/random 
とか実行すると、数百バイト程度表示した状態でいったん止まるでしょ。 
キーボードから入力信号を送るとそのタイミングが乱数のエントロピー源になるので 
再び /dev/randomからデータが読めるようになる。 

俺は、この現象が嫌だったので、 
rm -f /dev/random; ln -s /dev/urandom /dev/random 
とやってる。 
/dev/urandomならエントロピー関係なしに無制限に読み出せるから。 

勉強になります。でも、質問者の問題がこれだったかは不明。こんなレスも。

645 名前:633 投稿日:2010/12/08(水) 09:03:58 ID:vVjnfRxS
fedora14でデバイスを読みにいくとき固まる原因が判明。 
キーを押したりマウスを動かしたりすると復帰するという鬱陶しい奴。 
犯人はAMDのC1E。 
BIOSの設定で、こいつのサポートをDisableにしてやれば良かった。 
デバイスを読みにいくときに固まらなくなった。 

648 名前:login:Penguin 投稿日:2010/12/08(水) 14:14:07 ID:GPchVNO+
>>645 
Gigabyteのマザーでのみ出るみたいだね。 
ttps://bugzilla.kernel.org/show_bug.cgi?id=15289 

649 名前:login:Penguin 投稿日:2010/12/08(水) 23:15:11 ID:JJXGdLzh
>>645 
cpuspeed とか動かしていないですか? 
或いは、desktop のcpu駆動の周波数を動的にいじるサービスなどなど 

未対応のCPU(Celeron D330)では、1日もしないで勝手に停止してたのでこのサービスを 
を停止処分としますたよ。 

CDROMから isoファイル

Fedora Core の.isoファイルがほしいが、手元にあるリソースは
  • 雑誌のおまけCD-ROM 3枚
  • 作業現場での遅い回線
という条件での作業メモ。



http://z1.plala.jp/i686fc/
を参考にさせてもらい、以下でISOイメージを作成した。

  • cdrtools-1.11a12-win32-bin.zip を拾ってきて展開。

  • 作業ディレクトリ以下に fc1cd1, fc1cd2, fc1cd3 ディレクトリを作成し、CDの内容をコピー。
xcopy Q: fc1cd1 /E

  • 作業ディレクトリ以下に fc1cd1, fc1cd2, fc1cd3 ディレクトリを作成し、CDの内容をコピー。
xcopy Q: fc1cd1 /E

  • isoイメージ作成。

mkisofs -J -d -r -L -T -V "Fedora Core 1 Disk1" -b isolinux/isolinux.bin \
 -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table \
 -o fc1cd1.iso fc1cd1
mkisofs -J -d -r -L -T -V "Fedora Core 1 Disk2" -o fc1cd2.iso fc1cd2
mkisofs -J -d -r -L -T -V "Fedora Core 1 Disk3" -o fc1cd3.iso fc1cd3

  • 逆に、isoから焼くには以下でいいようだけど未検証。

cdrecord -eject dev=0,0,0 speed=12 driveropts=burnproof FC2-test1-i386-disc1.iso

EUC-JPなFedoraでのman文字化け対策

.bash_profileに以下を追加

export MANPAGER=lv

FTPやTELNETの自動化

expect という tcl 拡張を利用する。
telnetscript.sh
#!/bin/bash
HOST=127.0.0.1
USER=hoge
PASS=fuga
expect - <<EOF
set timeout 20
spawn telnet $HOST
expect "ogin: " ; send "$USER\r"
if { "$PASS" != "" } {
  expect "assword: " ; send $PASS\r
}

expect ">" ;      send "enable\r"
expect "#" ;      send "conf pr\r"
expect "#" ;      send "exit\r"
expect "#" ;      send "exit\r"
expect ">" ;      send "exit\r"
EOF
こんな調子。制御文などは tcl の素の機能でOK。

Fedoraでパケットの転送を行う

Linuxメモ:Fedoraでパケットの転送を行う

# echo 1 > /proc/sys/net/ipv4/ip_forward
または
# sysctl -w net.ipv4.ip_forward=1

ブート時に有効にするには /etc/sysctl.conf で
net.ipv4.ip_forward = 1
(0を1に変更)

Gnome3左上アクティビティ マウス ホットコーナー無効

Fedora16の話です。
Gnome3で、意図せず、デスクトップ左上にマウスが移動したとき、アクティビティ画面になるのがウザい。

アクティビティ画面にしたければ
  • Alt-F1でもできるし、
  • Windowsキーでもできるし、
  • 左上でマウスクリックでもできる。

マウス移動だけでアクティビティ画面になるのが本当に苛立たしい
プログラムの入力中にこの現象になると切れそうになる。

ということで無効化DEATH。

rootで

vi /usr/share/gnome-shell/js/ui/panel.js
_containerAllocateという関数の最後をコメントアウトして

   _containerAllocate: function(actor, box, flags) {
       this._label.allocate(box, flags);

       // The hot corner needs to be outside any padding/alignment
       // that has been imposed on us
       let primary = Main.layoutManager.primaryMonitor;
       let hotBox = new Clutter.ActorBox();
       let ok, x, y;
       if (actor.get_direction() == St.TextDirection.LTR) {
           [ok, x, y] = actor.transform_stage_point(primary.x, primary.y)
       } else {
           [ok, x, y] = actor.transform_stage_point(primary.x + primary.width, primary.y);
           // hotCorner.actor has northeast gravity, so we don't need
           // to adjust x for its width
       }

       hotBox.x1 = Math.round(x);
       hotBox.x2 = hotBox.x1 + this._hotCorner.actor.width;
       hotBox.y1 = Math.round(y);
       hotBox.y2 = hotBox.y1 + this._hotCorner.actor.height;
       //kkk// this._hotCorner.actor.allocate(hotBox, flags);
   },

ログインしなおす、と。


うむ。

Solaris10のTICK数 設定

/etc/system ファイルに
 set hires_tick=1
と書いてリブート。


「Solaris カーネルのチューンアップ・リファレンスマニュアル」
819-0376.pdf の
30ページ 「/etc/system ファイル」 のところ
95ページ 「タイマー」「hires_tick」 のところ

1. Solaris システムのチューニングの概要 (Solaris カーネルのチューンアップ・リファレンスマニュアル) - Sun Microsystems
2. Solaris カーネルチューニング可能パラメータ (Solaris カーネルのチューンアップ・リファレンスマニュアル) - Sun Microsystems

coreが出てくれない場合

coreを吐かせたいのに吐いてくれない場合。

→coreファイルサイズの最大値がゼロになっている。
coreからパスワードが漏洩するのを防ぐため、最近のOS(ディストリビューション)ではデフォルトでcore出力を抑制してるらしい。

現在の状態を表示
ulimit -c

設定
ulimit -c 1000000

参考
@ITのtipsページ

あるいは
struct rlimit rl;
rl.rlim_cur = 1000000;
setrlimit( RLIMIT_CORE, &rl );

参考
7-6. coreファイルから情報が漏れる

coreファイル名の指定

/proc/sys/kernel/core_pattern
/proc/sys/kernel/core_users_pid

参考
Manpage of PROC

cssのセレクター

stylusを使っていて、cssのセレクター指定方法がよくわかっていなかったので調べた。

出典

リンク備考
SelectorsW3C仕様
https://developer.mozilla.org/ja/docs/Web/CSS/:hashas( )の説明
https://webliker.info/css-selector-cheat-sheet/CSSセレクタのチートシート


CSSの セレクター = sytleをどのHTMLタグに適用するかのマッチング指定

A の子孫の B にマッチ (孫も含む)
A B {指定}

A の直接の子の B にマッチ (直接の子のみ)
A>B {指定}
A > B {指定} でも同じ

A の後の B にマッチ (AとBは同階層)
A~B {指定}

A の直後の B にマッチ (AとBは同階層、直後のみ)
A+B {指定}

B を子孫に持つ A にマッチ
A:has(B) {指定}
A :has(B) {指定} でも同じ

B を直接の子に持つ A にマッチ
A:has(>B) {指定}
A :has(>B) {指定} でも同じ

A と B にマッチ
A,
B {指定}

attr属性指定がある Aにマッチ、と 属性値の完全一致、前方一致、中間一致、後方一致
A[attr] {指定}
A[attr="abc"] {指定}
A[attr^="abc"] {指定}
A[attr*="pqr"] {指定}
A[attr$="xyz"] {指定}

属性のうちidの場合の古い記法
A#name {指定}
A[id="name"] {指定} と同じ

属性のうちclassの場合の古い記法
A.name {指定}
A[class="name"] {指定} と同じ




スペース自体が区切り記号として意味を持ってしまっていて、スペースが単なるスペースにならない場合がある。
具体的には "+" の周囲と ">" の周囲でスペース文字が違う意味になってしまう(?)ようで、いやらしい。
おそらく仕様がつぎつぎに追加されたためなのだろう、仕方がない。
余計なスペースを空けないのが統一的で良いかも。

eth0になるかeth1になるか

Linuxで、同じデバイスドライバで動作するLANカードを複数使っていると、どっちがeth0でどっちがeth1になるか分からない話。ゲートウェイにしている場合には問題になる。

対処:MACアドレスを指定して毎回同じインタフェース名となるようにする

手順:
(1) /etc/sysconfig/hwconf を見る。
まずはethで検索。PCIバスのどこのカードのMAC(network.hwaddr)が何かをメモ。
この時点でhwconfにeth0とかeth1とか書いてあるのは気にしない。

(2) /etc/sysconfig/network-scripts/ifcfg-eth0 を編集。
HWADDR=aa:bb:cc:dd:ee:ff
などと、ファイル名のeth0と、内容のHWADDRを希望の組み合わせにする。

(3) /etc/sysconfig/network-scripts/ifcfg-eth1 を編集。
同様。

(4) リブート。

iBus-Anthyで常に半角spc

設定 - キー割り当て で以下設定

コマンドショートカット
insert_space[]
insert_alternate_space[]
insert_half_space[space]
insert_wide_space[Shift+space]

isoのマウント

mount -o loop yarrow-i386-disc1.iso /mnt/tmp1

putty上のemacsでBSがあやしい動きをする件

どうもstty eraceに標準以外の値が設定されてしまう場合があるらしい。
.bash_profile に

[ $(uname) == "Linux" ] && stty erase ^?

と書いた。
"^?"はeraceの標準値らしいのだが…なんで変更されてしまうのかは不明。

作業環境ではSolaris等からも同じホームディレクトリにアクセスするので
unameでLinuxのみ対象とした。

ssh exit時のハングアップ防止

リンク備考
Life with IT

ssh -X 等でX11のForwardingをして、一度でも別のGUIプロセスを起動すると、全部終わって抜けようとたときにexitが完了しない現象が発生。

サーバ側の .bashrc に、
shopt -s huponexit
と書いたら解消...

と思ったけど解消してなかった。
うーむ。dbusのプロセスが 親プロセスID 1 になって残ってしまう模様…

syslog高速化

syslogdにはいろいろ新しいものがあるようだがオイラは標準のものしか使ったことない。
標準のヤツでもちょっと高速化できる。

syslog.confのファイル名指定にて、ファイル名の先頭に1文字ハイフンを付ける。


*.debug    -/var/log/debug

バッファリングされるのでちょっと速くなる。
電源プッチンとかすると取りこぼすかも。

こんなコマンドあんなコマンド

Linuxに限らないコマンド一覧で、面白かったのでリンクをメモさせていただきます。

bannerコマンドとか知らなかった。

参考
簡易版コマンドマニュアル

以前、あるマシンで sl というジョークコマンドがインストールされていてびっくりした。
ls とタイプしようとして sl と打つと、端末画面上をものすごい勢いで蒸気機関車が通りすぎていくというもの。

カーネル関係の調べ方メモ

サブネット内のホスト数が多くてパケット導通しない

同一のサブネット内に、例えば1024超のホストがぶら下がる環境では、
ARPキャッシュの上限に引っかかってパケット送受信が通らないかもしれない。

Linuxの設定は

現在値を確認する。
cat /proc/sys/net/ipv4/neigh/default/gc_thresh3
または
sysctl net.ipv4.neigh.default.gc_thresh3

デフォルトは1024。これを2048にするには
echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
または
sysctl -w net.ipv4.neigh.default.gc_thresh3=2048


またはインタフェースごとの個別設定も
/proc/sys/net/ipv4/neigh/eth0/gc_thresh3
とかでできるのかも。

シリアルログイン

cu

接続
cu -s 38400 -l /dev/ttyS0

切断
~.

uucpパッケージに入っている。でもいまどきuucpパッケージ要らないよな。

kermit

メモなし

デーモン起動・停止でI18Nなメッセージが出る件

問題

独自につくったデーモン用のinitスクリプトを作成し提供したい。
/etc/init.d/httpdなどを参考にして作る。
echo -n $"Starting $prog: "
などとしているところで、国際化されたメッセージが出ている。
これそのままマネして使って大丈夫かな?
そもそもこれってどうやってるの?

調査

TEXTDOMAIN=initscripts
#LC_MESSAGES=en_US
LANG=ja_JP.UTF-8

gettextの仕組みらしい。
どこかに、initscripts という名前と関連した国際化文字列を
格納しているところ(POファイル?)があるはず...。

man textdomain
うむ。あとでちゃんと読もう。

info gettext
をみると、個別のプログラミング言語のセクションがあって
bashのところに
gettext shorthand
  $"abc"
とある。
コマンド gettext の、コマンド名を省略した書き方として
扱われるのかな。
export TEXTDOMAIN=initscripts
として
echo $"Starting $prog: "
とすると
を起動中: 
が返り、
gettext 'Starting $prog: '
とやってみたら、
$progを起動中
が返ってきた。うむ。

関連する環境変数など

TEXTDOMAIN
TEXTDOMAINDIR
LANG
LC_MESSAGE

/usr/share/locale/ja/LC_MESSAGES/*.mo
initscripts.mo

GPLになる?

gettextでググってみたら
http://www.linux.or.jp/JF/JFdocs/ABOUT-NLS-7.html
むむむ
あなたが自由に利用できるプログラムを書いていて、それを国際化したいと
思っているなら、あなたのパッケージで GNU `gettext' を使うことを歓迎
します。もちろん、その配布物に `gettext' のディレクトリを含めるなら、
その時からあなたのソースには GNU Public License が適用されます。
しかし、いずれにせよあなたはフリーソフトウェアを書いているので、
これは制限にはなりません。
あれー、GPLに汚染されるの?

あれかな。initスクリプトだけ別パッケージにすればGPLの範囲を限定できる。だけど、ドキュメントなんかでそのinitスクリプトがあることを前提とした書き方をしてしまうとぎりぎりアウトかな。そうすると、わざわざ「開始します」程度の国際化文字列のためにgettext使うのはばかばかしい。

いや、ちがうか。利用するだけならLGPLだから問題ないのかな。gettext自体を改造したものを配布するなら問題だけど、gettextをユーザが使えるようにするだけだし。

「gettext のディレクトリを含める」が何を意味するのか、今度詳しく調べよう。

プロセッサ固定

プロセッサ固定でスレッドを動かすメモ

Solaris
processor_bind(2)
pbind(1M)
psrset(1M)

Linux
pthread_setaffinity_np(3)

一般ユーザでrpmbuild

http://www.inter7.com/courierimap/FAQ.html より引用

First, you need to create a mirror image of the main RPM directory in your account:
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
Use sparc, or alpha, or whatever's appropriate. Finally:
echo "%_topdir    $HOME/rpm" >> $HOME/.rpmmacros