Debian jessie + さくらのVPSでLet’s Encryptを使う

どうやら最近SSL対応のサイトが増えているようで、「暗号化する必要あるんだろうか?」というどうでもいいサイトまでhttpにアクセスするとhttpsにリダイレクトされたりもします。
そうなってくると大手サイトがhttpを使っていると、まだSSL入れてなかったんかいなどと思ったりもします。

スマホもパソコンも速くなった今、全ての通信が暗号化されるのはいいことだと考えております。
かといって個人が証明書にお金払うのは微妙ですし(僕は前払ってましたけどもすごく微妙な気持ちになりました)、オレオレ証明書使うのは更に微妙です。

team2ch.orgもなんとなくSSLを入れてみたくなったので、2016年くらいから話題の「Let’s Encrypt」を使って無料で認証局から証明書を発行してもらいました。
それをApache2で使えるようにするまでの手順を書きます。

続きを読む

ネットワークカードを交換したらeth0が使えなくなった時の対処法(Debian, Ubuntu)

Ubuntu 14.04とDebianの古いシステム(squeeze)のネットワークカードを変えたらeth0が上がってこなくなりました。
Intel純正のPCI-Eアダプタ(Intel GIGABIT CT DESKTOP ADAPTER)、オンボードのLAN(これもPCI-E接続のIntelチップ)共に上がってこないという状況でした。

つまり状況としては両OSとも

    lspci | grep Intel → PCI-Eアダプタ、オンボードのLAN共に認識されている
    lsmod | grep e1000e → loadされている
    /etc/network/interfaces → 特に問題なし

    ifconfig → loは出てくるがeth0が出てこない

という感じでした。

ググってみたら、MACアドレスとethxの対象関係は

    /etc/udev/rules.d/70-persistent-net.rules

に記述されていると分かりました。

なので、アナログな方法でネットワークカードのMACアドレスを調べて、NAME=”eth0″を付けるカードを指定し直すことで問題解決しました。
分かれば簡単でしたが、半日ほどハマりました。

参考URL:Ubuntuでネットワークカードを変更した時

LinuxでAndroidのrootを取る方法(Get the root by using your Linux computer)

世間ではWindows上でOdinを使ってrootを取っているようです。(Almost the people which would like to get the root of his Android mobile use Odin on Windows.)

しかしWindowsでやるよりLinuxでやったほうが楽なので紹介します。(But by using Linux, there is easier way to get the root.)

まずOdinの代わりにheimdallとheimdall-frontendをインストールします。(First, you can install heimdall and heimdall-frontend instead of Odin.)

sudo apt-get install heimdall heimdall-frontend

heimdall-frontendを起動します。(Start heimdall-frontend.)

heimdall-frontend

その後、UtilitiesからDetect Deviceを押し、端末を認識させます。(After that push the “Utilities -> Detect Device” botton to recognize your device.)

確認できたらPrint PIT -> Printを押し、Androidのパーティション情報を手に入れます。(Check your device is recognized by heimdall, you push “Print PIT -> Print” to get partition information of your Android device.)

次に、Flash -> Options -> PITから先ほど保存したPITを指定します。(Next, you specify previous PIT file on “Flash -> Options -> PIT” .)

右下のAddボタンを押し、Partition Nameに焼きたい場所(recovery.imgならRECOVERY、system.imgならSYSTEM)、Fileに焼く.imgファイルを指定します。(Push the Add botton and choose Partition Name. Notes that if your .img file you want to burn was “recovery.img, you can choose RECOVERY. If it was system.img, you can choose SYSTEM. On Files blank, push Browse and find your .img.)

できたらStartを押して経過を眺めてください。(If there was no ploblem, you push Start botton.)

NEC MultiWriter 5000N (Xerox Docuprint 2020、Brother HL-2170W) をLinuxでネットワーク上から使う

NEC MultiWriter 5000Nというモノクロレーザープリンタを、7,980円という値段に惹かれて買いました。モノクロながらレーザーかつネットワーク対応でこの値段とは驚きです。
買ったはいいのですが、Linuxで動かすのに苦労したので使用方法を書いておきます。ディストリはUbuntu 12.04 64bit (Precise Pangolin)です。CUPSの問題なので他ディストリでも同様に動くと思われます。

NEC MultiWriter 5000NはXerox Docuprint 2020やBrother HL-2170Wと製造元/構造が同じです。いわゆるOEMというやつです。なので同じドライバで動くようです。
設定は、http://localhost:631/からしました。他のGUIからやっても同様だと思われます。
予めCUPSやFoomatic (Linuxのプリンタドライバ集のようなもの)がインストールされていることを前提にします。

