RPi - LBP221 設定

2023/12/19 12:23 OS別::Linuxその他::デバイス
Raspberry Pi OS で、ネットワークプリンタ LBP221 の設定を行います。

環境

対象機器

今回使用した機器は、次の通りです。
種類機器備考
設定対象サーバRaspberry Pi 3 Model BRaspbian GNU/Linux 11 (bullseye)
プリンタCanon LBP221モノクロレーザープリンタ

DNS 設定

次の名前解決設定を行っています。
項目設定備考
正引き192.168.1.20 lbp221.example.jpドメインは省略して利用
以下の手順でドメイン部分は、Linux 環境において /etc/resolv.conf で補完する domain 設定を行っており、省略しています。
また、Windows 環境でも hosts に記述しているため、筆者の環境ではどの端末でも上記名称のまま接続できるようになっています。
$ ping -4c1 lbp221
PING lbp221.example.jp (192.168.1.20) 56(84) bytes of data.
64 bytes from 192.168.1.20 (192.168.1.20): icmp_seq=1 ttl=64 time=0.349 ms

--- lbp221.example.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.349/0.349/0.349/0.000 ms

ドライバ

Canon 公式サイトで LBP221 のプリンタドライバが提供されていますが、Raspberry Pi の CPU には対応していません。
上記サイトを見る限り、動作確認済み OS に、Debian 11.5(Intel/AMD 32bit/64bit、ARM 64bit)が存在します。
Raspberry Pi OS は ARM になるのでプリントできそうに思えますが、標準で提供されるインストーラーではエラー終了します。

ここでは CUPS 開発者が推奨していることもあり、ドライバーレス印刷を行います。

なお、プリンタが次のいずれかの標準に対応していれば、ドライバーレス印刷が可能になります。
AirPrint™
IPP Everywhere™
Mopria®
Wi-Fi Direct Print Services

プリンタ設定

IP アドレス設定

LBP221 はネットワークに対応しているので IPv4 アドレスを設定します。
詳細については、付属のマニュアルを参照してください。

ビジネス用途のプリンタだけあって、パスワード設定なども行います。

Wi-Fi にも対応していますが、設定時に接続できなかった*1ため LAN ケーブルを使っています。

Web UI 確認

プリンタの Web UI にアクセスしてみます。
http://lbp221.example.jp/
表示されれば、プリンタが正常にネットワーク接続されていることが確認できます。
なお、管理者モードでログインするには、任意で設定したパスワードが必要です。

*1 : いろいろ原因を探ったところ、タイミング悪く Wi-Fi 機器が故障していました。

Raspberry Pi OS 設定

パッケージインストール

Raspberry Pi OS に、印刷に必要なパッケージをインストールします。
$ sudo apt install cups system-config-printer

プリンタ接続確認

ipptool で確認したところ [PASS] が表示されているので LBP221 は ipp に対応しています。
$ ipptool -tv ipp://lbp221:631/ipp/print get-printer-attributes.test | grep get-printer-attributes
"/usr/share/cups/ipptool/get-printer-attributes.test":
    Get printer attributes using get-printer-attributes                  [PASS]
なお、LBP221 はモノクロレーザープリンタなので確認しませんでしたが、カラープリンタの場合は "image/jpeg" が含まれていることも確認します。

CUPS 設定

ドライバーレス印刷に対応しているので、lpadmin コマンドを使用して CUPS に登録します。
$ lpadmin -p LBP221 -E -v ipp://lbp221/ipp/print -m everywhere
$ lpstat -p
プリンター LBP221 は待機中です。2023年12月18日 11時08分09秒 以来有効です
オプション -p に指定するプリンタ名は、以後の印刷操作で使用するものなので、IP アドレスと紐づかなくても問題ありません。
また、-v オプションに使用するドメイン名も、IP アドレスで問題ありません。
環境に合わせて、適切に読み替えてください。

テスト印刷

