WPP
Ubuntu Studio 24.04 にあとから日本語入力を追加

自宅のタワーを Linux Mint から Ubuntu 24.04 に入れ替えることにした。Mint も Ubuntu も同じ debian 派生なのでほぼ同じではあるのだが、Docker とかインストールする際に微妙に面倒なことになるので Ubuntu があたらしくなったこのタイミングで入れ替えることにした。

どのフレーバーでもいいのですが、これから動画関係を扱うことが多くなりそうなので Studio をいれることにした。そうすれば、ほぼ何も入れなくても作業にすぐかかれるからだ。

インストールに際して、ホームディレクトリの各フォルダを英語表記にしたいので英語モードのまま進めました。日本語を選択すれば、この手順は必要ないと思われます。

ホームディレクトリのフォルダ名の問題だけなら LANG=C Xdg-user-dirs-update コマンドでよかったのではと思うがまあ、あとの祭りですね。

結果からいうと公式の手順で OK でした。はじめ参照リンクの 「KDE neon 6 で fcitx5-mozc による日本語入力環境をセットアップする」をやってみたのですが、im-config を削除する必要はなかったようです。

環境

  • Ubuntu Studio 24.04
  • X11 (wayland ではないです)
  • 英語モードでインストール

手順

$ sudo apt install fcitx5-mozc kde-config-fcitx5

これで OK でした。

参照

Install Fcitx 5 – Fcitx (公式)

KDE neon 6 で fcitx5-mozc による日本語入力環境をセットアップする / KDE 日本語フォーラム 🥷🍣 – KDE Discuss

Arch + KDE 6 (Wayland) で日本語入力環境を少しでもまともにする #archLinux – Qiita

Linux Mint fstab を止めて別パーティションでもごみ箱を使えるようにする

追記: 自動マウントできるように設定追加

今日は Linux Mint 21.3 Cinnamon の話です。

最近メイン環境を Linux Mint に変えているが、別パーティションのファイルはごみ箱が無効で困っていた。いろいろやってみるとどうやらマウント方法がまずかったらしい。

fstab のマウント設定を削除し、Mint の Disks で [User Session Defaults] にチェックを入れるとごみ箱が有効になりました。 試行錯誤するうちにパーティションを ext4 に再フォーマットしましたが不要だったかもしれない。(元に / は btrfs だがごみ箱は機能しています。)

手順

まず、 /etc/fstab から該当行を削除します。

次にDisks に行き、該当パーティションを選択します。

ギヤボタンをクリックし、Edit Mount options… を開きます。

[User Session Defaults] にチェックを入れます。

そうすると普通は /mnt/[UUID] という場所にマウントされるようです。ここまででごみ箱は使えるはずです。

個人的な好みですが、作業ファイルなどを /opt に置くようにしているのでいくつか追加の設定をします。

Disks のギヤボタンで Edit Filesystem.. を開き UUIDの代わりになるラベルを設定します。(ここでは opt と入れた)


これをすると /media/[ユーザー名]/ラベル にマウントされるようになるみたいです。このマウントポイントを/opt でアクセスできるように設定します。

$ sudo ln -s /media/[ユーザー名]/opt /opt

Xorg やデスクトップ環境周辺の設定は膨大な関連項目があってなかなか体系的に理解するのが辛い。てかほぼいきあたりばったりです。どこかにわかりやすく(詳細過ぎずに)まとまっているところがあるといいのですが、そう都合よくは行きませんね。

追記:

ここまでの設定では、起動時に自動マウントできないようなので以下を追加した。

Mint の Startup Applications にスクリプトを追加して起動時にマウントするようにする。

まずはスクリプトを書く。ここではファイル名を mnt-opt.sh とするが好きな名前でどこかに作る。

予め Disks で対象のパーティションの UUID をコピーしておく

$ vi ./mnt-opt.sh
#!/bin/bash
gio mount -d 16e67ee6-955c-4d6f-8f91-ef96f83e728f
:wq

$ chmod 755 ./mnt-opt.sh

Mint の Startup Applications でさっき作成したスクリプトを追加する。

これでログイン時に自動マウントするようになる。異なるユーザーでログインするときは Startup Applications の設定をそのユーザーでやり直す必要があると思う。

podman で Caddy + CakePHP5 を動かす

前回の続きです。php-fpm コンテナに CakePHP5 をインストールできたのでいよいよ CaddyServer を入れます。