方法:

1. まず、Windows向け付属ソフトウェアでプリンタに固定IPアドレスを割り振る必要があります。Windows機にCDを入れて上手いこと固定IPにしてください。

2. プリンタの設定画面を開き、URLに以下を書きます。THE_PRINTER_IP はWindows機で設定したプリンタのIPアドレスです。

ipp://THE_PRINTER_IP/ipp/port1

3. メーカーは「Brother」を選択します。

4. 機種は「Brother HL-2170W Foomatic/hl1250」を選びます。recommendedなどは全て無視してください。

5. その他の設定を必要に応じてやります。

以上です。Linuxから使えなかったら買い直しだったので危ないところでした。と言っても7,980円ですけどね。

プリンタ購入/導入時の参考になれば幸いです。

参考:Tutorial on installing the Brother HL-2170W (and the HL-2140) printer with CUPS on Arch Linux.

Debianのブートディスクを交換

ルーター機のブートドライブを300GのHDDから32GBのSSDに交換しました。
逆の場合であれば# dd で一発なのですが、ディスク容量が小さい方への移行なのでそうはいきません。なので地道にやってみました。OSはルータがDebian、母艦がUbuntuです。最悪、起動しなくても最初のほうでバックアップを取ってるので復旧は容易かと思われます。

・ファイルシステムのバックアップ
旧HDDを母艦に接続して丸ごとcp -R するだけです。

# 旧HDDのUUID (gpartedかなにかで調べられます)
HDD_UUID=732cf650-8bc9-44b0-b2fd-9aa1a7743f60

sudo cp -R /mount/${HDD_UUID} .

・新SSDのフォーマット
gpartedかなにかでやると楽です

・新SSDへファイルをコピー

# 新SSDのUUID (gpartedかなにかで調べられます)
SSD_UUID=3fe19005-d2cb-4dd7-ae79-858ca95de327

cd ./${HDD_UUID}
sudo cp -R . /media/${SSD_UUID}

・ブート領域を作ってあげる
僕が前に書いた記事GRUBを飛ばしてしまいシステムが起動しなくなったときの救出方法と同様のことをやります(再掲)
詳しくは元リンクを参考にしてください。

# /boot パーティションのUUID./ 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
BOOT_UUID=0e0670da-9711-4eab-8025-b26dba90d576

# 救出先システム上/ のUUID
SYS_UUID=21427729-aef2-4a52-8d28-d6e90804c659

sudo mount --bind /proc /media/${SYS_UUID}/proc
sudo mount --bind /sys /media/${SYS_UUID}/sys
sudo mount --bind /dev /media/${SYS_UUID}/dev
# / 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
sudo mount --bind /media/${BOOT_UUID} /media/${SYS_UUID}/boot

sudo chroot /media/${SYS_UUID}
# たとえば/dev/sdeに grub をインストールしたい時
grub-install /dev/sde
update-grub
exit

sudo umount /media/${SYS_UUID}/proc
sudo umount /media/${SYS_UUID}/sys
sudo umount /media/${SYS_UUID}/dev
# / 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
sudo umount /media/${SYS_UUID}/boot

・HOMEディレクトリのownerを元に戻す
HOMEの所有者を旧HDDシステムで使っていたユーザ名に戻してやります。やらないと、SSHが通らなかったり何かと不便です。


cd /media/${SSD_UUID}/home
sudo chown -R user:user ./user

・suが通るようにする
これもパーミッション設定なのですが、あまり見慣れない形式です。詳しくはsudo で 「sudo: must be setuid root」と怒られる – 不会忘記的一天に書いてあるとおりです

# chmod 4511 /usr/bin/sudo

・繋ぐ
SSDを繋いで起動することを確認。以上。

参考リンク
sudo で 「sudo: must be setuid root」と怒られる – 不会忘記的一天

GRUBを飛ばしてしまいシステムが起動しなくなったときの救出方法

GRUB のアップデートをした後や,Linux のインストール直後にGRUB Error が出てシステムが起動しないことがあります.そんなときの対処法を書いておきます.
なお,GRUBの設定ファイルは,GRUB2では/boot/grub/menu.lst が廃止され,/etc/default/grub# grub-install を実行したあとに生成される/boot/grub/grub.cfg になったようです.

