2012年5月24日木曜日

VMが悪いのかUbuntuが悪いのかそれともPC?

日本語入力へ切り替えるときにどうも調子が悪い。
顕著に現れるのがやはりブラウザで、書き込むときに切り替えが頻繁だからですが。

実際には他のタイミングでも多発していて最初は半角/全角キーだけでは切り替わらないのかと思ってALT+半角/全角にしても状況は変らず。

Ubuntuのデフォルトの画面だと右上のほうにキーボートのアイコンみないな表示をクリックすると入力切替や設定ができるので見てみると切り替えにCTRL+SPACEキーというのもあるらしい。
で、CTRL+SPACEで切り替えてみても状況は変わらず。

さらには切り替えた直後に入力して確定させてもそのまま消えてしまうとか…。

入力で消えてしまうのは切り替えた直後は少し間を空けると正しく入力ができるようですが、入力の切り替えはどうにもこうにも回避策が無くて困っています。

気づくと入力切替がちらついて何度も切り替えてる状態に陥っている場合もある様です。

現状ではVMが悪さをしているとしか思えないのですが何か改善策は無いのだろうか?

2012年5月23日水曜日

proftpd

vsftpdをアンインストールできたと思うので適当に
sudo apt-get install proftpd
とかやってみました。
パッケージの設定                                                               
                                                                               
                                                                               
 ┌─────────────────────────┤ ProFTPD configuration ├─────────────────────────┐ 
 │ ProFTPD は、inetd 経由のサービスとして実行することもできますし、 スタン   │ 
 │ ドアローンのサーバとしても実行できます。どちらにもそれぞれ利点があります  │ 
 │ 。1日に数回の ftp アクセスしかない場合は、資源を節約するために ProFTPD    │ 
 │ を inetd から起動するのが良いかも知れません。                             │ 
 │                                                                           │ 
 │ 一方、頻繁なアクセスがある場合は、接続ごとに新規プロセスが生成されるのを  │ 
 │ 避けるため、ProFTPD をスタンドアロンサーバとして動作させるべきです。      │ 
 │                                                                           │ 
 │ proftpd の起動方法:                                                       │ 
 │                                                                           │ 
 │                              inetd 経由                                   │ 
 │                              スタンドアロン                               │ 
 │                                                                           │ 
 │                                                                           │ 
 │                                  <了解>                                   │ 
 │                                                                           │ 
 └───────────────────────────────────────────────────────────────────────────┘ 
                                                                               
                                                                               
                                                                               
こんな画面が表示されopenwrtで敬遠されているようなスーパーサーバーの利用を選択できるようです。

root@ubntu-VirtualBox:/# sudo apt-get install proftpd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
注意、'proftpd' の代わりに 'proftpd-basic' を選択しています
提案パッケージ:
  proftpd-doc proftpd-mod-mysql proftpd-mod-pgsql proftpd-mod-ldap
  proftpd-mod-odbc proftpd-mod-sqlite openbsd-inetd inet-superserver
以下のパッケージが新たにインストールされます:
  proftpd-basic
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 439 個。
2,108 kB のアーカイブを取得する必要があります。
この操作後に追加で 4,391 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu/ oneiric/universe proftpd-basic i386 1.3.4~rc2-4 [2,108 kB]
2,108 kB を 4秒 で取得しました (437 kB/s) 
パッケージを事前設定しています ...
未選択パッケージ proftpd-basic を選択しています。
(データベースを読み込んでいます ... 現在 132678 個のファイルとディレクトリがインストールされています。)
(.../proftpd-basic_1.3.4~rc2-4_i386.deb から) proftpd-basic を展開しています...
ureadahead のトリガを処理しています ...
man-db のトリガを処理しています ...
proftpd-basic (1.3.4~rc2-4) を設定しています ...
警告: 指定されたホームディレクトリ /var/run/proftpd にアクセスできません。:そのようなファイルやディレクトリはありません
システムユーザ `proftpd' (UID 114) を追加しています...
新しいユーザ `proftpd' (UID 114) をグループ `nogroup' に追加しています...
ホームディレクトリ `/var/run/proftpd' は作成しませんでした.
システムユーザ `ftp' (UID 115) を追加しています...
新しいユーザ `ftp' (UID 115) をグループ `nogroup' に追加しています...
ホームディレクトリ `/srv/ftp' を作成しています...
`/usr/share/proftpd/templates/welcome.msg' -> `/srv/ftp/welcome.msg.proftpd-new'
ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration.
root@ubntu-VirtualBox:/# 
 /etc/proftpd/proftpd.confの Anonymousのコメント部を解除。
スーパーサーバーのはずなので…
外部から接続してもつながりません(笑)