CUPS に用意されているテストページを印刷してみます。
$ lp -d LBP221 /usr/share/cups/data/default-testpage.pdf
Raspberry Pi OS の場合、debian で用意されたテストページが印刷されます。

その他

更新履歴

  • 2023.12.19 使用していた jimba.jp ドメインを、例示用のドメインとして example.jp へ変更。

adiary 関連ライブラリ

2023/12/14 15:35 OS別::Linuxその他::技術情報
Raspberry Pi を利用したウェブサーバで adiary を利用する際、あると便利なライブラリが存在します。
そのライブラリに関連するパッケージをインストールします。

対象は、Raspbian GNU/Linux 12 (bookworm) になります。

必須パッケージ

adiary の動作に必要なパッケージをインストールします。
$ sudo apt install perl

指定ライブラリ

adiary を便利に使うために adiary が指定するライブラリをパッケージでインストールします。

Image::Magick (PerlMagic)

存在すれば adiary 内で画像縮小が可能です。
$ sudo apt install perlmagick

Net::SSLeay

外部サイトへの https 通信に必要です。
$ sudo apt install libnet-https-any-perl

CryptX

adiary の push 通知プラグインで使用します。
$ sudo apt install libcryptx-perl

目的によるインストール

当手順では使用しませんが、必要があれば利用することになるためインストール手順を記載します。

git

公式サイトから git でインストールする際に利用します。
$ type git > /dev/null 2>&1 || sudo apt install git

確認方法

パッケージ

$ sudo apt list perl

ライブラリ

$ sudo apt list perlmagick libnet-https-any-perl libcryptx-perl

git

$ sudo apt list git

apache2 設定

2023/12/14 15:04 OS別::Linuxその他::技術情報
Raspberry Pi を利用したウェブサーバに、Apache2 およびモジュールをインストールします。
対象は、Raspbian GNU/Linux 12 (bookworm) になります。

apache2 インストール

パッケージインストール

Debian 系の Apache パッケージ名は apache2 になります。
apache2 のインストール有無を確認して、インストールを実行します。
$ sudo apt list apache2
$ sudo apt -y install apache2 apache2-doc
$ sudo apt -y autoremove

Apache2 バージョン情報非表示

必要に応じて apache2 のバージョン情報を非表示にします。
$ grep -i includeoptional /etc/apache2/apache2.conf
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
$ cd /etc/apache2/conf-available
$ sudo cp -p security.conf{,_$(date +%Y%m%d)}
$ sudo vi security.conf
(書き換え)
$ sudo diff security.conf{,_$(date +%Y%m%d)}
25c25
< #ServerTokens OS
---
> ServerTokens OS
27d26
< ServerTokens Prod
36,37c35,36
< ServerSignature Off
< #ServerSignature On
---
> #ServerSignature Off
> ServerSignature On
$

Apache2 設定反映

$ sudo apachectl configtest
$ sudo systemctl reload apache2
configtest メッセージ
以下のメッセージが表示されることがあります。
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
fully qualified domain name (FQDN) が特定できない、というメッセージなので、特定する設定を入れてあげます。
いくつか方法はあるのですが、ここではシンプルな力技でいきます。
$ sudo vi /etc/apache2/conf-available/fqdn.conf
$ cat /etc/apache2/conf-available/fqdn.conf
ServerName example.jp
$ sudo a2enconf

apache2 モジュールインストール

apache2 を入れた後、必要に応じてモジュールも追加インストールする必要があります。
以下のモジュールを追加インストールします。
項目説明備考
cgidcgi を作動させるためのモジュール
RewriteEngineRewrite Engine を利用するためのモジュール
remoteipログの出力先変更等で IP アドレスを利用するためのモジュール

cgid

モジュール確認
モジュールがインストールされていることを確認します。
$ a2query -m cgid
cgid (enabled by site administrator)
デフォルトで有効化されるはずですが、モジュールがインストールされていなければ a2enmod で cgid を有効にします。
モジュールの有効化
モジュールを有効化します。
$ sudo a2enmod cgid
Module cgid already enabled