まず,システムをLiveCDから起動するか,母艦のUSBにレスキューしたいハードディスクを繋ぎます.
/boot パーティションが/ と分けられている場合は別途mount してあげる必要がありますが,流れは全く同じです.
パーティションのUUIDは$ blkid で調べられます.よく分からなければgparted を使うといいかもしれません.
今回は/media/UUID に自動でmount されていることを仮定しています.

母艦の/ /boot と,レスキュー対象の/ /boot を混同しないように気を付けましょう.

# /boot パーティションのUUID./ 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
BOOT_UUID=0e0670da-9711-4eab-8025-b26dba90d576

# 救出先システム上 / のUUID
SYS_UUID=21427729-aef2-4a52-8d28-d6e90804c659

sudo mount --bind /proc /media/${SYS_UUID}/proc
sudo mount --bind /sys /media/${SYS_UUID}/sys
sudo mount --bind /dev /media/${SYS_UUID}/dev
# / 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
sudo mount --bind /media/${BOOT_UUID} /media/${SYS_UUID}/boot

sudo chroot /media/${SYS_UUID}
# たとえば/dev/sdeに grub をインストールしたい時
grub-install /dev/sde
update-grub
exit

sudo umount /media/${SYS_UUID}/proc
sudo umount /media/${SYS_UUID}/sys
sudo umount /media/${SYS_UUID}/dev
# / 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
sudo umount /media/${SYS_UUID}/boot

/media/${SYS_UUID}chroot を設定し,# update-grub を実行しています.
ただし,その為には(CHROOT_DIR 下に)/proc/sys/dev が必要なので,動いているシステムのものをそのままmount しています.ですので,LiveCDから起動した方がより堅実かもしれません ((そこまで気にすることもないと思いますが,AMD64の環境をIA-32のシステムでmount したらどうなるのだろう・・・試してないので分かりません)).
mount--bind オプションは,chroot 下でもmount 先にアクセスできるようにするためのものです.

OpenSSHを使ってRSA公開鍵認証なchroot付きSFTPサーバを立てる方法

簡単なように思えて,結構ハマったのでメモしておきます.
SSH サーバは既に稼働していることを前提に書きますので,SSH,SSHd の細かい設定は他サイト様に委ねます.

仕様および前提

sftpを許可するユーザ: ftpuser(シェルでのログイン不可)
ftpuserの所属グループ: ftpgroup
ftpuserのhome: /home/ftpuser
ftpuserに公開したいディレクトリ: /pass/to/chrooted

環境

$ lsb_release -drc
Description: Ubuntu 11.10
Release: 11.10
Codename: oneiric

$ uname -r
3.0.0-13-generic

$ ssh -v
OpenSSH_5.8p1 Debian-7ubuntu1, OpenSSL 1.0.0e 6 Sep 2011

まずサーバ側でftpgroup,ftpuser を作成します.

# groupadd ftpgroup
# useradd --create-home --home /home/ftpuser --shell /bin/false -g ftpgroup

確認

$ getent group | tail -n 1
ftpgroup:x:133:ftpuser

$ getent passwd | tail -n 1
ftpuser:x:1001:133::/home/ftpuser:/bin/false

/etc/group/etc/passwd を直接編集するという強行手段でも構わないのですが,ログオフが必要な上に結構危険です.
編集するにしても,vigrvipw という専用のコマンドがあります.

クライアント側でRSA鍵ペアを作成します.既に作成済みの場合,飛ばしてください.

$ ssh-keygen -t RSA -b 2048

できたら,エディタでもUSBメモリでもscp でも構わないので,クライアントの~/.ssh/id_rsa.pub をサーバの/home/ftpuser/.ssh/authorized_keys にコピーします. ((今回はPC1 -> PC2 へはssh可能,PC2 -> PC1 へはsftp のみ可能としたかったので,scp 使えるならsftp 要らないじゃん,というツッコミは無しで.))
通常のSSHと同じですね.
パーミッションは以下のように設定します.

/home                755   root:root (おそらくデフォルトでOK)
/home/ftpuser          755   root:root
/home/ftpuser/.ssh        700   ftpuser:ftpgroup
/home/ftpuser/authorized_keys  600   ftpuser:ftpgroup

処理系によっては,authorized_keys が700 の場合もあるようです.既にSSH ログイン可能なuser の/home/user/.ssh を確認してみてください.
ここで注意しなければならないのが,/home/ftpuser の所有者がroot だということです.とはいえ,ここまでは単にchown すればいいだけです.
問題はここからです. /passpass/to//pass/to/chrootedもそれぞれ所有者がroot かつ他ユーザの書き込み不可である必要があります.
「そうすべき」ではなく「そうする必要があります」.
これは,セキュリティの観点からルール化されたものです.詳しい背景はここに書いてあります
それじゃあ/pass/to/chrooted/media/hard_disk/ftp にしたいけど,/media/hard_disk の所有者は一般ユーザに残しておきたい・・・ということができないかというと,そんなことはありません.以下に方法例を書いておきます.と言ってもSimLink貼るだけです.