なんのせっていがひつようだったっけかなと。

 /etcを見たところinetdやxinetdの姿が見えないのでxinetdを入れてみました。
 root@ubntu-VirtualBox:/# sudo apt-get install xinetd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています              
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  xinetd
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 439 個。
121 kB のアーカイブを取得する必要があります。
この操作後に追加で 397 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu/ oneiric/main xinetd i386 1:2.3.14-7ubuntu4 [121 kB]
121 kB を 0秒 で取得しました (219 kB/s)
未選択パッケージ xinetd を選択しています。
(データベースを読み込んでいます ... 現在 132772 個のファイルとディレクトリがインストールされています。)
(.../xinetd_1%3a2.3.14-7ubuntu4_i386.deb から) xinetd を展開しています...
ureadahead のトリガを処理しています ...
man-db のトリガを処理しています ...
xinetd (1:2.3.14-7ubuntu4) を設定しています ...
xinetd start/running, process 1747
 たしかサービスごとに設定するはず。検索してみました(笑)
 http://www.turbolinux.com/support/document/knowledge/466.html
多分、/etc/xinetd.d/ftpファイルを作成して再起動すればいけるはず?
とりあえずとりあえず接続することが出きるようになりました。

パッケージの削除

先日VMでコンパイルしたものを外部から参照させて実機にインストールしようとしていたのですが、vsftpdでは簡単に内部の特定のディレクトリを簡単に公開できないようなのでアンインストールしようかと思ったのですが、どうすればよいのやら(笑)

「Ubuntu パッケージ アンインストール」 で検索してみました。

検索した結果このページで何となく書いてあったので早速実行。
root@ubntu-VirtualBox:/srv/ftp/openwrt# sudo apt-get remove vsftpd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
  vsftpd
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 439 個。
この操作後に 467 kB のディスク容量が解放されます。
続行しますか [Y/n]? y
(データベースを読み込んでいます ... 現在 132724 個のファイルとディレクトリがインストールされています。)
vsftpd を削除しています ...
vsftpd stop/waiting
ureadahead のトリガを処理しています ...
ureadahead will be reprofiled on next reboot
man-db のトリガを処理しています ...
これでうまくアンインストールできたのでしょうか?

2012年5月22日火曜日

uhttpd option index_pageの複数のファイル名への対応

最初は/etc/config/uhttpdの設定ファイルを変更してrestartさせたり、/etc/init.d/uhttpdの起動スクリプトを変更してみたり右往左往していましたが、根本的な原因がわかってからコンパイルができるようになるまでにかなりの時間を要しましたが、実際に修正して対応するまでには約1日程度。
動作確認できるようになるまでに数時間という感じで手間はかかりましたがようやく満足できる内容になりました。

そもそもwebサーバーのインデックスページの指定が内部だと4つ持っているのに指定は1つとかかなり作りはマニアックな雰囲気なサーバーですね(笑)

修正方針としては
・暫定的なテストプログラムでc言語の動作確認。
・実際に作ったコードを組み込む作業。
・コンパイル/テスト
の3段階。

意外とネックなのが最後の段階で、現状VMからどうやってファイルを転送すればよいかということ。

最初は単純にVM側でftpサーバーなりwebサーバーを動かせばいいかなとおもったのですが、VirtualBoxでこれを行おうとするとそれなりに面倒なことになってそうでした。
ifconfigで見てみるとIPアドレスが10. で始まっているという。
びっくりしたのですが、どうやらViurtualBoxがルータとなってVMにはその内部LANで動作するという形になっているようです。いくつか設定方法があるのですがよくわからず。
ブリッジとかならうまく表に出てくるのかな?(→普通のPCと同じようにIPアドレスを取得して振舞うようになりました(笑))

コンパイル/テストは実際に動作させてるのですが。最初は出来上がった実行ファイルだけ入れればいいかなと思ってたんですが、実行ファイルがどこに作成されるのかがわからないという(笑)