目的の構成

一旦、今回 podman で建てようとしているコンテナとポートの構成を説明しておきます。

  • CaddyServer ホストポート:8080 > コンテナポート:80
  • php-fpm ホストポート: – > コンテナポート:9000
  • MariaDB ホストポート:3306 > コンテナポート:3306
  • ./html フォルダを作り CaddyServer と php-fpm からそれぞれリンクする

手順

Caddy コンテナ

Caddyfile を作成します。 / で CakePHP をホストする場合はシンプルです。

$ mkdir conf
$ vi conf/Caddyfile
:80 {
	# Set this path to your site's directory.
	root * /usr/share/caddy/app/webroot
	encode gzip

	# Enable the static file server.
	file_server

	# Another common task is to set up a reverse proxy:
	php_fastcgi localhost:9000

	# log
}

最初 /app などのサブディレクトリでホストしようとしましたが、参考リンクによるとサブディレクトリでホストするのは難しいらしいのでそうそうにあきらめました。

$ podman run --name caddy -p 8080:80/tcp \
  -v ./conf/Caddyfile:/etc/caddy/Caddyfile \
  -v ./html:/usr/share/caddy \
  caddy:latest

ここまでで MariaDB、Caddy、php−fpm の3つのコンテナが揃いました。podman 的には kubernetes の yaml ファイルにしろってことなので簡単に生成するために、podman-desktop で pod を作ります。

そのまま pod を yaml に吐き出したものを少し修正します。修正した結果はこんな感じです。

# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-3.4.4
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2024-04-29T05:49:28Z"
  labels:
    app: caddy-pod
  name: caddy-pod
spec:
  containers:
  - args:
    - mariadbd
    image: docker.io/library/mariadb:11.3
    name: maria
    ports:
    - containerPort: 3306
      hostPort: 3306
    - containerPort: 80
      hostPort: 8080
    resources: {}
    securityContext:
      capabilities:
        drop:
        - CAP_MKNOD
        - CAP_NET_RAW
        - CAP_AUDIT_WRITE
    volumeMounts:
    - mountPath: /var/lib/mysql
      name: maria-data
  - image: docker.io/library/caddy:latest
    name: caddy
    resources: {}
    securityContext:
      capabilities:
        drop:
        - CAP_MKNOD
        - CAP_NET_RAW
        - CAP_AUDIT_WRITE
    volumeMounts:
    - mountPath: /etc/caddy/Caddyfile
      name: caddy-file
    - mountPath: /usr/share/caddy
      name: html-caddy
  - args:
    - php-fpm
    image: localhost/my-php:latest
    name: php
    resources: {}
    securityContext:
      capabilities:
        drop:
        - CAP_MKNOD
        - CAP_NET_RAW
        - CAP_AUDIT_WRITE
    volumeMounts:
    - mountPath: /usr/share/caddy
      name: html-fpm
    - mountPath: /usr/local/etc/php/php-fpm.conf
      name: fpm-conf
    - mountPath: /usr/local/etc/php/php.ini
      name: php-ini
  restartPolicy: Never
  volumes:
  - hostPath:
      path: /opt/ws/podman-caddy/maria/data
      type: Directory
    name: maria-data
  - hostPath:
      path: /opt/ws/podman-caddy/conf/Caddyfile
      type: File
    name: caddy-file
  - hostPath:
      path: /opt/ws/podman-caddy/html
      type: Directory
    name: html-caddy
  - hostPath:
      path: /opt/ws/podman-caddy/html
      type: Directory
    name: html-fpm
  - hostPath:
      path: /opt/ws/podman-caddy/php-fpm/php/php-fpm.conf
      type: File
    name: fpm-conf
  - hostPath:
      path: /opt/ws/podman-caddy/php-fpm/php/php.ini-development
      type: File
    name: php-ini
status: {}

この yaml ファイルで pod を起動してみます。

$ podman play kube caddy-pod.yaml

localhost:8080 にブラウザアクセスしてみます。

MariaDB との接続がまだできていませんが、動作するところまで到達しました。

参考

The “subfolder problem”, OR, “why can’t I reverse proxy my app into a subfolder?” – Wiki – Caddy Community

podman で cakephp5を動かす

だいぶ佳境に入ってきましたが podman で cakephp5 を動かす続きです。php-fpm コンテナを作り、CakePHP5 をインストールします。CaddyServer は長くなるので次の記事にします。

