ubuntuの小技

最近は、apt-getではなくて、aptなのね。Debian管理者ハンドブックによると、もっとも推奨されるのはaptとのことだ。
でも、apt list –installedとかすると、apt does not have a stabel CLI interfaceと警告が出る。
# apt update
# apt upgrade
# apt autoremove
# apt autoclean
リリースの表示は、/etc/lsb-releaseを見てもよい。
ハイフンとアンダーバーがややこしい。
# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
# cat /etc/debian_version
stretch/sid
# apt install nginx
# ufw app list
# systemctl start nginx
# systemctl status nginx
再インストール
# apt install nginx –reinstall
インストール済みパッケージの確認
# apt list –installed | grep -i nginx

再インストールで設定ファイルも含めて初期化するためには、パッケージをpurgeしておく必要があるが、autoremoveでもpurgeしておかないといけない。
# apt purge asterisk
# apt autoremove –purge
# apt install asterisk

タイムゾーンの変更
# dpkg-reconfigure tzdata

DNSサーバの問い合わせ、hostやdigを使うため。
Arch linuxなら、bind-toolsなのだが。
# apt install dnsutils
ドメインの情報には、whoisの方が便利。

ハイフンで始まるファイル名の削除
# rm -i — -bad_name

Woody時代

http://smalle.fc2web.com/
はじめに
YahooBBから,MEGA EGG(メガエッグ)に乗り換え,回線が高速化したので,高速ルータがほしくなりましたが,共有ディスクも必要だし,,,,
いままでは,Windows2000のインターネット共有でがんばっていましたが,夏になり?暴走することが頻発し,ついにLINUXサーバを建てることにしました。
SLS以来のLinuxとなり,ORCAも考え,Debianに決めました。ローカルなプロバイダのためか,MEGA EGGの情報が少ないため,自分のメモを兼ね,このページを作りました。
Linuxのインストール
Debianのインストールでは,ネットワーク経由が最も便利のようです。とりあえず,最小構成CDイメージをダウンロードしましたが,書籍や雑誌の付録で,インストールしてもOKです。
download CD-ROM image, Debian GNU/Linux 3.0 woody-i386-1.iso
burn CD-ROM with Nero
boot from CD-ROM
install debian following instructions
とりあえずネットワークカードの設定をしてください。あとで,PPPoEに使用するネットワークカードは,IPアドレス等を設定しないでください。
/etc/network/interfaces
/etc/resolv.conf
dselectが使えるように,sources.listを設定してください。
#vi /etc/apt/souces.list
PPPoEのセットアップ
Debian標準のpppoe-3.3ではどうしても,PPPoE接続できなかったので,rp-pppoe-3.5をインストールしました。まだインターネットにつながっていないなら,Windowsでダウンロードしておいて,Windowsのパーティションをマウントしてコピーすると簡単です。
get rp-pppoe-3.5.tar.gz in /usr/src
#tar zxvf rp-pppoe-3.5.tar.gz
#cd /usr/src/rp-pppoe-3.54
#./go
user name =
interface = eth1
demand value = no
DNS information = server
password =
mode = masquarade
#adsl-start
#ifconfig -a ppp0
ifconfig -a ppp0で,接続を確認してください。
eth1は/etc/network/interfacesでは,設定しないでください。しかし,当然ながらLinuxのドライバは認識している必要があります。
kernelの再構築
#dselect
iptablesを使用したり,ネットワークカードのドライバを,eth0をビルトインに,eth1をモジュールにするために,カーネルを再構築します。また,バックアップもかねて,2.4.18にバージョンもアップしておきます。
kernel-source-2.4.18-14.3
libncurses5-dev 5.2.20020112a-7
kernel-package 7.107
#cd /usr/src
#tar zvfj kernel-source-2.4.18.tar.bz2
#cd kernel-source-2.4.18
#make menuconfig
select eth0 NIC as built-in
select eth1 NIC as module
#make-kpkg clean
#make-kpkg kernel-image
#dpkg -i ../kernel-image-2.4.18_10.00.Custom_i386.deb
no
yes
#mv /etc/modules /etc/modules.org
#cat /etc/modules.org /dev/tty1 > /etc/modules
eth1 NIC module name
^D
#reboot
初期設定
とりあえず,スタート時にadsl-startを起動するために,リンクを張ります。余裕ができれば,ちゃんと起動スクリプトを作ってください。
#ln -s /usr/sbin/adsl-start /etc/ppp/ppp_on_boot
ルータとして使用するためには,iptablesの設定がとりあえず必要ですので,設定します。これも,余裕ができれば,ちゃんと作り直しましょう。
#cd /etc/default
#mv iptabes iptables.org
#cat iptables.org iptables.sam > iptables
#update-rc.d iptables defaults
#reboot
クライアントでは,eth0のアドレスをゲートウェイに,また,/etc/resolv.confのアドレスをDNSに設定しましょう。これで,クライアントからインターネットが利用できるはずです。
samba
共有ディスクとして使うために,sambaを設定します。普通の使用法なら,Debianの標準パッケージで十分のようです。
インストール後にsmb.confを設定します。
#dselect
samba 2.2.3a-13
#vi /etc/samba/smb.conf
時刻を合わせるために,ntpdateも導入しましょう。タイムサーバとしては,clock.nc.fukuoka-u.a.cjpを使いました。用途によっては,ntpdを導入したほうが良いかもしれません。
#dselect
ntpdate 4.1.0-8
#ntpdate clock.nc.fukuoka-u.a.cjp