# cd /home/ftpuser
# ln -s /pass/to/chrooted ./
# chown root:root /pass/to/chrooted
# chmod 755 /pass/to/chrooted

/home/ftpuser の所有者はroot に設定してあるので,/pass/pass/to(あるいは/media/media/hard_disk)の所有者がroot である必要はなくなります.
また,/pass/to/chrooted の所有者はroot である必要があるのですが,/pass/to/chrooted/data の所有権はftpuser:ftpgroup で構いません.
普段使ってるユーザをftpgroup に加えておくか,/pass/to/chrooted/data のパーミッションを777 にでも設定すれば管理が楽でしょう.おそらく前者のほうがセキュリティ的には好ましいと思われます.

次に/etc/sshd_config をエディタで編集します

#AuthorizedKeysFile %h/.ssh/authorized_keys
AuthorizedKeysFile %h/.ssh/authorized_keys

#Subsystem sftp /usr/local/libexec/sftp-server
Subsystem sftp internal-sftp

# 最後の行に以下を追記.全角スペースは半角に変換
Match user ftpuser
 ChrootDirectory /home/ftpuser/chrooted
 AllowAgentForwarding no
 X11Forwarding no
 AllowTcpForwarding no
 ForceCommand internal-sftp

internal-sftp を使うのは,ftpuser はchroot をかけたディレクトリの外に出られないからです.
つまり,/usr/local/libexec/sftp-server にもアクセスできなくなるからです.

書けたら

/etc/init.d/ssh restart

クライアント側からサーバ(192.168.1.1)にアクセスしてみます.ssh -p-p はポートですが,sftpでは-P(大文字)です.

$ ssh -p 10000 ftpuser@192.168.1.1
Enter passphrase for key '/home/client_user/.ssh/id_rsa':
This service allows sftp connections only.
Connection to 192.168.1.1 closed.

$ sftp -P 10000 ftpuser@192.168.1.1
Enter passphrase for key '/home/client_user/.ssh/id_rsa':
Connected to 192.168.1.1.
sftp> exit

上手くいかなければssh -vsftp -v してみれば何か分かるかもしれません.
もう一度,所有権をまとめて書いておきます.

/home/ftpuser/:
drwxr-xr-x root:root .
drwxr-xr-x root:root ..
lrwxrwxrwx root:root share -> /pass/to/chrooted

/home/ftpuser/.ssh:
drwx------ ftpuser:ftpgroup .
-rw------- ftpuser:ftpgroup authorized_keys

/pass/to/chrooted
drwxr-xr-x root:root .
drwxrwxrwx ftpuser:ftpgroup data

nautilus のFile -> Connect to Server にでも登録しておくと便利かもしれません.

参考サイト
restrictive ssh problem (ForceCommand, ChrootDirectory): Write failed: Broken pipe
あるシステム管理者の日常: sftpとChrootDirectory(3)
 

Ubuntu 12.04 64bitでPT2を使う(Ubuntu 10.10〜12.04対応)

この記事は,あくまで技術上可能なことを一般論として説明したもので,PT2,カードリーダー,その他のハードウェアおよびソフトウェアの使用を推奨するものではありません.
また,この記事を読んだことにより読者に生じた一切の損害を管理人soraochiは負わないものとします.

話題にするには遅すぎる感はありますが,PT2 とB-CAS カード買ってきました.
B-CASカードのオマケでKTV-FSUSB2が付いてきましたが,これはまた今度改造します.

追記 KTV-FSUSB2(殻のほう)は友人にあげてしまいました


今回,PT2 をUbuntu 10.1011.10 64bit12.04 64bit で使ってみました.同様の記事が他ブログでも盛んに書かれていますが,中には怪しいものもあるような気がします ((あまり余所を批判したくないのですが,無条件にLNB電源をオンにすることを推奨するのは如何なものか)).
このブログも知識,手順,解決方法の面で怪しい点が多々あることは自覚しておりますが,ここはひとつ,先人の言葉を引用させていただき,開会の言葉とさせていただきます.

このページに存在するすべての間違いは、意図されていたかいなかったかに関わらず、読者のための練習問題もしくは冗談である