目的の構成

一旦、今回 podman で建てようとしているコンテナとポートの構成を説明しておきます。

  • CaddyServer ホストポート:8080 > コンテナポート:80
  • php-fpm ホストポート:- > コンテナポート:9000
  • MariaDB ホストポート:3306 > コンテナポート:3306
  • ./html フォルダを作り CaddyServer と php-fpm からそれぞれリンクする

本来なら MariaDB のポートは、php-fpm からしかアクセスしないのでホスト側に露出しなくて良いのですが、ホスト側から触れたほうが便利なので便宜上開けてます。インターネット上のサーバに建てる際は開けないほうがいいでしょう。

Caddy と php-fpm コンテナは分けなくてもいいのかもしれませんが今回は分けています。

php-fpm の設定はちょっと面倒なのでちゃんと手順を追って示していきます。

手順

php-fpm コンテナ

php-fpm イメージのビルド

php のコンテナはイメージ持ってくるだけでは済まないので Dockerfile をつくります。

FROM php:8.3-fpm-bookworm
LABEL MAINTAINER="mnishi"
ARG UID=1000
ARG GID=1000

RUN apt-get update && \
    apt-get install -y git zip unzip vim libonig-dev libxml2-dev wget && \
    docker-php-ext-install intl pdo_mysql bcmath mbstring simplexml
RUN wget https://getcomposer.org/installer -O composer-installer.php && \
    php composer-installer.php --filename=composer --install-dir=/usr/local/bin && \
    composer self-update

RUN usermod  -u $UID www-data && \
    groupmod -g $GID www-data

WORKDIR /var/www

イメージは、Debian の方がまだ慣れているので 8.3-fpm-bookworm としました。

apt-get で必要なモジュールをインストールしてますが、vim は完全な好みなので入れなくていいです。wget も不要かもしれません。

docker-php-ext-install で CakePHP に必要なモジュールをインストールします。

/usr/local/bin に composer をインストールします。

ARG UID= とARG GID= は、ホスト側の実行ユーザーの uid、gid を渡すための環境変数です。もしかすると初期値はいらないかもしれません。

php-fpm コンテナの起動

ビルドする前に www-data ユーザをホストに作っておき、ログインユーザーのグループにも追加しておきます。

$ useradd -M www-data
$ usermod -aG www-data [ログインユーザー]

ビルドします。Dockerfile と同じフォルダで以下のコマンドを実行します。

$ buildah bud --build-arg UID=$(id -u www-data) --build-arg GID=$(id -g www-data) --tag my-php . 

一旦コンテナを起動して、設定ファイルを php-fpm フォルダに取り出します。(フォルダ名はなんでもいいです。)

$ mkdir php-fpm
$ podman run --name tmp-php -d localhost/my-php
$ podman cp tmp-php:/usr/local/etc/php/php.ini-production ./php-fpm
$ podman cp tmp-php:/usr/local/etc/php/php.ini-development ./php-fpm
$ podman cp tmp-php:/usr/local/etc/php/php-fpm.conf ./php-fpm
$ podman rm -f tmp-php

使わないかも(設定を変更しないかも)しれませんが、一応 php.ini と php-fpm.conf を取ってきます。

取ってきた設定ファイルを使用してコンテナを起動します。

podman run -d --name php \
    -v ./php-fpm/php/php-fpm.conf:/usr/local/etc/php/php-fpm.conf \
    -v ./php-fpm/php/php.ini-development:/usr/local/etc/php/php.ini \
    -v ./html:/usr/share/caddy \
    my-php

起動に失敗するようでしたら、-d を外してエラーを眺めてください。

php-fpm コンテナ内で CakePHP のインストール

ここまで全てがうまく行っていれば、コンテナの中に入って composer で CakePHP をデプロイできるはずです。

; ホスト側から
$ podman exec -it caddy-pod-php /bin/bash 

 ; コンテナの中に入った
# cd /usr/share/caddy
# composer create-project --prefer-dist cakephp/app:"5.*" app
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
; root  で動かしているよと怒られるが無視する

.... いろいろログが流れる

