plamo7.3x->setup memo

plamo linux 7.3x

7.4が未公開なので7.3xと記載してます。

plamo linux歴史

比較的以前からあるディストリビューションです。元々はslackwareをベースに派生していたそうです。 パッケージシステムに気兼ねしないで色々といじれて楽しいですよ。

今回は、 2021年12月09日版 をクリーンインストールしています。

plamo7.4は未リリースなのでplamo7.3を入れてからアップデートする方法もあるのですが、 一気にアップデートすると却ってシステムが壊れてしまう (アップデートするパッケージの順番がある感じ)ので、 2021年12月9日時点までのアップデートをまとめたものをクリーンインストールしました。

インストーラUSBドライブ

Rufusを使って、USBフラッシュメモリへインストールディスクを作成しました。 書き込みの際に「ISOイメージモード」で書き込みすると、grub.cfgの編集が可能です。 (インストーラのカーネルパラメータを書き換えておくことができます)

インストーラの起動途中で、 [x.xxxxxx] ...
[x.xxxxxx] ...
[x.xxxxxx] fb0:switching to amdgpudrmfb from EFI VGA
と出て止まってしまいました。 GPUが新しめのため、インストーラのカーネルが未対応なのかもしれません。 カーネルパラメータに nomodeset を追加して起動することができました。

起動時に、grubのメニュー画面で毎回追加しても良いのですが、 インストーラUSBドライブのgrub.cfg を修正してカーネルパラメータ nomodeset を追加しています。

(USBメモリ)X:\EFI\BOOT\grub.cfg
 ...
menuentry "USB接続のDVD/BR/USBメモリからのインストール(起動デバイスは(hd0))" {
    linux (hd0,msdos1)/isolinux/vmlinuz root=/dev/ram0 rw vga16 kbd=usbkbd net.ifnames=0 nomodeset
    initrd (hd0,msdos1)/isolinux/initrd.gz
}
 ...

なお、インストールされたカーネルの方は、nomodeset 無しで起動できています。

アップデート

plamo linuxでは、パッケージのアップデート用のコマンドが用意されています。 [→参考]

アップデートにより解消する不具合もありますので、インストールしたらぜひ最初にやっておきましょう。

grub2

PCが新しめのため、BIOSではなくUEFI、MBRではなくGPTのシステムです。

セットアップ

前提

  1. /dev/nvme0n1p1 : ESPパーティション
  2. /dev/nvme0n1p2 : ルートパーティション

仕組み

