0.前準備
1.セルフコンパイル環境を構築する( dev_img の導入・設定)
2. uucp(cu) をコンパイル・インストールする
3. cu を ipk 形式のパッケージにする
巻末付録(笑). cu_1.07_arm.ipk をインストールする
私は、 diffutils_2.7 をインストールした(Naorou Takagiさん、感謝!!)。
※以下はターミナルから su して作業を行う。
これでセルフコンパイルの環境は整った。
※以下はターミナルから su して作業を行う。
これで cu が使えるようになった。満足。
折角の初パッケージングなので、にゃののん氏のドキュメントを参考に、
※以下はターミナルから su して作業を行う。
これでパッケージは完成した。
ダウンロードしたら、「設定」→「ソフトウェアの追加と削除」でインストール。
例:
終了するときは、「~」(チルダ)に続いて「.」(ピリオド)を入力する。
以下のように入力すれば、使い方が表示される。
また、以下のように入力すれば、バージョン情報等が表示される。
※ XON/XOFF でフロー制御を行う機器は、 cu では通信出来ない(未確認)。
0.前準備
「設定」→「バックアップ/リストア」及び母艦でのバックアップツールで、バックアップを取っておく。
※非常に重要。私は、本作業中に5回位リストアした。
cmp コマンドは、 diffutils や armutils に含まれている。
インストール方法は、「設定」→「ソフトウェアの追加と削除」だけの為、割愛。
diff もインストールされるので、実は本ドキュメントを作成するのに便利だったり(^^;)
1.セルフコンパイル環境を構築する( dev_img の導入・設定)
※セルフコンパイル環境の構築は、たなかとしひささんのサイトを参考に行いました。
ここにあるのは、自身の作業記録に過ぎません。
下記では /mnt/dev_img(実体は /home/system/var/mnt/dev_img ) としている。
# mkdir /mnt/dev_img
編集内容は diff の出力を参照。
※SDカードが何時でも差さっているとは限らないので、起動時に勝手にマウントされないよう、
マウントオプションに noauto を指定しておく。
※ noauto を指定している場合、再起動の度にマウントし直す必要がある。
# cp -ip /etc/fstab /etc/fstab.bak←一応バックアップ
# vi /etc/fstab
# diff /etc/fstab.bak /etc/fstab←バックアップと比較
6a7
> /mnt/card/dev_img-1.3 /mnt/dev_img cramfs loop,rw,noauto 0 0
# mount /mnt/dev_img
# mount←マウントされていることを確認
:
/dev/loop0 on /home/system/var/mnt/dev_img type cramfs (rw)
セルフコンパイルが出来るように設定する。
# /mnt/dev_img/bin/compiler_setup.sh -r /mnt/dev_img
# /mnt/dev_img/bin/gcc --version←パス指定で gcc が実行出来ることを確認
2.95.1
コマンドサーチパスに dev_img の bin ディレクトリを追加する。
今回は bash, sh の両方で設定されるよう、 .profile を編集、設定を追加する。
# cp -ip ~/.profile ~/.profile.bak←一応バックアップ
# vi ~/.profile
# diff ~/.profile.bak ~/.profile←バックアップと比較
7a8
> PATH=$PATH:/mnt/dev_img/bin
# . ~/.profile←現在のシェルに設定を反映
# gcc --version←パス指定無しで gcc が実行出来ることを確認
2.95.1
少しでも大きなファイルをコンパイルしようとするとすぐエラーとなる(※2)。
その為、 TMP(または TMPDIR ) として別の(空き容量の大きい)ディレクトリを指定する必要がある。
幸い /var/tmp(実体は /home/system/var/tmp ) があるので、今回はここを使わせてもらうことにした。
# TMP=/var/tmp; export TMP
私は SL-C760 で作業を行ったため、スワップの設定は特に必要無かった。
※とりあえず Hello World は試したが、ここでは割愛。
2. uucp(cu) をコンパイル・インストールする
Google 等で調べてみたところ、
cu コマンドは uucp のパッケージに含まれている事がわかった。
とりあえず、 uucp パッケージをまるごとコンパイル・インストールしてみる事にする。
今回、展開先は /usr/local/source としているが、空き容量さえ十分であれば何処でも良いと思われる。
# mkdir /usr/local/source←該当ディレクトリを作成
# cd /usr/local/source
# gzip -dc /mnt/card/Document/application/x-gzip/uucp-1.07.tar.gz | tar tvf -←内容を確認
:
# gzip -dc /mnt/card/Document/application/x-gzip/uucp-1.07.tar.gz | tar xvf -
:
# ls
uucp-1.07
# cd uucp-1.07
# ls
:
README ...
:
# more README
:
スプール関連のディレクトリ設定を /usr/spool から /var/spool に変更する。
編集内容は diff の出力を参照。
これを変更しないと、コンパイル後に cu 等のコマンドが実行出来ない(※5)。
# cp -ip policy.h policy.h.bak←一応バックアップ
# vi policy.h
# diff policy.h.bak policy.h←バックアップと比較
575,576c575,576
< #define SPOOLDIR "/usr/spool/uucp"
< /* #define SPOOLDIR "/var/spool/uucp" */
---
> /* #define SPOOLDIR "/usr/spool/uucp" */
> #define SPOOLDIR "/var/spool/uucp"
583,584c583,584
< #define PUBDIR "/usr/spool/uucppublic"
< /* #define PUBDIR "/var/spool/uucppublic" */
---
> /* #define PUBDIR "/usr/spool/uucppublic" */
> #define PUBDIR "/var/spool/uucppublic"
647,648c647,648
< #define LOGFILE "/usr/spool/uucp/Log"
< /* #define LOGFILE "/var/spool/uucp/Log" */
---
> /* #define LOGFILE "/usr/spool/uucp/Log" */
> #define LOGFILE "/var/spool/uucp/Log"
654,655c654,655
< #define STATFILE "/usr/spool/uucp/Stats"
< /* #define STATFILE "/var/spool/uucp/Stats" */
---
> /* #define STATFILE "/usr/spool/uucp/Stats" */
> #define STATFILE "/var/spool/uucp/Stats"
661,662c661,662
< #define DEBUGFILE "/usr/spool/uucp/Debug"
< /* #define DEBUGFILE "/var/spool/uucp/Debug" */
---
> /* #define DEBUGFILE "/usr/spool/uucp/Debug" */
> #define DEBUGFILE "/var/spool/uucp/Debug"
そのまま configure すると何故か prefix ディレクトリの設定がおかしくなるので(※4)、
prefix ディレクトリには明示的に /usr/local(または prefix として望むパス) を指定する必要がある。
※上記では出力結果をログとして保存している。(configure.log)
# ./configure --prefix=/usr/local 2>&1 | tee configure.log
:
※1
cmp コマンドを導入していない場合、ここで cmp コマンドが無いと言われ、
configure が正しく終了しない。
※上記では出力結果をログとして保存している。(make.log)
# make 2>&1 | tee make.log
:
warning が多く出力されているが、これらはソースの記述が現在の C の厳格な基準に沿っていない為に出力される警告で、
殆どの場合、実害は無い。
※2
デフォルトのテンポラリ領域は空き容量が殆ど無いため、
テンポラリ領域に充分な空き容量があるディレクトリを指定しないと、
/tmp が空き容量不足で gcc コマンドが実行出来ないと言われ、 make が Error 終了する。
※3
りなざうのバッテリ駆動時のオートパワーオフ設定は、デフォルトでは10分後となっている。
コンパイルには時間が掛かるため、ACアダプタを接続しておかないと、
上記設定のままではコンパイル中に突然電源が切れてしまい、正しくコンパイルされない場合がある。
#尤も、私はその時ACアダプタが手元に無かった為、
#バッテリ駆動時のオートパワーオフを30分(MAX)にして何とか対応しました(^^;)
#本来は、ACアダプタを使用して作業する方が本筋でしょう。
最下行のメッセージが気になった為調べたところ、どうもりなざうのカーネルが uucp に対応してないっぽい。
# ./uuchk
config file: /usr/local/conf/uucp/config
sys file: /usr/local/conf/uucp/sys
port file: /usr/local/conf/uucp/port
dial file: /usr/local/conf/uucp/dial
dialcode file: /usr/local/conf/uucp/dialcode
passwd file: /usr/local/conf/uucp/passwd
call file: /usr/local/conf/uucp/call
Spool directory /var/spool/uucp
Public directory /var/spool/uucppublic
Lock directory /var/spool/uucp
Log file /var/spool/uucp/Log
Statistics file /var/spool/uucp/Stats
Debug file /var/spool/uucp/Debug
Global debugging level
uucico -l will strip login names and passwords
uucico will strip UUCP protocol commands
Start uuxqt once per uucico invocation
./uuchk: no systems found
(ちょっと自身無し。日本語ドキュメントが見つけられなかった為、英語のドキュメントからそう解釈した。)
しかし、私としては cu さえまともに使えればいいので、そのまま作業を続行することにした。
本当は cu 以外はインストールしなくても良いのだが、適切なターゲット指定が解らなかった為、
まるごとインストールする。
※上記では出力結果をログとして保存している。(install.log)
# make install 2>&1 | tee install.log
:
warning が多く出力されているが、これらはソースの記述が現在の C の厳格な基準に沿っていない為に出力される警告で、
殆どの場合、実害は無い。
※4
configure を引数無しで(デフォルト設定のまま)行うと、
何故か prefix が /mnt/dev_img( dev_img のマウント先!!) に設定されてしまい、
結果、 make install の際に /mnt/dev_img に対してインストールしようとして、 Error 終了することになる。
#デフォルトの prefix は /usr/local になっているのに...
#おかげで完全にリストアする羽目になってしまった。バックアップはしとくもんだねぇ(^^;)
該当ディレクトリを作成する。
また、 cu コマンドは、どのユーザで起動してもユーザ uucp に setuid してコマンドを実行するため、
ディレクトリの所有者を uucp にしておく必要がある。
# mkdir /var/spool/uucp
# chown uucp /var/spool/uucp
シリアルケーブルとして CE-170TS を使用、家のルータである MN128-SOHO Slotin に接続。
※ちなみに、 XON/XOFF でフロー制御を行う機器の場合、 cu(uucp) では通信出来ない(未確認)。
デバイスファイルには /dev/ttyS0(CFのシリアルカードだと違うかも) 、速度は 9600bps を指定する。
# CE-170TS であまり速い速度を指定すると、データの取りこぼしが多い気がする...
#ま、シャープ自身はサポートしてるとは言ってないんで、しゃ〜ないかな?
AT コマンドを実行すると、 MN128-SOHO Slotin と通信出来ていることが分かる。
# cu -l /dev/ttyS0 -s 9600
Connected.
AT
OK
ATI2
MN128-SOHO-Slotin
OK
~.
Disconnected.
ちなみに終了するときは、「~」(チルダ)に続いて「.」(ピリオド)を入力する。
※5
所謂通常通りの手順で configure, make, make install を行うと、
スプール関連のディレクトリが /usr/spool に設定された状態でインストールされる。
しかし、りなざうには該当ディレクトリが存在せず、また /usr は Read Only の為、新規に作成することも出来ない。
そのため、 cu コマンドを実行すると、エラー終了する。
#何故かデバイスファイルが Line in use と出るので紛らわしい(--;)
しかもこの設定、 configure でも Makefile でも正しく設定出来ない。
実はこの設定、インクルードファイル policy.h に埋め込みで記述されているので、このファイルを編集、修正する必要がある。
りなざうの場合、 /var/spool に修正するのが最も適切と思われる。
※6
cu は、 /var/spool/uucp のディレクトリ(実はユーザ uucp のホーム)が無いと実行出来ない。
#やはりデバイスファイルが Line in use と出るので紛らわしい(--;)
このディレクトリはデフォルトでは存在しないため(ユーザは存在するのに...)、
予め作成して、ディレクトリの所有者やパーミッションを適切に設定する必要がある。
他の uucp 関連のツールは...どうでもいいや。どうせ使わんし(笑)
3. cu を ipk 形式のパッケージにする
とりあえず、コンパイル・インストール・実行を何度も試行することにより、
cu のバイナリと /var/spool/uucp のディレクトリさえあれば cu は実行出来るような気がしてきた。
( uucp のユーザは(何故か)最初から設定されているし...)
てな訳で、この2つを ipk 形式でパッケージングして、何時でも簡単にインストール出来るようにする。
#実際は、このパッケージを作った後リストアして、
#このパッケージだけをいれることで、スマートに cu のみをインストールしようという算段(^^;)
ipkg-build を使わずに動作を理解しながらやってみることにする。
# cd ~
# mkdir work
/usr/local は /home/root/usr/local のシンボリックリンクなので、実際のパスで記述する。
インストール先の階層が出来たら、そこに cu をコピーする。
ちなみに、 /var/spool/uucp は空ディレクトリの為アーカイブに出来ないようなので、
後から postinst で作成することにする。
# mkdir -p work/home/root/usr/local/bin←横着して、まとめてディレクトリを作っている
# cp -ip /home/root/usr/local/bin/cu work/home/root/usr/local/bin/cu
# mkdir work/work
Description の内容は、 `cu -v` で表示されるバージョン情報から拝借(^^;)
# vi work/work/control
# cat work/work/control←内容を確認
Package: cu
Priority: optional
Section: extras
Maintainer: luckytamtam@ybb.ne.jp
Architecture: arm
Version: 1.07
Depends:
Description: cu (Taylor UUCP) 1.07
Copyright (C) 1991, 92, 93, 94, 1995, 2002 Ian Lance Taylor
一応既にあるファイルを上書きで消してしまわないようにとの配慮だが、とり越し苦労の可能性が大(^^;)
# vi work/work/preinst
# cat work/work/preinst←内容を確認
#!/bin/sh
INSTDIR=/home/root/usr/local/bin
SPOOLDIR=/home/system/var/spool
if [ -e $INSTDIR/cu ]; then
mv $INSTDIR/cu $INSTDIR/cu.`date +%y%m%d%H%M%S`.bak
fi
if [ -e $SPOOLDIR/uucp ]; then
mv $SPOOLDIR/uucp $SPOOLDIR/uucp.`date +%y%m%d%H%M%S`.bak
fi
# chmod 755 work/work/preinst←一応実行属性を付けている。必要かどうかは未確認
ipk パッケージを「アプリケーションの追加/削除」でインストールすると、
アーカイブ内のユーザ情報に係らず、ユーザ root, グループ qpe でインストールされるようだが、
cu は ユーザ uucp 権限でないと正しく動作しない。
また、パーミッションはある程度引き継ぐようだが(未確認)、 setuid の情報は引き継がれないため、
ユーザ uucp に setuid する設定は失われてしまう。このため、 chown, chmod で再設定してやる必要がある。
また、アーカイブに出来なかった /var/spool/uucp を作成、パーミッション設定を行うようにする。
# vi work/work/postinst
# cat work/work/postinst←内容を確認
#!/bin/sh
INSTDIR=/home/root/usr/local/bin
SPOOLDIR=/home/system/var/spool
chown uucp $INSTDIR/cu
chmod 4555 $INSTDIR/cu
mkdir $SPOOLDIR/uucp
chown uucp $SPOOLDIR/uucp
# chmod 755 work/work/postinst←一応実行属性を付けている。必要かどうかは未確認
# cd work/work
# tar cvf ../control.tar ./*←(カレントディレクトリを含む)隠しファイルはアーカイブしない
:
# cd ..
# gzip control.tar
# rm -rf work←不要になった作業ディレクトリは削除
# cd ..
実際に使えることも確認している。巻末付録(笑)を参照のこと。
巻末付録(笑). cu_1.07_arm.ipk をインストールする
ちなみに、 SL-C700, SL-C760 では正常に動作することを確認している。
-r-sr-xr-x 1 uucp qpe 114420 Aug 22 12:03 /home/root/usr/local/bin/cu
drwxr-xr-x 2 uucp qpe 0 ??? ?? ??:?? /home/system/var/spool/uucp
シンボリックリンクにより、其々 /usr/local/bin/cu, /var/spool/uucp としても参照可能。
$ cu -l 接続先デバイスファイル名( /dev/ttys0 等) -s 接続速度( 9600 等)
$ cu -l /dev/ttyS0 -s 9600
Connected.
AT
OK
ATI2
MN128-SOHO-Slotin
OK
~.
Disconnected.
$ cu --help
ちなみに、ここでもこのソフトウェアがGPLであることが確認出来る。
$ cu -v
※「~」(チルダ)を入力する必要がある機器は、 cu では通信出来ない可能性がある(未確認)。
この駄文に責任を持たない人:
たむたむ
戻る