Posted by & filed under 未分類.

昨日記事を書いたpt3ドライバにおいて、ハイバネートからリジュームした後に録画を実行しようとすると、録画ツールがエラー終了する。以下のメッセージがdmesgに記録され、どうもデバイスが有効にならない様である。

[30539.520051] PT3: fail i2c run_code status 0x32
[30541.012034] PT3: fail i2c run_code status 0x32
[30541.016047] PT3: fail i2c run_code status 0x32
[30541.036035] PT3: fail i2c run_code status 0x32

PT3を使う Gentoo on MicroServerにて少し触れられていたが、上記エラーが発生するときはモジュールの再ロードをすると解決するようなので、pm-utilのプリポストスクリプトにおいてハイバネートとリジュームでそれぞれrmmodとmodprobeをするように設定した。
この設定は、pm-utilsを利用している前提である。

# cd /etc/pm/sleep.d/
# cat > 80pt3drv
#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin

case "${1}" in
hibernate|suspend)
if lsmod | grep pt3_drv > /dev/null 2>&1; then
rmmod pt3_drv
fi
;;
resume|thaw)
modprobe pt3_drv
;;
esac

^D
# chmod a+x 80pt3drv

Posted by & filed under 未分類.

血迷ってPT3を買ったため、Debianメディアサーバに組込み、早速ドライバを導入した。
* Amazon
カーネルドライバはまだ有志による野良コードなので、そこから拾ってきてビルド、カーネルモジュールとしてロードさせることになる。

材料を調達する

  1. 環境はdebian GNU/Linux sid。
  2. カーネルモジュールの配布元  https://github.com/m-tsudo/pt3 からソースを入手する。
  3. メディアサーバでdkmsを使えるようにする。
    $ aptitude install dkms build-essential

    *build-essentialは要らないかもしれない。dkmsだけで試してみても良いだろう。

インストール

  1. 適当なディレクトリにpt3ソースを配置する
  2. pt3/dkms.confの内容にあるPACKAGE_NAMEとPACKAGE_VERSIONに設定されている値を組合せたものにpt3ディレクトリの名前を変更する。
    PACKAGE_NAME="pt3_drv"
    PACKAGE_VERSION="0.0.1"
    PACKAGE_RELDATE="2012-07-07"
    MAKE="make KVER=${kernelver} dkms"
    BUILT_MODULE_NAME[0]="pt3_drv"
    DEST_MODULE_LOCATION[0]="/kernel/drivers/video/"
    AUTOINSTALL="YES"

    NAMEとVERSIONから、pt3_drv-0.0.1という名称にする。

    $ mv pt3 pt3_drv-0.0.1
  3. dkmsでインストール
    $ sudo dkms add pt3_drv-0.0.1
    $ sudo dkms install pt3_drv/0.0.1 # ※ - を / にする
  4. lsmodで確認
    lsmodでドライバがロードされているか確認する。されていなければmodprobeでインストールする。
    $ lsmod | grep pt3
    なにも表示されない
    $ sudo modprobe pt3_drv
    $ sudo depmod -a
    $ lsmod | grep pt3
    pt3_drv 37090 0

    心配な場合は再起動してから再確認すること。

  5. /dev以下を確認
    ls -l /dev/pt3*
    crw-rw-rw- 1 root video 248, 0 Aug 27 23:54 /dev/pt3video0
    crw-rw-rw- 1 root video 248, 1 Aug 27 23:54 /dev/pt3video1
    crw-rw-rw- 1 root video 248, 2 Aug 27 23:54 /dev/pt3video2
    crw-rw-rw- 1 root video 248, 3 Aug 27 23:54 /dev/pt3video3

今日はここまで。

Posted by & filed under 未分類.

4年以上付き合ってきたDELLのLatitude E4300の電池が遂に息絶えたので、thinkpad twistを購入した。当然Debianを入れて使うつもりだったが、嫁がWindowsでOfficeのトレーニングをしたいと言うのでWindows8 pro+Office付きにしてデュアルブートすることにした。
悲しいことに、デュアルブートのインストールするくらいで2日潰してしまった。

Windows関連でググるとチラ裏が大量に出て、色々と苦労したのでここにメモする。