まずは環境紹介から.

マシンスペック

OS Ubuntu 11.10 64bit Ubuntu 12.04 64bit
CPU Core2Duo E8400
マザーボード GA-P35-DS3
ビデオカード GV-NX96T512HP

今回追加するハードウェア

主役 PT2 Rev.B
ICカードリーダー SCR3310-NTTCom (+青CAS)
予備のカードリーダー Reflex USB v2

ICカードリーダーを使えるようにしましょう.

sudo apt-get install libccid pcsc-tools libpcsclite-dev pcscd

B-CASカードの裏表に注意してください.B-CASカードの裏面が見えるように差し込むのが正解です.
これは,住基カード等では表面,B-CASカードでは裏面にICチップの接点があるのが原因だと考えられます.

できたら

sudo pcsc_scan

を実行してください.ズラズラと文字が出て,最後に

Japanese Chijou Digital B-CAS Card (pay TV)

が出たら上手くいってます.確認できたらCtrl+C で終了します.
もしマイナーなカードリーダーを使っていて,「Waiting for the first reader...」で止まってしまった場合はいるかのさんの記事を参考に/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist を編集します.

編集したら

sudo /etc/init.d/pcscd restart

を忘れずに.

それでもダメな場合(うちがそうでした)諦めましょう・・・と言いたいところですが,昔アキバで100円で買ったカードリーダーReflex USB v2 があったので,試しに使ってみました.
買ってきたままの状態ではLinux 64bit では使えないので,ファームをアップデートしてやる必要がありました.ファームのアップデートはUbuntu 11.10 64bit からでも可能です.
Reflex v2購入->SCR331に書き換えてみるテストを参考にSCMのホームページからSCR331のファームをダウンロードして/home/user にでも展開します.ファームの当て方の例を書いておきます(バージョンによって違うと思う)

cd FWUpdate_SCR531_SCR331_linux_USB_V5.25
./install.sh
./fwupdate_v1.6

Browse からSCR531_V525.bin を選択.Reader はそれっぽいのを選択 -> Download

その後,Linux 64bit用ドライバをインストールします.ここからダウンロードできます.稀奇特にも同型のものをお持ちの場合ご利用ください.

SCMのカードリーダーは,カードが刺さった状態で正常動作しているとLEDが点滅するようです.LEDがつきっぱなしの場合,B25のデコードが上手く行かない可能性が高いです.
多くの場合,テスト録画の段階で気付くと考えられますので,対処法は後ほど書きます.

さて,次にARIB STD-B25 仕様確認テストプログラムをmake install します.
ttp://www.marumo.ne.jp/db2007_b.htm#25 から「ARIB STD-B25 仕様確認テストプログラム」の最新版をダウンロードしてコンパイルするのがスジですが,下記方法の方がmakefileが既に作られてるので楽です.
インストールされるバージョンも0.2.4 で同じですので,下記を薦めます.

sudo apt-get install build-essential
wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
unzip c44e16dbb0e2.zip
cd pt1-c44e16dbb0e2/arib25
make
sudo make install

Ubuntu 11.10 ではカーネルのバージョンが異なるため,従来の方法ではchardev 版ドライバのコンパイルが通りません.また,recpt1 のBS新 チャンネルに対応させるため,sourceforge のepgrec 置き場からrecpt1 のtar.gz をダウンロードしましょう

(2011 年10 月にBS のチャンネルが再編成されました.詳しくはググってください).
2011年12月03日現在の最新版では,解凍するとディレクトリ「pt1-7662d0ecd74b」ができます.
Kernel3系だとdriverのコンパイルに失敗するため,パッチ済みのpt1_pci.c

も合わせてダウンロードしておきます.

$HOME に展開したと仮定すると

cd ~/pt1-7662d0ecd74b/recpt1
make
sudo make install
cd ../driver
make
sudo make install

これで/usr/local/bin/ にb25 およびrecpt1 がインストールされます.
PT2を刺すと,Ubuntu 10.10 からは標準ドライバ(DVB版)が使われるようになったそうです.詳しい方がDVB 版で試しているようですが

僕は成功例の多い「chardev版」を使いました.
Ubuntu 11.10 でも引き続き「chardev版」を使います.12.04でも同様にchardev版を使います。

/etc/modprobe.d/blacklist.confの最後の行にblacklist earth-pt1 を追記すればDVB版ドライバはロードされなくなります.

sudo apt-get install mercurial autoconf automake
hg clone http://hg.honeyplanet.jp/pt1 PT2
cd PT2/driver
make
sudo make install