なぜかMINIX 1.5

秋の夜長に、暇でもないのに、昔熱中したというか感動した、MINIXを久々に引っ張り出してみた。
1987年に教材用のOSとして誕生し、いまのlinux誕生のきっかけとなったものです。
PC-9800無印から、プロサイドのPC-AT互換機に早々と乗り換えていたので、洋書を注文して、熱中した。ハードディスクにインストールして使っていたが、ハードディスクのクラッシュで立ち消えになり、今となっては、すべてがうろ覚えです。
○MINIX 1.5
当時はV1.1を使っており、patchを当てまくったが、V1.5まではたどり着けなかった。
V1.7以降は、ANSI-CにPOSIXとなり、現在はV3となっているが、シンプルさを追求して、とりあえず、憧れのV1.5に挑戦。データはhttp://www.minix3.org/のPrevious versionsからダウンロード。
pcは360K、psは720Kのディスク用なので、ps版を使用する。
○VMware
新しくマシンを準備するわけにも行かないので、エミュレータを使用する。
Bochsでは動くけれど低速、VirtualPCとVMwareはuniv_boot.01を使用すれば、ブートメニューは表示されるが、RAMディスクの読み込みで停止してしまう。原因はディスク周りのようで、V1.5は3.5FD2HD(1440K)を完全にサポートしていないためと思われる。いろいろ試した結果、VMware6.5.3はディスクイメージファイルを720Kに合わせてやれば、動かすことができた。
disk.02(720K)でブートし、ルートのdisk.04(720K)に交換したのち、”=”(日本語キーボードでは”^”)でスタート。/usrディスクが要求されたら、disk.05に交換。これで、無事に起動する。
このままでも動くが、RAMディスクをルートにしたままでは、/tmpの容量が不足し、コンパイラが走らない。
○ハードディスク
ハードディスクはのパーティショニングは本来fdisk /dev/hd0でOKのはずだが、エラーが出るので他のOSに仮想ディスクを繋げて、partition 1を切って、MINIXのIDに変更する。
/etc/mount /devhd1 /userでマウントできることを確認できれば、/etc/setup_usrを参考にハードディスクにファイルを展開。その後。/etc/setup_rootを参考に、ハードディスクをルートに変更する。
ハードディスクを使用した場合は、ディスクの入れ替えは不要なので、/etc/rcを修正しておく。
disk.02(720K)で再起動し、ブートメニューでルートをh1にしてスタートすれば、OK。
○カーネルの再構築
/usr/src/kernelでconfig atを実行し機種設定し、kernel, fs, mmの各ディレクトリでmakeを実行。
その後、/usr/src/toolsでもmake allを実行する。あとは、720Kの仮想ディスクをセットし、make imageで書き込みをすれば完成。再起動して問題なければ、/usr/include/minix/boot.hを変更し、ルートを/dev/hd1に変更しておく。
○test
/usr/src/testでmake allを実行し、runでテスト開始。sh1のテストに必要なchipがないので、とりあえずスクリプトで補完。
#!/bin/sh
if test $1 = INTEL ; then exit 0 ; else exit 1 ; fi
sh2はrootで実行するとchmod test 2でエラーとなるがそれはOK
昔から、ちょっとしたバグがあり、ついつい楽しんでしまうので、バグに計画性を感じてしまう。
○その他
エディタは、Vi互換の昔懐かしいelvisが使える。ただし、これも/usr/tmpを使用するので、ハードディスクでなければ困難。
DOSとのデータ交換はdos*が使える。本体はdosreadなので、ln dosread dosdir ; ln dosread doswriteでリンクを張っておく。デバイスも、ln /dev/fd0 /dev/dosAと必要なリンクを張る。
これも、2DDまでの対応なので、720KのDOS仮想ディスクをセットし、dosdir aなどで、ファイルを確認したら、dosread a readme.txt > readmeなどと標準出力を書き込んでおく。
機能は貧弱だし、カレントディレクトリにPATHが通って、セキュリティの観念もない時代のOSだが、シンプルで、ほぼ全てがCで記述され、ライブラリのソースまでついている。
ASタネンバウム教授は、linuxに批判的であったことについては、大学人であったためにUNIXを渇望していた一般人の気持ちがわからなかったのではないかと思いますが、このMINIXの存在はlinuxの隆盛にも決して劣りません。MINIXのシステムは体系的で完成度が高く、このシステムがあったからこそ、linux開発のきっかけとなったとつくづく思います。
記念的なOSと思うのですが、当時あれだけあったV1系の資料が、今はインターネット上にほとんどないのが残念です。