DebianインストーラUSBキーを準備する

USBメモリの準備

電池の死んだLatitudeで、Debianインストーラを準備する。
その辺に落ちてたUSBメモリを拾い、パーティションをfdiskで切る。(下みたいな感じ)

[root@mypc]# fdisk /dev/sdb (USBメモリ)
Command (m for help): p

Disk /dev/sdb: 8166 MB, 8166703104 bytes
256 heads, 63 sectors/track, 989 cylinders, total 15950592 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18

Device Boot Start End Blocks Id System
/dev/sdb1 * 2048 15950591 7974272 e W95 FAT16 (LBA)

mkdosfsでパーティションをフォーマットする(vfatでは後でブートしないので注意)

[root@mypc]# mkdosfs /dev/sdb1

unetbootinでUSBにインストールCDを構築

unetbootin を入手して、debianのイメージをUSBに書きこみ。手順は本家を参照のこと。
上記で作成したUSBインストーラに、firmwareというフォルダを作成する。
そこにwifiとかで必要になりそうなファームウェアを展開して保存しておく。

Thinkpadのパーティションを切り直す

最近はパーティションが後から切られるようになったようだ。管理ツールからボリュームの管理を選択して、Cドライブをガッツリ半分に縮小する。(システム予約ファイルの配置によっては思った通りに空かない可能性がある。自分は460GB中200GBくらい縮小できた)空いた領域はなにもせず次の手順へ。

Debianをインストールする

USBメモリを挿したままリブートする。Thinkpadもそうだったが、最近はWindows UEFIが最初に起動するようなので、ブートメニューを出すようにする。そして、BIOSの設定でSafebootを切ることなどをしておく(自分の環境では、安全でないブートといったエラーでブートしなかった)。
インストーラからいつものようにインストールする。この辺の内容は他のチラシの裏に譲る。

ちなみに、sidのインストールイメージを使ったせいか、ベースファイルをインストールしただけでtaskselまで行けずに失敗してしまった。
その後はchrootでベースシステムに入り、適当にaptitudeからインストールを進めてしまった。ちなみにインストーラの画面でAlt+F2などを押すと、インストーラ環境でshellログインができる。それをつかって以下のようにすれば、basefileのインストールが済んでいることが条件になるが、パッケージインストーラによってインストールを無理矢理続行することができる。
sh # cd /target
sh # mount –bind /proc /target/proc
sh # chroot /target
~# aptitude …

Grubのセットアップ

最近のWheezyなどではもしかすると勝手にやってくれるのかもしれないが、上記理由から自分でGrubセットアップをしなければならかったので、手順を掲載しておく。
~# mkdir /boot/efi
~# mount /dev/sda2 /boot/efi
~# aptitude install grub-efi
~# update-grub
要約すると、boot/efiに UEFIがインストールされているパーティションをマウントし、grub-efiをインストールすると、EFI領域にGrubがインストールされる。

Posted by & filed under 未分類.

とりあえず。
自分のPCにdebian入れたときにやっておくことをここにメモ。

  • キーボードをctrl:swapcapsにする
  • kernelをRTにしてできればリビルド

Posted by & filed under 未分類.

全然ぐるーびーな感じがしないwww
実行にはApache Commonsのcompressライブラリが必要。

groovy -cp /path/for/jar/commons-compress.jar Test.groovy <アーカイブファイル>

ファイルは、カレントディレクトリに展開されます。

…などと、以下のような長ったらしいスクリプトを書いていると、
@kiy0taka 氏からこんな素敵なスクリプトを頂きました。
groovy -e “args.each{new AntBuilder().unzip(src:it, dest:’.’, encoding:’Windows-31J’)}” hoge.zip

挫けずに書こう…
—–

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.OutputStream;

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;

class Test {
public static void main(String[] args) {
args.each {
ArchiveInputStream str = new ZipArchiveInputStream(new FileInputStream(new File(it)), "Windows-31J", false);

for (ArchiveEntry ent = str.getNextEntry(); ent != null; ent = str.getNextEntry()) {
String fullpath = ent.getName();
if (fullpath.lastIndexOf('/') > -1) {
new File(fullpath.substring(0, fullpath.lastIndexOf('/'))).mkdirs();
}
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(fullpath)));
byte[] buf = new byte[1024];
for (int len = str.read(buf, 0, buf.length); len > -1; len = str.read(buf, 0, buf.length)) {
out.write(buf, 0, len);
}
out.close();
}

str.close();
}
}
}