ここで一回再起動します.既にPT2 を刺してるかたは,再起動でなく電源オフ→オンしたほうが良いです.僕はこれでハマりました.

PT2 が認識されているかは

$ lspci |grep Xilinx
06:01.0 Multimedia controller: Xilinx Corporation Device 222a (rev 01)

chardev版ドライバが使用されているかは

$ ls -lart /dev/ |grep pt1
crw-rw-rw- 1 root video 250, 3 2011-03-03 20:58 pt1video3
crw-rw-rw- 1 root video 250, 2 2011-03-03 20:58 pt1video2
crw-rw-rw- 1 root video 250, 1 2011-03-03 20:58 pt1video1
crw-rw-rw- 1 root video 250, 0 2011-03-03 20:58 pt1video0

で確認ができます.「$ ls /dev/dvb/」でadapter0〜3が出てくるときは,DVB版ドライバがロードされています.

インストールできたら

recpt1 --b25 --strip 22 30 test.ts

を試してみましょう.SSD を使ってる等の理由で,カレントディレクトリに大きなサイズのファイルを作りたくない場合,予め適宜cd してください.
東京タワーから受信している場合,TBS(22ch)が30 秒録画されるはずです.

totem test.ts

再生できたら成功です.画質がとんでもなくショボいときは,アンテナの接続を疑いましょう.ワンセグで録画されている可能性があります.

もし下記のようなエラーが出たら

Recording...
b25->put failed
b25_decode failed (code=-4). fall back to encrypted recording.

B25 のデコードができていません.どうやらOneiric(Ubuntu 11.10)のスマートカード周りにバグがあるみたいです.Marverick(10.10) のものなら正常動作する可能性があります.(参考)Ubuntu11.10 で録画用サーバ

/etc/apt/sources.listの末尾に

deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu maverick main universe
deb-src http://ftp.jaist.ac.jp/pub/Linux/ubuntu maverick main universe
deb http://security.ubuntu.com/ubuntu maverick-security main universe
deb-src http://security.ubuntu.com/ubuntu maverick-security main universe

を追記後

sudo apt-get update
sudo apt-get remove pcscd libpcsclite-dev libpcsclite1 libccid libpcsc-perl pcsc-tools
sudo apt-get install pcscd=1.5.5-3ubuntu2.1 libpcsclite1=1.5.5-3ubuntu2.1 libccid=1.3.11-1

libpcsc-perl=1.4.8-1pcsc-tools=1.4.16-1 は,依存関係を解消できないらしく,簡単にはインストールできませんでした.

The following packages have unmet dependencies:
libpcsc-perl : Depends: perlapi-5.10.0

libpcsc-perl=1.4.8-1pcsc-tools=1.4.16-1 のLucid のdeb パッケージを拾ってきてインストールすると,動くには動くんですが依存関係が壊れてapt に叱られます.
それでは元も子もないので,次の方法を使いました.ただし,かなりゴリ押しな上に,メンテナに検証されていない組み合わせなのでお薦めはしません.

pcscd,libpcsclite1,libccidを,インストールしたバージョン(pcscd=1.5.5-3ubuntu2.1 libpcsclite1=1.5.5-3ubuntu2.1 libccid=1.3.11-1)で固定する.apt-get ならhold,Synaptic ならPackage -> Force version

apt-get install pcsc-tools=1.4.16-1

依存関係からlibpcsc-perl=1.4.12-1build1 がインストールされる

pcsc-tools とlibpcsc-perl のバージョンを固定する

ここで何をしているのかもう少し詳しく説明します.
まず,libpcsc-perl=1.4.8-1perlapi-5.10.0 に依存していて,pcsc-tools=1.4.16-1libpcsc-perl に依存しています.
Ubuntu 11.10 のperl5.12.4-4 なので,perl のバージョンを落とすという吹っ飛んだことをしない限りはlibpcsc-perl=1.4.8-1 はインストールできません.
しかし,pcsc-tools=1.4.16-1libpcsc-perl に依存しているにすぎず,libpcsc-perl=1.4.8-1 である必要は,少なくとも依存関係の上ではありません
ということで,libpcsc-perl のみをOneiric,他をMaverick でインストールするというゴリ押しをしたのでした.

以上の作業が終わったら,追加したmaverickのapt-lines はコメントアウトします.

次にepgrec

を使えるようにします.epgrec は,PHP で書かれた録画予約システムです.動かすには,PHP+Apache+MySQL が必要です.

sudo apt-get install apache2 php5 libapache2-mod-php5 php5-cli mysql-server php5-mysql