設定ファイルは /etc/grub.d/* と、/etc/default/grub となっています。 これらを修正して、grub-mkconfig コマンドでESPパーティションにある grub.cfg に反映させます。

grub-mkconfig は、起動可能なシステムを自動的に検知し、必要なパラメーターを取得した上で grub.cfg へ登録してくれます。

/etc/default/grub に主な設定値があるので、こちらを編集してから grub.cfg へ反映させます。

# ; /etc/default/grubを編集した後で # mount -t vfat /dev/nvme0n1p1 /mnt/esp
# grub-mkconfig -o /mnt/esp/grub/grub.cfg

カーネルパラメータの追加

コンソールの解像度を800x600にする

※ /etc/default/grubに、GRUB_CMDLINE_LINUX_DEFAULT= の値に、"video=800x600"を追加します。

...
# Command line arguments for default linux entry
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 video=800x600"
...

環境設定

ユーザーの追加

# adduser

ビープ音を消す

readline ライブラリの設定ファイル(~/.inputrc, /etc/inputrc 等)を修正します。

set bell-style none

を追加します。(set bell-style XXXXX な設定があったらコメントアウトします)

カーネルリメイク

デフォルトのカーネルコンフィグレーション

plamoデフォルトのカーネルコンフィグレーションは、/boot/ に入っています。 これをコピーしてから、色々書き換えてみましょう。 # cd /usr/src/linux
# cp /boot/config-5.15.7-plamo64 ./.config

# make menuconfig

自分用のバージョン番号

もとのままでカーネルリメイクすると、モジュール類も上書きすることになってしまいます。

インストールしたモジュールは、/lib/modules/にバージョン名称毎のディレクトリを作って格納されています。

なので、バージョン名称を変えれば別のディレクトリに格納されることになり、 リメイク前のモジュールを上書きしないで済みます。

# make menuconfig の General setup の中で EXTRAVIRSION を設定する項目があります。 これを使うと、枝番を付けたようなバージョン名称をつけることが出来ます。

リメイクの実行

コンフィグレーションが終ったらモジュールとカーネルを作ってインストー ルします

(# cd /usr/src/linux)
# make bzImage 
# make modules
# rm -rf /lib/modules/(version)
# make modules_install
# cp arch/x86/boot/bzImage (/boot/vmlinuz)

pkg-config

pkg-configは、プログラムををソースから生成するときに必要な情報を取り出して適切なオプションを生成してくれる役割を持ちます。./configureで呼び出されていたりします。

インストールしたときに *.pcファイルが保管されており、このファイルを読み出ししています。

自分でソースからインストールしていくと、/usr/local/以下にインストールされることが多い(指定可)のですが、セットアップ直後は /usr/local/を想定しない設定になっているようです。

なので *.pcファイルのサーチパスを追加設定します。

[/etc/profile] PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH

ldconfig

共有ライブラリのサーチパスは、/etc/ld.so.conf で設定します。 ソースからセットアップする時には、/usr/local/lib にセットアップされるので、 そちらが優先されるように、サーチパスを修正しておきます。

/lib64
/usr/local/lib64
/usr/lib64
/lib
/usr/local/lib
/usr/lib

include /etc/ld.co.conf.d/*.conf

/opt/texlive/2019/lib
/otp/texlive/2021/lib

マウントを簡単に

CD-ROM

/etc/fstabに登録しておきます(インストール時に登録済みになってます)。

リードオンリーで /cdrom にマウントできるようにする

[fstab]
/dev/sr0 /cdrom iso9660 user,ro,noautoexec,iocharaset=utf-8 0 0

CFカードドライブ

USBカードリーダーの設定です。

  1. udevでデバイスファイルを判りやすくします(デバイス名の抽象化)
  2. fstabに設定します

udev

/etc/udev/rules.d/ の 10-local.rules(無ければ作る)に設定を追加します。

CFカードドライブにCFカードを挿すと、/dev/cfcard/というデバイスファイルが生成されます。 抜くと /dev/cfcard/ は消滅します。

# ※個別の機体に合わせて書き換える必要があります。
ACTION=="add",    KERNEL=="sd[c-z][1-9]", ATTRS{model}=="Compact Flash   ", SYMLINK+="cfcard"
ACTION=="remove", KERNEL=="sd[c-z][1-9]", ATTRS{model}=="Compact Flash   ", SYMLINK-="cfcard"

USBカードリーダーは、SCSIドライブとして起動時に認識されているので、デバイス名は /dev/sd? となります。 従って、読み書きできる区画は /dev/sd[a-z][1-9]となるはずです。

自分とこでは、HDDを2台内臓させていて、/dev/sda, /dev/sdb となっています。 udevで変なことにならないように、念のため sda と sdb が対象外となるように /dev/sd[c-z][1-9]としておきます。

udevadm info でデバイスを特定できるものを探しました。「ATTRS{model}=="Compact Flash "」を使うことにしました。

ATTRS{????}は、幾つもの階層で定義されていますが、複数のATTRS{????}を使うときには、複数の階層にまたがって選ぶと、 ルールとしては無効になってしまいます。一つの階層から選ぶか、ATTRS{????}は一つだけ使うようにします。

/dev からudevadm info を引くときは、# udevadm info -q path -n /dev/xxx でどこを引くべきか得られるので、 # udevadm info -a -p `udevadm info -q path -n /dev/sda` とする方法もあります。

書き換えたルールの適用は、# udevadm control --reload-rules を実行します。

fstab

/mnt にマウントポイントを作っておき、/etc/fstabに追加します。

[/etc/fstab] /dev/cfcard /mnt/cfcard vfat user,noauto,sync,fmask=133,iocharset=utf8 0 0

MTPデバイスとのファイル交換

USBで繋いだAndroid機とのファイルのやり取りをします。 Lenovo Tab M10 HD と、sharp SH-01K です。

最近のスマートフォンは、USBマス・ストレージクラスとしてマウントすることができません。 代わりにMTPデバイスとして扱うことになっているようですが、 USBマス・ストレージと同様にファイルシステムとしてマウントして扱える方がありがたいです。

このため、jmtpfs を使ってみます。 [使い方]

jmtpfs

MTPデバイス(のファイル)をファイルシステムとしてマウントすることができます。 FUSE(Filesystem in Userspace)という機能を介してファイルシステムとして扱えるようにしており、 MTPデバイスへのアクセスはlibmtpを使っているそうです。

$ ./configure
$ make
# make install

マウントポイントを ~/mtp とすることにします。このためマウントポイントを作ります。

$ cd
$ mkdir mtp

IDを調べる

接続した直後に syslog を見てみます。 $ ##(AndroidタブレットをUSBケーブルでつなぐ)
# tail /var/log/syslog
〜 中略 〜
May 3 22:23:14 plum kernel: usb 1-1: USB disconnect, device number 5
May 3 22:23:56 plum kernel: usb 1-1: new high-speed USB device number 6 using ehci-pci
May 3 22:23:56 plum kernel: usb 1-1: New USB device found, idVendor=17ef, idProduct=7c97
May 3 22:23:56 plum kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 3 22:23:56 plum kernel: usb 1-1: Product: Lenovo TB-X306F
May 3 22:23:56 plum kernel: usb 1-1: Manufacturer: LENOVO
May 3 22:23:56 plum kernel: usb 1-1: SerialNumber: HPV3K3D0
#

venderID は 17ef、productID は 7c97 であることがわかります。

  1. Lenovo Tab M10 HD(TB-X306F) : venderID=0x17ef, productID=0x7c97
  2. sharp SH-01K : venderID=0x04dd, productID=0x9b7f

udev

/lib/udev/rules.d/69-libmtp.rules に、vendorID, productIDが登録されていなかったら、追加登録します。 登録は /etc/udev/rules.d/ に 69-libmtp.rules を作って登録します。

69-libmtp.rules の内容は、/lib/udev/rules.d/ にある同名ファイル(69-libmtp.rules)を参考にします。

/etc/udev/rules.d/69-libmpt.rules
# Lenovo TB-X306F
ATTR{idVendor}=="17ef", ATTR{idProduct}=="7c97", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
# sharp SH-01K
ATTR{idVendor}=="04dd", ATTR{idProduct}=="9b7f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
#

FUSE

$ lsmod | grep fuse
'(何も表示されなければロードされていません)
# modprobe fuse 'fuseをロードします
カーネルモジュールを手動で組み込むことも出来るのですが、 なるべくなら、起動した時から組み込んでおきたいところ。

/etc/sysconfig/modules
########################################################################
# Begin /etc/sysconfig/modules

〜  中略  〜

# a space or a tab.
########################################################################

fuse  ##この行を追加

# End /etc/sysconfig/modules

libmtpのエラー

使えるのですが、 Device 0 (VID=17ef and PID=7c97) is UNKNOWN in libmtp というメッセージが気になります。 $ jmtpfs ~/mtp
Device 0 (VID=17ef and PID=7c97) is UNKNOWN in libmtp v1.1.14.
Please report this VID/PID and the device model to the libmtp development team
fuse: invalid argument '2'
Android device detected, assigning default bug flags
$

ここの表示でも、venderID=17ef(VID), productID=7c97(PID)であることはわかります。 また、機種がよく判らないもののデフォルトのオプションを使っときます、 ということなので、他の機種と似たようなオプションでよい...のかな?

このページによると、 リストを確認して、 載っていなければ開発チームへ連絡をとのこと。なのですが、ファイル名を見ると、このリストはソースファイルの一部そのものです。

と言うわけで、ソースファイルを取ってきて、music-players.h を書き換えてビルドしてみます。

src/music-players.h
/**
 * \file music-players.h
 * List of music players as USB ids.
 *
      〜 中略 〜

  /* ---------- 追加 */
  { "Lenovo", 0x17ef, "TB-X306F", 0x7c97, 
      DEVICE_FLAGS_ANDROID_BUGS },
  { "SHARP Corporation", 0x04dd, "SH-01K", 0x9b7f,
      DEVICE_FLAGS_ANDROID_BUGS },

      〜 中略 〜    

    