Posted by & filed under 未分類.

今更だけど Ark-perl をインストールしようとした。
Makefile.PLでエラーが出るので、とりあえずググりつつ必要そうなモジュールをインストールする。

perl -MCPAN -e shell

cpan > install Module::Install
cpan > install Module::Install::TestBase

これらが有れば、とりあえずコンパイレーションエラーは出なくなると思う。

Posted by & filed under 未分類.

CSV parser. It maybe work for CSV file that is exported from Excel. but it doesn’t support multiline cell.

hpackage jp.underthetree.csvparser;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class CsvFile {

private List rows = new ArrayList();

// read from stream
public static CsvFile createFromStream(InputStream st) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(st));
CsvFile file = new CsvFile();
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
file.getRows().add(new CsvRow(line));
}

return file;
}

// list implementation of CsvRow
public List getRows() {
return rows;
}

// output to stream
public void writeToStream(OutputStream st) throws IOException {
BufferedWriter wri = new BufferedWriter(new OutputStreamWriter(st));

for (Iterator it = getRows().iterator(); it.hasNext();) {
wri.write(((CsvRow)it.next()).toCsvString());
}
}

public String toString() {
return rows.toString();
}

public static class CsvRow {

private List cells = new ArrayList();

public CsvRow() {}

// read from line
public CsvRow(String line) {
final StringBuffer buf = new StringBuffer();

boolean openQuot = false;
for (int i = 0; i < line.length(); i++) {
char c = line.charAt(i);
openQuot ^= (c == '"');

if (!openQuot && c == ',') {
this.cells.add(new CsvCell(buf.toString()));
buf.setLength(0);
} else {
buf.append(c);
}
}
}

// output comma separated line
public String toCsvString() {
StringBuffer buf = new StringBuffer();

Iterator it = getCells().iterator();
for (buf.append((String)it.next());
it.hasNext();
buf.append(",").append((String)it.next()));

return buf.toString();
}

// list implementation of CsvCell
public List getCells() {
return cells;
}

public String toString() {
return cells.toString();
}
}

public static class CsvCell {

public static final String QUOT_CHAR = """;
public static final String QUOT_ESCAPE = """";
private final String rawData;

public CsvCell(String data) {
rawData = data;
}

// cook cell's "
public static CsvCell createCsvCellFromFormat(String data) {
StringBuffer buf = new StringBuffer();
char lastChar = 0;
for (int i = 0; i < data.length(); i++) {
char c = data.charAt(i);
if ((lastChar != '"' && c != '"') ||
lastChar == '"' && c == '"') {
buf.append(c);
}
lastChar = c;
}

return new CsvCell(buf.toString());
}

// output escaped string of cell data
public String toCsvString() {
if (rawData.indexOf(QUOT_CHAR) > 0) {
return quote(rawData.replace(QUOT_CHAR, QUOT_ESCAPE));
} else if (rawData.indexOf(",") > 0) {
return quote(rawData);
}

return rawData;
}

// output contents text
protected String quote(String str) {
return QUOT_CHAR.concat(rawData).concat(QUOT_CHAR);
}

public String toString() {
return rawData;
}
}
}

Posted by & filed under 未分類.

perl -e ‘$l=8;@c=(33,35..38,40..126);print chr(39) . join(“”, map{chr($c[int(rand(scalar(@c)))])} (1) x $l) . chr(39) . “n”;’

Posted by & filed under 未分類.

Dropboxのサイトに行くと分かると思うが、Linux版があってもUbuntuと赤帽しかない。
ということで以下サイトを参考に実行。

Dropbox On Debian | tensixtynote

1. sources.listにdropboxのUbuntuリポジトリを入れる

deb http://linux.dropbox.com/ubuntu karmic main

2.aptitudeでインストール…
と思いきや、libnautilus-extensions1の依存関係が無い!

ビルドしか無いのか…