そしてMINIX 1.5

懐かしくって、いろいろ触っているとなぜか、3.5インチの1.4MのDOSディスクが読めない。720KのDOSディスクはdosreadでちゃんと読み込めるのに。
ドライバではサポートされているみたいなのにと悩んだが、ソースをよく読んで解決。
デフォルトでは、ドライブAもBもAUTOMATICになっているので、5インチ1.2Mと区別できないようだ。
/usr/include/minix/config.hのDEFAULT_CLASSを0から3に変更してやると、ドライブAが3.5インチ、ドライブBが5インチとなり、3.5インチの1.4MのDOSディスクが読めるようになった。
昔はハードディスクを使っても再構築に時間がかかっていたのに、VMwareで動かしても、あっという間にできてしまう。思えば、Linuxも昔は再構築が割りと早かったなあ。

ついにsqueezeに移行

lennyのセキュリティアップデートも終わるかもしれないし、mediatombの0.12が使いたかったので、遅れること1年ついにsqueezeに移行した。
とりあえず、イントール用CDをダウンロードして、ネットワーク経由でインストール。
initrdなしのカーネルを再構築して、iptablesをセットして、sambaをセットして、とりあえず完成した。
いろいろ変わっているようなので、新規にインストールしたが、手がかかったので、lennyとのダブルブートにして正解であった。
ファイルサーバとしての速度はあまり変わらず、ルーターとしてのピーク速度は低下した。
しかし、アプリのバージョンアップで便利になった。
HDDをIDEからSATAに変更したら、BIOSのIDEアサインが変更されて、bootできず苦労した。
grubが1.98になって、HDDのアロケーションがUUIDでできるようになり、update-grubで全HDDとパーティションをスキャンするようになった。でもinitrdを使わないと、起動時はUIDDが使用できない。
fstabでは、UUIDが使えるので、ハードディスクの接続順が変わっても大丈夫。
apache2.2.16になって、なぜかproxyが通らなかったyahooのキャッシュにアクセスできるようになった。
squidもsquid3.1.6にバージョンアップしたが、なぜか、httpsにアクセスできなかった。
/var/log/squid3/cache.logをみると、comm_open: socket_failure: (97) Address family not supported by protocolとなっている。いろいろググった結果、Squidはipv4とipv6のhybrid socketを開くので、kernelでipv6を無効にしていたのが原因だったようです。
でも、digest認証をしていると、windows updateが通らないのは、イヤだ!
no-ipのIP更新パッケージがなくなっているので、別にダウンロードが必要だ。
結局、sambaの設定に一番苦労した。