RewriteEngine

モジュール確認
モジュールがインストールされていることを確認します。
$ a2query -m rewrite
rewrite (enabled by site administrator)
モジュールがインストールされていなければ a2enmod で rewrite を有効にします。
モジュールの有効化
モジュールを有効化します。
$ sudo a2enmod rewrite
Module rewrite already enabled

remoteip

モジュール確認
モジュールがインストールされていることを確認します。
$ a2query -m remoteip
remoteip (enabled by site administrator)
モジュールがインストールされていなければ a2enmod で rewrite を有効にします。
モジュールの有効化
モジュールを有効化します。
$ sudo a2enmod remoteip
Module remoteip already enabled

モジュール設定の有効化

$ sudo apachectl configtest
$ sudo systemctl reload apache2

RPi OS NTP 設定

2024/06/22 19:38 OS別::Linuxその他::技術情報
Raspberry Pi を利用したサーバの、初期に行うべき手順で NTP を設定します。
対象は、Raspbian GNU/Linux 12 (bookworm) になります。

パッケージ

インストール

パッケージのインストール状況を確認して、必要であればインストールします。
$ sudo apt list ntpsec ntpdate dnsutils
$ sudo apt install ntpsec ntp-doc ntpdate dnsutils

名前解決確認

名前解決ができることを確認します。
$ dig ntp.nict.jp +short

NTP 設定

設定差分の読み替え設定

$ . /etc/os-release
$ pNtpConfDir="/etc/ntpsec/ntp.conf"

設定ファイル修正

$ sudo cp -p ${pNtpConf}{,_$(date +%Y%m%d)}
$ sudo diff ${pNtpConf}{,_$(date +%Y%m%d)}
$ sudo vi ${pNtpConf}
---------------------------------------------------------
(pool をコメントアウトして、serverに ntp.nict.jp を指定する)
---------------------------------------------------------
$ sudo diff ${pNtpConf}{,_$(date +%Y%m%d)}
20c20
< #tos maxclock 11
---
> tos maxclock 11
34,38c34,37
< #pool 0.debian.pool.ntp.org iburst
< #pool 1.debian.pool.ntp.org iburst
< #pool 2.debian.pool.ntp.org iburst
< #pool 3.debian.pool.ntp.org iburst
< pool ntp.nict.jp iburst
---
> pool 0.debian.pool.ntp.org iburst
> pool 1.debian.pool.ntp.org iburst
> pool 2.debian.pool.ntp.org iburst
> pool 3.debian.pool.ntp.org iburst
52c51
< #restrict ::1
---
> restrict ::1

設定の反映

$ sudo systemctl status ntpsec
$ sudo systemctl stop ntpsec
$ sudo ntpdate ntp.nict.jp
$ sudo systemctl start ntpsec
$ sudo systemctl status ntpsec
もし status 確認で次のようなエラーが出力されていたら、ディレクトリを作成する。
11月 05 11:01:02 rasp012 ntpd[1385]: statistics directory /var/log/ntpsec/ does not exist or is unwriteable, error No such fi>
$ grep ntp /etc/passwd
ntpsec:x:112:122::/nonexistent:/usr/sbin/nologin
$ sudo mkdir /var/log/ntpsec
$ sudo chown 112:122 /var/log/ntpsec
$ ls -ld /var/log/ntpsec
drwxr-xr-x 2 ntpsec ntpsec 4096 11月  5 11:02 /var/log/ntpsec
$ sudo systemctl status ntp
$ sudo systemctl restart ntp
$ sudo systemctl status ntp
$ ls -l /var/log/ntpsec

設定反映確認

$ ntpq -p
     remote                                   refid      st t when poll reach   delay   offset   jitter
=======================================================================================================
 ntp.nict.jp                             .POOL.          16 p    -  256    0   0.0000   0.0000   0.0010