Set Folder Permissions ? (Default to Y) [Y,n]? y
Permissions set on /usr/share/caddy/app/tmp/cache
Permissions set on /usr/share/caddy/app/tmp/cache/models
Permissions set on /usr/share/caddy/app/tmp/cache/persistent
Permissions set on /usr/share/caddy/app/tmp/cache/views
Permissions set on /usr/share/caddy/app/tmp/sessions
Permissions set on /usr/share/caddy/app/tmp/tests
Permissions set on /usr/share/caddy/app/tmp
Permissions set on /usr/share/caddy/app/logs
Updated Security.salt value in config/app_local.php

流行りのルートレス構成ではないので、怒られますがひとまずそのまま行きます。(慣れた所でもう一度ルートレス構成をやってみてもいいかもしれない。)

CakePHP のインストールで php モジュールが不足してエラーが出た場合は、exec でコンテナ内に入り docker-php-ext-install で不足モジュールをインストールして composer が動作するか確認します。
うまく行ったら、Docker ファイルに不足モジュールを追加しします。その後、イメージのビルドからやり直します。

参考

podman で nginx + php + mariadb を立ち上げてみる | zu-min.com

podman で MariaDB を動かす

さて、先日から格闘している podman の続きです。cakephp5 を動かす pod を作成すべく作業をしているわけですが、本日は MariaDB 編です。

MariaDB を動かすには root ユーザーのパスワードやらを渡す必要があるのですが、ネットを検索するとコマンドラインで -e で環境変数を指定するスタイルが多く見つかります。個人的に長過ぎるコマンドラインは好きではないので (読み取るのも打つのも大変なので) 環境変数は別ファイルで逃がす形にします。

MARIADB_ROOT_PASSWORD=caddy-cake-PASSWORD
MARIADB_DATABASE=cake
MARIADB_USER=cake
MARIADB_PASSWORD=cake-user-PASSWORD
TZ='Asia/Tokyo'

なんとなく見てわかるとおりと思うので実際のパスワードやなんかはお好みで変えてください。

起動するには、env ファイルのあるディレクトリで以下のようにします。(前提条件として docker Hub registry のセットアップは終わっているものとします。)

podman run -d --name maria \
	--env-file ./env \
	-v ./maria/data:/var/lib/mysql \
	-p 3306:3306/tcp \
	--userns keep-id \
	mariadb:11.3 

MariaDB のデータはホスト側のファイルシステムに直接リンクしてます。その際 –userns keep-id がないとコンテナ内に割り当てられた uid (100239 とか大きな値になる)がファイルオーナーになるので嬉しくないです。

–userns keep-id をつけると ./maria/data が自分の所有になるのでいい感じです。

まだ不慣れなのもあるのですが、どうも docker-desktop と異なり podman-desktop は cli で指定できるオプションがだいぶ削られているような気がします。(お前がわかっていないだけという可能性も否定できないですが。。。)

しばらく続きます。

podman run -d –name maria \
–env-file ./env \
-v ./maria/data:/var/lib/mysql \
-p 3306:3306/tcp \
–userns keep-id \
mariadb:11.3

wordpress のパーマリンク設定を基本に変更

今回は、WP のパーリンク設定についての備忘録です。

今のwordpress サイトは数ヶ月前にさらから設定したものですが、パーマリンクに [投稿名] が入っていました。先日ふと気になって WP Statistics のページ眺めてると、リンクを辿れないページがあることに気づきました。

辿れないページは [投稿名] の後ろに %e04feo みたいな読めない文字列が連なっていました (% 以降は雰囲気です)。恐らくですが、日本語処理がどこかでミスっているっぽいらしい。

具体的な不具合の箇所はPHP の設定なのか、wordpress の設定かわかりませんが追求するのが面倒なので [基本] に戻すことにしました。

設定箇所は以下です。

admin ログイン > 設定 > パーマリンク > 基本

検索エンジンにインデックスされていたページがすべて死んだので、しばらくどこからも検索されないだろう。

Linux Mint カレンダーで CalDAV/CardDAV を扱うには Evolution を入れる

さてカレンダーアプリは Synology NAS のカレンダーをメインで使っているのですが、Linux Mint をメインで使うようになってちょっと困っていたのがカレンダーの管理です。

Linux Mint には gnome カレンダーがついているっぽいのですが、そこで CalDAV アカウントを追加する方法がありませんでした。そのため避難先として Vivaldi ブラウザのカレンダ機能を使っていました。

Vivaldi も決して悪くはないのですがブラウジング中に予定を見たいときに、見ているタブが隠れてしまうのと、操作性と画面のウルサイ感じが地味にストレスでした。