ネットワークの設定

基本はいままで通り。
squeezeのインストール段階で、eth1はDHCPにしているので、DHCPクライアントはisc-dhcp-clientがインストール済み。
/etc/network/interfacesを編集して、eth0にLANの設定を追加。
ネットワークやブロードキャストアドレスは不用

auto eth0
iface eth0 inet static
address 192.168.xx.xx
netmask 255.255.255.0

dnsmasqをインストールして、/etc/dnsmasq.confを編集。

interface=eth0
domain=localnet
dhcp-range=192.168.xx.xx,192.168.xx.xx,255.255.255.0,24h
dhcp-host=winname,192.168.xx.xx
dhcp-ignore=tag;!known

/etc/dhcp/dhclient.confで
pretend domain-name-servers 127.0.0.1;をコメントアウトして
resolv.confに自分自身を加えるように変更。
/etc/hostsにローカルなホスト名を追加
以上で、ネットワークインターフェースとDNSキャッシュとDHCPサーバがセット完了。

sambaの設定

sambaの設定には悩んだ。
いままで同様に/etc/samba/smb.confを編集
[global]に文字コードなどを追加

dos charset = CP932
unix charset = UTF8
display charset = UTF8
interfaces = eth0
security = user

共有設定の追加

[share]
comment = Windows Public
path = /home/windows
browseable = yes
read only = no
create mask = 0660
directory mask = 0770
valid users = @windows
force group = windows

ユーザの追加

# adduser xx
# pdbedit -a xx

testparm /etc/samba/smb.confでrlimit-max: rlimit_max (1024) below minimum Windows limit (16384)のエラーが表示されるので、オープンファイルの上限を拡張する。

# ulimit -n 16384

これでエラーはなくなるので、ほんとはinitスクリプトに追加すべきと思うが、
/etc/security/limits.confを編集して、root – nofile 16384を追加
これでよいはずであるが、マシンの再起動後に動いていない。
sambaのチェックリストで調べても、原因がわからない。
とにかくなぜか、nmbdが正しく動いていない。
しかし、sambaを再起動すると、正常に動いている。

# nmblookup -S `hostname`
querying xx on xx.xx.xx.xx
name_query failed to find name xx
# /etc/init.d/samba restart
# nmblookup -S `hostname`
querying xx on xx.xx.xx.xx
xx.xx.xx.xx xx<00>
Looking up status on xx.xx.xx.xx

結局sambaの起動時にnetworkの準備ができていないためと勝手に結論づけた。
とりあえず、initスクリプトのLSBタグを変更し、起動順を変更した。
/etc/init.d/sambaを編集して、# Required-Start:タグの最後に$allを追加

# update-rc.d samba defaults

最近はinsservを使うらしい。

コンソール

まずは、カーネル再構築
make menuconfigで、フレームバッファを有効にする。
i915GMのドライバもありそうだが、X11を使用しないなら関係なさそうなので、intelfbを使用する。
ディスプレイのリフレッシュレートの標準が70Hzだとなぜか表示できないので、
/usr/src/linux/drivers/video/intelfb/intelfb.hを編集
PREFERED_MODE 1024×768-32@70 -> 60
あとは、通常通り
/etc/kernel-img.conf
/etc/keneel-pkg.conf

make-kpkg clean
make-kpkg kernel-image
cd ..
dpkg -i linux-xx.deb

grub

Grub 1.98になって、update-grubですべてのパーティションをスキャンしてくれる。
UIDDによって、アロケーションするので、HDDのデバイス名が変わっても問題ないが、
起動時にinitrdを使用しない場合は、UIDDが使用できない。
設定は、/etc/default/grubを編集することによって行う。
GRUB_DEFAULT=saved
GRUB_SAVEDEFALUT=true
前回、起動メニューをデフォルトにするためには、上記の2つが必要。
後者により、起動メニュー項目に、savedefaultが挿入される。