入っていなかった場合,インストールしたら念のため再起動しておいてください.
これでApacheがインストールされるのですが,もしセキュリティ的に気になるようであれば,/etc/apache2/apache2.conf,あるいは/etc/apache2/httpd.confにLocalからしかアクセスできない設定を記述してください.(まあ,ポートが野放しにでもなってない限り,外部からはアクセスできないと思いますが)

また,epgrec は「epgdumpr2」にも依存しています.epgdumpr2 は,「インストール前の準備」からepgdumpr2-utf8.tar.gz,あるいはepgdumpr2.tar.gzをダウンロードし,以下のようにインストールします.
epgrec およびepgdumpr2 はsourceforgeから最新版をダウンロードし,解凍しておきます.

cd epgdumpr2
make
sudo cp epgdump /usr/local/bin

test.tsのあるディレクトリで,$ epgdump test test.ts - | less を実行してズラーッっと番組名っぽいのが出てきたら成功です.

$ at を実行して The program 'at' is currently not installed が出てきたら,aptから入れてください.
また,上記サイト記載のとおり,apache2 からat を実行できるようにしておきます.

引用:

/etc/at.denyの設定
epgrecはWebサーバーのユーザーアカウント(Debian/Ubuntuはwww-data、RedHat?系ではapache)でatコマンドを実行しますが、セキュリティ上の配慮からatの使用禁止ユーザーリスト/etc/at.denyに、Webサーバーのアカウントが設定されている場合があります。
管理権限(root)で/etc/at.denyを開き、www-dataやapacheといった、Webサーバーのアカウントが含まれていないか調べ、含まれていたら、その行を必ず削除してください。

/etc/passwdの確認
一部のディストリビューションでは、セキュリティ上の配慮からWebサーバーのアカウントにnologin(ログイン不可)が設定されています。nologinのアカウントではatコマンドも利用できず、epgrecによる録画予約が機能しません。 rootアカウントで/etc/passwdを開き、Webサーバーのアカウント(apacheなど)のエントリを調べ、シェルの設定が/sbin/nologinに設定されているようなら、/bin/shに変更しておきましょう。

apache:x:48:48:Apache:/var/www:/sbin/nologin
↓下記のように変更
apache:x:48:48:Apache:/var/www:/bin/sh

以上の設定をしっかりと行っておかないと、録画予約に失敗します。

MySQLで,必要なテーブルを作っておきます.
この操作では,特段MySQLの設定をしていない場合MySQL のroot 権限が必要ですが,Ubuntu のroot 権限は要しません

mysql -u root -p

create database epg;
grant all privileges on *.* to [username]@localhost identified by '[Password]';
exit

username,password,データベース名(例ではepg)は,なんでも構いません.
よく分からなくなってしまったら,PHP もインストールしたことですし,PHPMyAdmin 使うといいです.

epgrec を

sourceforgeのreleaseページからダウンロードして展開,設定します.

tar zxvf epgrec-20100322.tar.gz -C /var/www/
cd /var/www/epgrec
cp config.php.sample config.php
cp do-record.sh.pt1 do-record.sh
gedit /var/www/epgrec/config.php

エディタでconfig.php 内のチャンネルマッピングを設定します.
物理チャンネルは,どの中継局から電波を取っているか(あるいはCATVのパススルーか,トランスモジュレーションか,集合住宅の場合U-U 変換,U-V 変換をしていないかetc・・・)によって異なります.東京タワーから電波を取っている場合,このページ記載の通りです物理チャンネルは,地上波デジタル/地上波アナログの場合,13ch〜62ch の間で設定されるチャンネルであり,リモコンのチャンネルとは一般に異なります.

設定できたら,ホームディレクトリ(あるいは大きいファイルが生成されても構わないディレクトリ)に移動し

OUTPUT=test.ts CHANNEL=22 DURATION=30 TUNER=0 MODE=0 TYPE=GR /var/www/epgrec/do-record.sh

を実行します.チャンネルは適宜変えてください.東京タワーから電波を取っている場合,上記コマンドでTBS が30 秒録画されたら成功です.上手くいかなければ,TUNER の番号(0〜3)を変えてみてください.
うまくいったら,http://localhost/epgrec/にアクセスします.言われるがままに設定してください.データベース名,パスワードはさっき設定したやつです.
もしなんらかの理由(SSD を使っている,他の大容量HDD に保存したい・・・等)で/var/www/epgrec/video/以下に録画したデータを直接置きたくない場合,この設定で相対パスを書いてもいいんですが,SimLink 貼っておくんでも大丈夫です.