とはいえ メールは完全に Web ベースしか使っていないので Evolution 使うのはちょっと大げさだとかんじていましたが、Chienomi さんのページをみると
「 Evolution 入れて CalDAV カレンダーを追加すると gnome カレンダーから参照できるようになる。」
なんですと ?!。ということでやってみました。

Evolution を起動し、カレンダーを追加した後、gnome カレンダーを起動するとあっさりとカレンダーのアイテムが表示されるようになりました。

CardDAVアドレス帳も同じように、Evolution で追加してやると gnome Contats (日本語表示していないのでわからないのですが、恐らくアドレス帳じゃないかと思う) で CardDAV の参照ができるようになった。

1 つ課題が解決しました。

参照

Linux環境でCalDavを使ったカレンダー利用 – Chienomi

Using a CalDAV calendar

Joplin でタグなしのノートを検索したい時

以前は NAS の Synology Note を使っていたのですがいつからか Joplin というノートアプリに移行しました。Synology Note が遅くなってきたのが理由だと思いましたがちょっと定かではないです。

で、ちょうど少しノートの整理をしてた時、タグなしのノートを見つけたかったので調べました。

検索窓に `-tag:*’ と入力すると OK でした。

参考リンクに他の検索項目の見つけ方があったので貼ってあります。

関係ないですが、Outlook のメール検索の場合は label を検索する時は、categories: だったような気がしますが、このあたりツールごとに少しずつ意味するものと名前が違うのでいつも混乱というか都度調べるのが面倒です。早いとこ Copilot のような AI エージェントがチャットで適当に条件指定するといい感じで検索してくれるようにな世界になってほしいものです。

参考

Searching | Joplin

podman / docker 内の Caddy admin API にアクセスする方法

ひきつづき podman 関連のネタです。 podman に CakePHP5 環境を作っている途中ですが、 せっかくなので今回はnginx ではなく Caddy Server を使おうと思い試行錯誤しています。

Caddy は /config/ にアクセスすると設定を取得/変更することができるエンドポイントがありますが、その性質上 localhost (127.0.0.1) からしかアクセスできないようにデフォルトで設定されています。

で今回は、docker でも podman でもコンテナ内で Caddy を動かすとホスト側のブラウザからのアクセスは、コンテナにとっては外部からのアクセスになるのでアクセスできません。(コンテナ使うとよく出会うあの現象です。)

ここにさらっと localhost からのアクセスに制限されているとありますが、どうやったら設定を変更できるかは正直言って見つけにくいです。

わかってしまえば Caddyfile のGlobal block に設定を入れれることがわかるのですが、わからなかったので記事にします。

# global block
# ようは一番上に {} のブロックを入れると global ブロックになるようだ。
{
  admin 0.0.0.0:2019
}
:80 {
  # 80 で待ち受ける内容が以下につづく。
  ....
}

これで curl localhost:2019/config/ でアクセスできるようになりました。

参考

How to execute the Caddy API in Docker? – Help – Caddy Community

Global options (Caddyfile) — Caddy Documentation

podman の補完を設定する

ぼちぼち、podman をいじり始めているわけですがどうも completion が効いていない気がします。 docker (podman も同じように) はコマンドが長いので補完なしでは厳しすぎるので調べてみます。

podman 3.4.4 では –help としても completion のことはまったく出てきませんが、気にせずヘルプを表示してみます。どうやら、bazh、zsh、fish を powershell 用の補完設定ができるようです。

今回は bash で設定します。

$ podman completion --help 
Generate shell autocompletions

Description:
  Generate shell autocompletions.
  Valid arguments are bash, zsh, and fish.
  Please refer to the man page to see how you can load these completions.

Usage:
  podman completion [options] {bash|zsh|fish|powershell}

Examples:
  podman completion bash
  podman completion zsh -f _podman
  podman completion fish --no-desc

Options:
  -f, --file string   Output the completion to file rather than stdout.
      --no-desc       Don't include descriptions in the completion output.

$ sudo  podman completion bash >> /etc/bash_completion.d/podman
$ source /etc/bash_completion.d/podman

これで、補完が効くようになりました。

早いとこコンテナを pod に押し込んで yaml を吐き出して docker compose の代わりに動かしたいのですがなかなかそこまでたどり着きませんね。。。しばらく続きます。

参考

Debian 11 bullseyeでpodmanとdocker-composeを使ってみた | Days of speed