大抵の機種は、DEVICE_FLAGS_ANDROID_BUGS オプションが付いているので、 デフォルトのオプションとは、コレの事ではないかと思います。 (今回追加した機種では、とくに問題無いようです。)

  $ ./configure
  $ make
  # make install
  # ldconfig

PerlMagick

ImageMagickのインストールで、オプションを付けます。 $ ./configure --with-perl

Firefox

ブックマークメニューがスカスカで使い辛い

カスタマイズの方法

手順はこちらの方法で。

使っている設定ファイルを以下に入れておきます。 ブックマークメニューの枠線を表示する等も含めて調整してみました。 (調べたことを組み合わせながら試行錯誤して作ったので色々と変なところがありますが...)

/* userChrome.css */
/* ドロップダウン・コンテキストメニューの調整
   →ブックマークツールバーのメニュー表示の調整 */

menupopup {
    margin: 0px !important;
    padding: 0.2em 0px !important;
    border: solid lightgrey 1px !important;
    border-radius: 0 !important;
    background-color: white !important;
}

menupopup > menu,
menupopup > menuitem
menupopup > menuseparator {
    padding-block: 0.1em !important;
    margin: 0 !important;
    border-radius: 0 !important;
}

.menupopup-arrowscrollbox {
    padding: 0 !important;
    margin: 0 !important;
}

