2015年10月27日火曜日

Fedora で WN-G150UM

WN-G150UM のドライバはカーネルに標準で入っていて rtl8192cu.ko らしいが、
udev が反応してくれず ip コマンドで見えない。

アイ・オーデータのベンダーID とデバイス ID がコードに含まれてないらしい。

これは動的に /sys/bus/usb/drivers/rtl8192cu/new_id に追加出来るらしく、
modprobe 実行時に強制的にコマンドで追加してしまう方法が一般的のよう。
以下、http://beautifulajax.dip.jp/?p=1016 のマルパクです。

# echo 'install rtl8192cu /sbin/modprobe --ignore-install rtl8192cu ' \
# '$CMDLINE_OPTS; /bin/echo "04bb 094c"' \
# ' > /sys/bus/usb/drivers/rtl8192cu/new_id' \
# > /var/tmp/hogehoge.txt
# echo '# USB device 0x:0x (rtl8192cu)
# SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="04bb", ' \
# 'ATTR{idProduct}=="094c", RUN+="/sbin/modprobe -qba rtl8192cu"' \
# > /etc/udev/rules.d/70-persistent-net.rules
上記のように /etc/modprobe.d/wireless.conf と /etc/udev/rules.d/70-persistent-net.rules
を追加。

再起動したくないときは以下実行。(wlp0s26u1u2 は私の環境のデバイス名)


# modprobe -ba rtl8192cu
# ip link set wlp0s26u1u2 up


2015年10月22日木曜日

長いワンライン作って cron に登録したら(ファイルに分けたくなかった)、実行時に以下エラーで弾かれる。
CROND[8535]: (root) CMDOUT (/bin/sh: -c: line 0: unexpected EOF while looking for 
CROND[8535]: (root) CMDOUT (/bin/sh: -c: line 1: syntax error: unexpected end of file)

ターミナルから実行すると普通に OK なんだけど、なんで、、、といろいろ調べたら、コマンド内に % 文字が含まれる場合はバックスラッシュでエスケープしなくちゃいけないらしい。で、直った。

2015年10月7日水曜日

paramiko で exec_command で stdin, stdout 同時に利用すると帰ってこない

python paramiko で exec_command() でコマンド実行する際に、標準入力と
標準出力を同時に使いたいんだけど、標準出力がどうも取れなくて固まって
しまう。下記のように stdin.channel.shutdown_write()  する必要があるぽい。

import paramiko
client = paramiko.SSHClient()
client.connect(hostname='host', ....)
stdin, stdout, stderr = client.exec_command(command)
stdin.write(mydata)
stdin.flush()
stdin.channel.shutdown_write()  # <--- これが必要
stdin.close()
ret = stdout.read()
これなら大丈夫なんだけど、これで良いのか?

xxd 知らんかった

16進からバイナリに戻したい。
python の binascii.unhexlify() でやったりしてたけど、xxd なんてあるのね。
Fedora の場合は vim-common パッケージに入ってた。

xxd -r -p
知らんかった恥ずかしい+忘れそうなのでメモ。

2015年9月25日金曜日

bourne shell で複数行数値を sum したい

paste で改行を+に書き換えて bc
例えば ls -l の結果からファイルサイズ合計を求めたいとき
(du 使えとかそういうのではなく)

ls -l | awk '{print $5}' | tail -n +2 | paste -sd+ | bc

2015年9月5日土曜日

libvirt の KVM で既存の仮想マシンディスクイメージを使ってインタンスを上げる件

自分の Fedora 内の libvirt で Windows 8 を上げていてこのネットワークは
ユーザモードになってる。でも、TAP で使いたかったので root ユーザ管理
のマシンにすべく、そのままのディスクイメージで root ユーザ管理に移行で
きないか調べてみた。

とりあえず、既存ディスクイメージをそのまま使うには以下のように virt-install
の --import オプションで良いらしい。こうすれば定義 xml だけを作ってく
れる模様。

virt-install --import --name win8pro --ram 4096 --disk path=/home/ryo/libvirt/images/win8pro.img,device=disk,bus=virtio,format=raw --os-type=windows --os-variant=win7 --network=network:default

すると、/etc/libvirt/qemu/ 下に win8pro.xml が作成されたので登録され
たようだ。

で、このまま virsh start win8pro をやってみたのですが、起動はするものの
Windows が修復モードで上がっちゃって、さらに PC をリフレッシュなるボタ
ンをクリックしてみると以下のエラーが返されてどうにもならなくなる。
Windowsがインストールされているドライブがロックされています。ドライブのロックを解除してやり直してください
なんじゃら、ディスクイメージファイルのパーミッションとかそのあたりを疑っ
たのだけど違うようで、 結局 xml ファイル内に定義されている uuid が旧仮想
マシンと違うことが原因だったようで。

なので、virsh で edit win8pro して uuid を既存のやつと同じにしたところ、
正常起動した。

というメモでした。

2015年8月19日水曜日

unar

unar なら windows の zip ファイル内にあるファイル名文字化けしないぞ。これからは unzip でなく unar を手癖にしないと。