*ntp-a2.nict.go.jp                       .NICT.           1 u    -   64  377   4.4718   1.3757   3.6481
-ntp-b2.nict.go.jp                       .NICT.           1 u   13   64  377   5.0246   1.0815   3.5915
+ntp-a3.nict.go.jp                       .NICT.           1 u    1   64  377   4.9172   1.4364   3.4305
+ntp-k1.nict.jp                          .NICT.           1 u    2   64  377  16.5057   0.5122   3.4384
+ntp-b3.nict.go.jp                       .NICT.           1 u    -   64  377   4.5500   5.6319   4.4448
 ntp-a3.nict.go.jp                       .INIT.          16 u    -  128    0   0.0000   0.0000   0.0010
 2001:ce8:78::2                          .INIT.          16 u    -  128    0   0.0000   0.0000   0.0010
 ntp-a2.nict.go.jp                       .INIT.          16 u    -  128    0   0.0000   0.0000   0.0010
ntp は、ホスト名に * が付いているサーバに同期している。
また、IPアドレスで確認したい場合は、オプションに -n を追加して ntpq -np 等とする。

その他

NTP サーバとして利用するなら追加設定が必要なので、別途 NTP サーバとしての設定を行う。
例えば、次のような認証を行う。
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

更新履歴

日付内容
2024.6.19Linux 12 (bookworm) 用に設定内容を変更した*1

*1 : Raspbian GNU/Linux 11 (bullseye) と Raspbian GNU/Linux 12 (bookworm) では、設定ファイルだけではなく、設定内容も微妙に変更が必要で同期しなかったため。

RPi OS IPv4 静的設定

2024/05/26 22:06 OS別::Linuxその他::技術情報
Raspberry Pi を利用したサーバの、初期に行うべき手順で IPv4 アドレスを固定します。
対象は、Raspbian GNU/Linux 12 (bookworm) になります。


IPv6 を有効化していると、ホームルータの NAT に関係なく、インターネットと直接接続できるようになります。
セキュリティ的に設定が面倒なのと、まだ IPv4 が中心なので IPv6 無効化と、静的 IP アドレス設定を行います。

事前準備

IPv6 設定 (無効化)

/etc/sysctl.conf に IPv6 の利用を停止する設定を追記します。
$ sudo cp -p /etc/sysctl.conf{,_$(date +%Y%m%d)}
$ sudo diff /etc/sysctl.conf{,_$(date +%Y%m%d)}
$ sudo vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
$ sudo diff /etc/sysctl.conf{,_$(date +%Y%m%d)}
61,62d60
< net.ipv6.conf.all.disable_ipv6 = 1
< net.ipv6.conf.default.disable_ipv6 = 1
$ sudo sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
$ ip a

IPv4 設定

ネットワーク設定方法確認

対象のバージョンを確認します。
Raspberry Pi OS が bookworm の場合は、NetworkManager を設定します。
【参考】ネットワーク設定パッケージ
Debian 系ネットワーク設定備考
12bookwormNetworkManager
11bullseyedhcpcd
これは 11 から 12 への変更点のひとつです。
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 12 (bookworm)"
NAME="Raspbian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

IPv4 アドレス設定(NetworkManager 版)

ここでは、Raspberry pi OS 12 (bookworm) 以降NetworkManager を利用した IP アドレスの設定を行います。
ネットワーク設定の確認
接続情報確認
まずは、DEVICE を確認します。
$ nmcli con show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  0f3c983a-4e89-39f5-b433-aa43b0088c28  ethernet  eth0
$ nmcli device status
DEVICE         TYPE      STATE                   CONNECTION
eth0           ethernet  connected               Wired connection 1
lo             loopback  connected (externally)  lo
wlan0          wifi      disconnected            --
p2p-dev-wlan0  wifi-p2p  disconnected            --
NAME が 'Wired connection 1' のものが eth0 となっています。
デバイス情報確認
次に、デバイス毎の詳細情報を、ふむふむと確認しておきます。
$ nmcli device show
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         B8:27:EB:27:55:9C
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     Wired connection 1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.1.198/24
IP4.GATEWAY:                            192.168.1.1
IP4.ROUTE[1]:                           dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 100
IP4.DNS[1]:                             192.168.1.1
IP4.SEARCHES[1]:                        flets-east.jp
IP4.SEARCHES[2]:                        iptvf.jp
IP6.GATEWAY:                            --
IP6.DNS[1]:                             2404:1a8:7f01:b::3
IP6.DNS[2]:                             2404:1a8:7f01:a::3
IP6.SEARCHES[1]:                        flets-east.jp
IP6.SEARCHES[2]:                        iptvf.jp