結果 make で全部をコンパイルして
siriuth@ubntu-VirtualBox:~/dev/openwrt/backfire_10.03.1$ make
 make[1] world
 make[2] target/compile
 make[3] -C target/linux compile
 make[2] package/cleanup
 make[2] package/compile
 make[3] -C package/iproute2 compile
 make[3] -C package/6in4 compile
 make[3] -C package/6to4 compile
 make[3] -C package/wireless-tools compile
 make[3] -C package/acx compile
 make[3] -C package/arptables compile
 make[3] -C package/opkg host-compile
 make[3] -C package/base-files compile
 make[3] -C package/hotplug2 compile
 make[3] -C package/block-mount compile
 make[3] -C package/block-extroot compile
 make[3] -C package/linux-atm compile
 make[3] -C package/br2684ctl compile
 make[3] -C package/bridge-utils compile
 make[3] -C package/busybox compile
 make[3] -C package/button-hotplug compile
 make[3] -C package/libpcap compile
 make[3] -C package/ppp compile
 make[3] -C package/comgt compile
 make[3] -C package/compcache compile
 make[3] -C package/libnl-tiny compile
 make[3] -C package/iw compile
 make[3] -C package/mac80211 compile
 make[3] -C package/crda compile
 make[3] -C package/libtool compile
 make[3] -C package/cyassl compile
 make[3] -C package/dnsmasq compile
 make[3] -C package/dropbear compile
 make[3] -C package/e2fsprogs compile
 make[3] -C package/ead compile
 make[3] -C package/ebtables compile
 make[3] -C package/fconfig compile
 make[3] -C package/iptables compile
 make[3] -C package/firewall compile
 make[3] -C package/fuse compile
 make[3] -C package/ncurses compile
 make[3] -C package/libreadline compile
 make[3] -C package/gdb compile
 make[3] -C package/gpioctl compile
 make[3] -C package/hostap-driver compile
 make[3] -C package/hostap-utils compile
 make[3] -C package/libipfix compile
 make[3] -C package/wprobe compile
 make[3] -C package/madwifi compile
 make[3] -C package/hostapd compile
 make[3] -C package/hostapd compile
 make[3] -C package/hostapd compile
 make[3] -C package/hostapd compile
 make[3] -C package/hostapd compile
 make[3] -C package/hostapd compile
 make[3] -C package/i2c-gpio-custom compile
 make[3] -C package/ifenslave compile
 make[3] -C package/ipset compile
 make[3] -C package/lua compile
 make[3] -C package/iwinfo compile
 make[3] -C package/kernel compile
 make[3] -C package/zlib compile
 make[3] -C package/kexec-tools compile
 make[3] -C package/libjson-c compile
 make[3] -C package/libnl compile
 make[3] -C package/libubox compile
 make[3] -C package/mmc_over_gpio compile
 make[3] -C package/uci compile
 make[3] -C package/mountd compile
 make[3] -C package/mtd compile
 make[3] -C package/nvram compile
 make[3] -C package/ocf-crypto-headers compile
 make[3] -C package/openssl compile
 make[3] -C package/opkg compile
 make[3] -C package/resolveip compile
 make[3] -C package/pptp compile
 make[3] -C package/px5g compile
 make[3] -C package/qos-scripts compile
 make[3] -C package/relayd compile
 make[3] -C package/robocfg compile
 make[3] -C package/siit compile
 make[3] -C package/spi-ks8995 compile
 make[3] -C package/spidev_test compile
 make[3] -C package/swconfig compile
 make[3] -C package/uboot-envtools compile
 make[3] -C package/udev compile
 make[3] -C package/udevtrigger compile
 make[3] -C package/uhttpd compile
 make[3] -C package/util-linux-ng compile
 make[3] -C package/w1-gpio-custom compile
 make[2] package/install
 make[3] -C package/base-files install
 make[3] -C package/busybox install
 make[3] -C package/button-hotplug install
 make[3] -C package/crda install
 make[3] -C package/dnsmasq install
 make[3] -C package/dropbear install
 make[3] -C package/firewall install
 make[3] -C package/hostapd install
 make[3] -C package/hostapd install
 make[3] -C package/hostapd install
 make[3] -C package/hostapd install
 make[3] -C package/hostapd install
 make[3] -C package/hostapd install
 make[3] -C package/hotplug2 install
 make[3] -C package/iptables install
 make[3] -C package/iw install
 make[3] -C package/kernel install
 make[3] -C package/libnl-tiny install
 make[3] -C package/mac80211 install
 make[3] -C package/mtd install
 make[3] -C package/opkg install
 make[3] -C package/ppp install
 make[3] -C package/swconfig install
 make[3] -C package/uci install
 make[3] -C package/udevtrigger install
 make[3] -C package/wireless-tools install
 make[2] package/rootfs-prepare
 make[3] package/preconfig
 make[2] target/install
 make[3] -C target/linux install
 make[3] -C target/sdk install
 make[3] -C target/imagebuilder install
 make[3] -C target/toolchain install
 make[2] package/index
出来上がった 最低限のファイルをftpサーバーに入れて(これも即席でfilezillaでftpサーバーを動かして(笑))/etc/opkg.confの設定を変えてopkg update。そこからopkg install uhttpd --force-reinstallで強制的にアップデートをかけてから/etc/init.d/uhttpd restartで再起動とかやってみました。(opkgのコマンドラインヘルプを見ると-o とか --offile-root で指定すればパッケージファイルから直接インストールもできそうですが、よくわからない…)


2012年5月21日月曜日

strncatを試してみました。

一般的な話は知らないのですが早速試してみました。
siriuth@ubntu-VirtualBox:~/dev/test$ cat strncat_test.c
#include    <stdio.h>
#include    <string.h>
void main(void){
    char    s1[256], s2[256];

    strcpy(s1, "1234567890");
    strcpy(s2, "abcdefghijklmnopqrstuvwxyz");

    printf("s1: %s \n", s1);
    printf("s2: %s \n", s2);
    strncat(s1, s2, 10);

    printf("after strncat s1: %s \n", s1);
}
 コンパイルも細かい点は完全に忘れてるので
gcc strncat_test.c
とだけ行ったところ a.out という実行ファイルが作られたので
./a.out
で実行(笑)
siriuth@ubntu-VirtualBox:~/dev/test$ ./a.out
s1: 1234567890
s2: abcdefghijklmnopqrstuvwxyz
after strncat s1: 1234567890abcdefghij
siriuth@ubntu-VirtualBox:~/dev/test$ 
となりました。
やはり第三引数の長さは第二引数の文字数の指定ですね。

uhttp…だいじょうぶなのだろうか(笑)