ちゃんと設定したはずなのにEPG を受信できないチャンネルがある場合,電波の受信状態を確認してください.確認後,http://localhost/epgrec/getepg.phpにアクセスし,正常に取得できていればOKです.僕はここでハマりましたが,結局,分配器がショボかったのが原因でした.(分配器くらいケチらずいいものを買いましょう.あと,タコ足するならブースター付けましょう)

EPGを常に最新に保っておきたい場合,cronの設定が必要です.僕はいまのところ設定してません.必要になったらやればいいと考えてます.

EPG の自動更新は,例えば以下のように設定します.この場合,午前4時30分に更新されます.

crontab -e
30 4 * * * /var/www/epgrec/getepg.php

権限の与え方にもよるのですが,

sudo su
sudo www-data

を実行してからのほうが良いかもしれません.

あとはhttp://localhost/epgrec/にアクセスして録画予約するだけです.

・・・Ubuntu 10.10 よりはハードルが上がりましたが,できないことはないです.

参考URL
Ubuntu10.10を使って快適な地デジ録画環境を作る①〜④
epgrecのインストールと設定

追記(2012-05-05) カーネルのバージョンが変わったときは,ドライバの再インストールが必要です.aptからカーネルをアップデートした際にも必要です.

cd ~/pt1-7662d0ecd74b/driver
make
sudo make install

2011年3月  10.10版公開
2011年12月  11.10向けに全面改訂
2012年09月  12.04で動作確認.少しだけ改訂

gnuplotによる関数近似とガウス分布での例

gnuplotは,単体で最小自乗法による関数近似ができます.関数は計算機上で表現可能な任意関数ですので,テーラー展開,フーリエ級数展開,ガウス関数など,色々扱えます.
今回は例として,ガウス分布の関数近似が妥当であるかの検証をしてみます.

ガウス分布に従うデータとして,微小時間当たりの放射線量,試験の採点結果が有名です.
インターネットでいいデータがないかと探してみたら,次のものを見つけました.

平成23年新司法試験短答式試験結果 平成23年短答式試験結果[PDF:148KB]
平成23年新司法試験短答式試験得点別人員調(各科目最低ライン40%点以上)
http://www.moj.go.jp/jinji/shihoushiken/jinji08_00048.html

データを加工して,gnuplotで扱える形式にしました(問題があれば消しますので言ってください).上限,下限の点数については悩みましたが,140〜314点で考えることとしました.
結果テキスト

これをplotすると

set xrange [140:314]
set yrange [0:120]
plot 'sihou_s' pt 2 lt -1 lw 2


こうなります.どう見てもガウス分布です.

関数近似をする前に,μとσの初期値を与えてやらないと計算が上手く収束しません.
μは,理想的には最大値を与えているxとなるはずですので,μ=230を初期値とします.σは見当がつきにくいので,大雑把に目分量で20としておきます.
また,表中の全人数Nは,7797人です.

sigma=20
mu=230
f(x)=7797/(sqrt(2*pi)*sigma)*exp((-(x-mu)**2)/(2*sigma**2))
fit [140:314]f(x) "sihou_s" using 1:2 via sigma,mu

Final set of parameters Asymptotic Standard Error
======================= ==========================

sigma = 30.4499 +/- 0.3865 (1.269%)
mu = 229.571 +/- 0.4721 (0.2057%)

早速代入してみましょう

set xrange [140:314]
set yrange [0:120]
sigma=30.4499
mu=229.571
f(x)=7797/(sqrt(2*pi)*sigma)*exp((-(x-mu)**2)/(2*sigma**2))
plot 'sihou_s' pt 2 lt -1 lw 2, f(x) lt 1 lw 2 w l


概ね合っているように見えます.

ここで,じゃあ本当のμとσはいくらだったのか?という疑問が残りますが,表計算ソフトで一瞬で求まります.

μ=226.96
σ=29.489

このデータもさっきのグラフにまとめて載せてみましょう.

赤がgnuplotのfitにより求めたμとσによるガウス分布*N,青が表計算ソフトで求めたμとσによるガウス分布*N,黒が実測値とエラーバーです.
エラーバーで汚くなっておりますが,エラーバーの大きさの割に,赤と青が近いことが分かります.
ただし,実際の値はgnuplotが吐き出したAsymptotic Standard Errorの範囲内に収まっていないです.
gnuplotによる関数近似は手軽で有用かもしれないが,過信はよろしくないということが分かりました.