:root {
  --arrowpanel-menuitem-padding: 0 1ex !important;
  --arrowpanel-border-radius: 0 !important;
}

/* タブの高さ */
:root {
    --tab-min-height: 28px !important;
}
/* タブの形 */
.tab-background {
    /* box-shadow: none !important; */
    margin-block: 2px !important;
    border-radius: 0px !important;
}

userChrome.cssを調整する方法

ブラウザーとアドオンのデバッガーを有効化して、ブラウザーツールボックスを使うと、 メニュー類に対しても開発ツールを使って色々試したりできます。 [参考]

  1. [F12]キーから、開発ツールを開きます。
  2. 開発ツールの「設定」を開きます。
  3. 「ブラウザーのアドオンのデバッガーを有効化」「リモートデバッガーを有効化」にチェックを入れます。
  4. 開発ツールをいったん閉じます
  5. メニューから、[ツール]→[ブラウザーツール]→[ブラウザーツールボックス] (ショートカットキー [Ctrl]+[Alt]+[Shift]+[i] )
  6. 「リモートデバッグ接続要求」にOKします。
別ウィンドウで開発ツールが開きます。

Sylpheed

ツリービューの行間を空ける

行間が詰まりすぎて一覧しづらいので、行間を開けてみます

~/.sylpheed-2.0/gtkrc (無いときは作ります) を書き換えます。

style "user-font"{
  font_name="Sans Light 11"
}
widget_class "*" style "user-font"

style "tree-font" {
  GtkTreeView::vertical-separator = 5
}
class "GtkTreeView" style "tree-font"
フォントの上下の空きも影響するのですが、これはフォント毎に異なるらしく、色々なフォントを試してみるしかないようです。 (有効なフォント名を調べる方法がいまいち不明なのですが、、、)



tsushiro.s, 2003-2022.