久しぶりに起動して、apt-get update して、apt-get upgrade した。
ついでに、自宅のプリンタ複合機 EW-M725Tのスキャナドライバも更新した。
EPSONのドライバページでは、Ubuntu armhf用のバイナリパッケージを提供していないので、ソースパッケージからビルドする必要がある。
さらに以前ビルドした時、RaspberryPI3でセルフビルドできなかった。
同時に起動されるJOB数が多すぎて、メモリ不足になるのだ。swapを2GBぐらいにしてもダメだった(スラッシングになってもビルドできるなら待ったのだが、どうにもダメだった)。
結局、ビルドのためにchrootとqemu-user-staticを使った仮想環境でビルドした。
今回も、同じようにPC上に仮想環境を用意してビルドした。
今年のはじめに母艦のストレージをM.2 SSDに載せ替えていたので、以前作った環境は無くなっており、作り直した。
それらを順番に説明していく。
簡単に説明すると、chrootはルートディレクトリを変えて別のファイルツリー環境(chroot監獄)に封じ込めるのに使う。
USB bootable Ubuntu を作って遊んでいた頃に、squashfs圧縮イメージの環境を更新する時に使っていた。
qemu-user-staticは、qemuを使ったユーザ環境のエミュレーションで、システムコールをネイティブのものに置き換えて実行する。
つまり、armhf用のバイナリをamd64上で実行したとき、armhfのシステムコールをamd64カーネルのシステムコールに置き換えて呼び出す。
そのためユーザ空間のみのエミュレーションであり、カーネルやハードウエアのエミュレーションをしないので、性能が落ちにくい。
とても便利なのだが、これらを自力で組み合わせてエミュレーション環境を作るのは、ナニゲにしんどい。
(以前は自力でコツコツやっていた)
しかし、debootstrapとschrootを使うととても簡単にできる。
以下のページでそのやり方が紹介されている。
Introduction to qemu-debootstrapこのページでは、arm64 の xenial の環境を作っているが、私はRaspberryPI3 なので、armhf になり、Ubuntu 20.04 なので、focalになる。
それらを読み直して、実行する必要がある。
例えば、armhf-focalの作成は、
$ sudo qemu-debootstrap --arch=armhf focal armhf-ubuntuschrootコンフィグレーションの作成は、
$ echo "[armhf-ubuntu] description=Ubuntu 20.04 Focal (armhf) directory=$(pwd)/armhf-ubuntu root-users=$(whoami) users=$(whoami) type=directory" | sudo tee /etc/schroot/chroot.d/armhf-ubuntu上記は例だ。元のページをよく読んで、作業をせよ。
インストールには、ネットワーク接続が必要だ。さらに時間もかかる。
しばらく待つと、armhf focalの環境ができるので、その中に入って作業をする。
$ schroot -c armhf-ubuntu (armhf-ubuntu)xxx@yyy:$上記のxxxはユーザ名、yyyはホスト名。
プロンプトの先頭が"(armhf-ubuntu)"になっていれば、エミュレーション環境に入っている。
試しに'uname -m'を実行してみると、
(armhf-ubuntu)xxx@yyy:$ uname -m armv7lchroot監獄内の環境だが、ホームディレクトリなどは、ホストと同じものがマウントされている。
便利といえば便利だが、ホスト環境を壊す可能性もあり、注意が必要だ。
armhf実行環境が作れたら、ビルドツールその他必要なものをインストールしなければならないのだが、必要なパッケージの一部がmainリポジトリ内にないので、リポジトリ設定を書き換える必要がある。
やり方はどうでも良いが、/etc/apt/sources.listを以下のような内容に書き換える。
deb http://ports.ubuntu.com/ubuntu-ports focal main restricted universe multiverse書き換えたら、apt-get updateをしておく。
そうしておいて、必要なパッケージをインストールする。
$ sudo -S apt-get install build-essential devscripts wget debhelper pkg-config liibltdl-dev libudev-dev libusb-1.0-0-dev libgtkmm-2.4-dev libsane-dev libjpeg-dev libtiff-dev graphicsmagick libgraphicsmagick++-dev libboost-filesystem-dev libbooost-iostreams-dev libboost-program-options-dev libboost-regex-dev libboost-test--dev libboost-thread-dev上記は、build-essential devscript wget と、EPSON EW-M752T用スキャナドライバのソースパッケージが必要とするパッケージを全部指定している。
ビルドに必要なものは用意できた。次にソースパッケージを入手する。
EPSONのドライバダウンロードページに行って、"EW-M752T"を入力、OSに"Linux"を選んで、虫眼鏡アイコンをクリックすると、以下のようなページになる。
一番下の行「EW-M752T Scanner Driver Linux 3.65.0 All-in-one package All language 01-05-2021」の[Download]ボタンをクリックする。
以下のようなページになる。
ここで、[Accept]ボタンをクリックする。
ページが下に延長されて、以下のようになる。
一番下の、"Source File Download Page"をクリックすると、以下のようなページになる。
ここで"Ubuntu"をクリックする。
やっと、ソースパッケージが現れた(なんと説明が面倒なのだろう)。
この中で、以下の3つをダウンロードする。
- imagescan_3.65.0-1epson4ubuntu20.04.dsc
- imagescan_3.65.0-1epson4ubuntu20.04.debian.tar.xz
- imagescan_3.65.0.orig.tar.gz
適当なディレクトリを作って、そこに3つのファイルをダウンロードせよ。
ダウンロード後、早速ビルドしたい所だが、このままではfakerootでエラーになる。
以下のようにして、fakerootをfakeroot-tcpにする。
$ cd /etc/alternatives $ sudo rm fakeroot $ sudo ln -s /usr/bin/fakeroot-tcp fakeroot
やっと、ビルドするための準備が全て整った。
3つのファイルをダウンロードしたディレクトリへ移動して、以下のようにして、ソースパッケージを展開せよ。
$ dpkg-source -x imagescan_3.65.0-1epson4ubuntu20.04.dscふつうのやり方だ。サブディレクトリ"imagescan-3.65.0/"ができているので、その中に入って、バイナリパッケージをビルドする。
$ dpkg-buildpackage -us -uc -b perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "ja_JP.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). qemu: Unsupported syscall: 403 dpkg-buildpackage: warning: debian/changelog(l7): badly formatted trailer line LINE: -- Seiko Epson <linux-printer@epson.jp> Thu, 22 Dec 2020 11:01: +0900 dpkg-buildpackage: warning: debian/changelog(l7): found end of file where expected more change data or trailer dpkg-buildpackage: info: source package imagescan dpkg-buildpackage: info: source version 3.65.0-1epson4ubuntu20.04 dpkg-buildpackage: info: source distribution RELEASED dpkg-buildpackage: info: source changed by perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), : : (省略) : dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "ja_JP.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). qemu: Unsupported syscall: 403 dpkg-source: warning: imagescan-3.65.0/debian/changelog(l7): badly formatted trailer line LINE: -- Seiko Epson <linux-printer@epson.jp> Thu, 22 Dec 2020 11:01: +0900 dpkg-source: warning: imagescan-3.65.0/debian/changelog(l7): found end of file where expected more change data or trailer dpkg-buildpackage: info: binary-only upload (no source included) $およそ6年前のcore-i7だからか、なんだかんだ時間がかかる。
1つ上のディレクトリに戻ってみると、バイナリパッケージができている。
$ ls imagescan-3.65.0 imagescan-dbg_3.65.0-1epson4ubuntu20.04_armhf.deb imagescan_3.65.0-1epson4ubuntu20.04.debian.tar.xz imagescan_3.65.0-1epson4ubuntu20.04.dsc imagescan_3.65.0-1epson4ubuntu20.04_armhf.buildinfo imagescan_3.65.0-1epson4ubuntu20.04_armhf.changes imagescan_3.65.0-1epson4ubuntu20.04_armhf.deb imagescan_3.65.0.orig.tar.gz上記ファイルのうち、2つの.debファイルをRaspberryPI3(Ubuntu20.04が動いている)にコピーして、dpkg -i でインストールする。
なんか依存物があったようにも思うが、最初にインストールした時に足りないものはインストールしていて、もうエラーにならない。
PCの場合と同様に、/etc/imagescan/imagescan.confを適切に書き換える。
# /etc/imagescan/imagescan.conf -- Image Scan configuration # Refer to the documentation for details on the configuration options # for the software. Plugins should come with their own documentation # if they have configuration options. # # Lines starting with a # or a ; are comments. Comments must be on a # line of their own. End-of-line comments are not supported. [devices] myscanner.udi = esci:networkscan://XXX.XXX.XXX.XXX:1865 myscanner.vendor = EPSON myscanner.model = EW-M752TXXX.XXX.XXX.XXXは、プリンタのIPアドレス。適切に置き換えよ。
うちでは、プリンタを固定IP(ルータで固定IP化している)で運用しているので、これだけでいい。
imagescanを実行すると、見慣れたイメージスキャンアプリが立ち上がる。使い方はもちろんPCと同じだ。
RaspberryPIでも、スキャンができる。
便利になったもんだ。
なるべくわかりやすく、短く書くつもりが、妙に長くなった。
0 件のコメント:
コメントを投稿