GENERAL.DEVICE:                         lo
GENERAL.TYPE:                           loopback
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            65536
GENERAL.STATE:                          100 (connected (externally))
GENERAL.CONNECTION:                     lo
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]:                         127.0.0.1/8
IP4.GATEWAY:                            --
IP6.GATEWAY:                            --

GENERAL.DEVICE:                         wlan0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         B8:27:EB:72:00:C9
GENERAL.MTU:                            1500
GENERAL.STATE:                          30 (disconnected)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
IP4.GATEWAY:                            --
IP6.GATEWAY:                            --

GENERAL.DEVICE:                         p2p-dev-wlan0
GENERAL.TYPE:                           wifi-p2p
GENERAL.HWADDR:                         (unknown)
GENERAL.MTU:                            0
GENERAL.STATE:                          30 (disconnected)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
設定変更
接続名変更
これは行わなくてもいいのですが、毎回クォートで括らなければならない接続名(NAME)を 'Wired connection 1' から svnet へ変更しておきます。
逆に言うと、毎回クォートで括れば、設定変更の必要はありません。
$ sudo nmcli con mod 'Wired connection 1' connection.id svnet
$ nmcli con show
ネットワーク設定変更
次に、IP アドレスやルーティングの設定を変更します。

IP アドレスや設定情報は、適当に読み替えてください。
$ sudo nmcli con mod svnet ipv4.address "192.168.10.100/24"
$ sudo nmcli con mod svnet ipv4.gateway "192.168.10.1"
$ sudo nmcli con mod svnet ipv4.dns "192.168.10.1 192.168.10.10"
$ sudo nmcli con mod svnet ipv4.dns-priority 10 ipv6.dns-priority 20
$ sudo nmcli con mod svnet ipv4.dns-search "example.jp"
$ sudo nmcli con mod svnet ipv4.routes "192.168.10.0/24 192.168.10.1"
$ sudo nmcli con mod svnet ipv4.method "manual"
$ sudo nmcli con mod svnet ipv6.method "disabled"
$ sudo nmcli con up svnet
途中、IPv6 は無効にしているのに指定があるのはなぜかというと、IPv6 アドレスに対する名前解決の優先度が下げるためです。
いま接続しているセッションについては接続が切れないようですが、今後は新しい IP アドレスで接続する必要があります。
設定確認
ネットワーク設定を確認する。
$ ip a
$ nmcli connection show
設定反映確認
[反映確認 1] OS 再起動
ネットワーク設定が保存されていることを確認するにはいくつか方法がありますが、すべて一括で反映するには OS を再起動します。
$ sudo reboot
起動後は、設定した IP アドレスに対して Tera Term 等で接続してください。
[反映確認 2] サービス再起動
ネットワーク設定だけを反映したい場合は、対象サービスを再起動します。
$ systemctl status network.service
$ systemctl restart network.service
$ systemctl status network.service
後は、設定した IP アドレスに対して Tera Term 等で接続してください。

設定確認

IP アドレス
$ ip a
/etc/resolv.conf
$ cat /etc/resolv.conf
# Generated by resolvconf
domain example.jp
nameserver 192.168.10.10
nameserver 192.168.10.1
$ ping 192.168.10.1 -c 3