Debian12.4でumaskのデフォルト値を変更する

/etc/profileを変更する方法は動作しなかった。調べてみるとsystemdで設定する手段があるらしい。

# vi /usr/lib/systemd/system/user\@.service.d/99-umask.conf

指定する3桁は減算する値を指定する。
例)027の場合はファイルが640(666-027)になりディレクトリが750(777-027)のパーミッションになる

[Service]
UMask=027

ただしこれを実施すると正常に動作しないアプリケーションが出てくる。例えば「gdm-settings」が正常に動作しなくなる。理由はアプリケーション側がumaskを変更している環境を考慮していないため、アクセスできないファイルが生成されるからだと思われる。なので、そのファイルを下記コマンドで見つけ出し適切なパーミッションを設定すれば解決する。
※分数は実施した時刻に合わせて適当に
※おそらく/usr/とか/etc/とかだと思う

# find /etc/ -mmin -10
# find /usr/ -mmin -10

AlmaLinux9のシャットダウン時にgrubが表示するdracutの警告を隠す

AlmaLinux9.3をノートパソコンにインストールしてみると、シャットダウン時に下記の警告が表示され、カーネルパラメーターに”loglevel=0″を設定しても表示されてしまう。色々調べて試したが、どうにもならないし、なんとなく無視してよさそうなメッセージなので、とりあえず隠したい。

dracut Warning: Killing all remaining processes
dracut Warning: Cannot umount /oldroot

かなり無理矢理な手段だが、文字色を黒にしてしまう手段で対処する。ちなみに0x00の最後の1桁が前景色で最後から2桁目が背景色。ディストリビューションによって色の定義が異なる場合がある。
(0:黒/1:青/2:緑/3:シアン/4:赤/5:マゼンタ/6:黄/7:薄灰/8:灰/9:薄青/10:薄緑)

# grubby --args vt.color=0x00 --update-kernel ALL

これでgrubが出力するメッセージは隠れてる。我ながらかなりの強行策だ。ただ、Ctrl+Alt+F1〜F6で切り替えられる仮想コンソールも隠れる。ログインぐらいは何も映らなくてもできるので、ログイン後の”.bashrc”の最後に下記を追記して対処する。

…
if [ "$TERM" == "linux" ]; then
    setterm --foreground white --store
fi

EC2+Nginx+node.jsのWEBサーバーをLet’sEncryptでSSL化する

この手順で構築したWEBサーバーを使用する。

・ ディストリビューション: Amazon Linux 2023.1.20230825
・ インスタンスタイプ: t3a.nano
・ ボリュームサイズ: 20GB

python3の仮想環境を使用してcertbotをインストールする。
※この手順作成時はpython3.9だった

# dnf install pip
# mkdir /opt/certbot
# python3 -m venv /opt/certbot
# /opt/certbot/bin/pip install --upgrade pip
# /opt/certbot/bin/pip install certbot

ACMEチャレンジのための設定を追加する。

server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    location = /.well-known/acme-challenge/ {
        root /usr/share/nginx/html/.well-known/acme-challenge/;
    }
}

証明書を取得する。
※何度も失敗すると制限がかかるので予め--dry-runオプションを指定してテストした方が良い

/opt/certbot/bin/certbot certonly --webroot -w /usr/share/nginx/html/ -d testapp.example.com

Nginxの設定ファイルを変更する。

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name testapp.example.com;
    ssl_certificate     /etc/letsencrypt/live/testapp.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/testapp.example.com/privkey.pem;
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_path http://localhost:3000/;
    }
}

Nginxの設定をリロードしてhttpsでの接続を確認する。

# systemctl reload nginx

cronに証明書を更新するジョブを追加する。

0 4 * * * /opt/certbot/bin/certbot renew --deploy-hook "systemctl reload nginx"

EC2をNginx+node.jsでWEBサーバーにする

・ ディストリビューション: Amazon Linux 2023.1.20230825
・ インスタンスタイプ: t3a.nano
・ ボリュームサイズ: 20GB

タイムゾーンを日本に変更する。
※使用できるタイムゾーンはlist-timezonesサブコマンドで確認できる

# timedatectl set-timezone Asia/Tokyo

メモリが512MBしかないのでスワップを追加する。
※事前にswapon –summaryで既存スワップを確認済み

# dd if=/dev/zero of=/swapfile bs=1M count=1024
# mkswap /swapfile
# swapon /swapfile

fstabの末尾にも設定を1行追加して永続化する。

/swapfile    none    swap    sw    0    0

nvmを使用してnode.jsをインストールする。
※使用できるnode.jsのバージョンはnvm ls-remoteで確認できる

# dnf install git
$ git clone https://github.com/creationix/nvm.git ~/temp-nvm
$ ~/temp-nvm/install.sh
$ rm -r ~/temp-nvm/
$ source ~/.bashrc
$ nvm install --lts

適当なWEBサーバーを作成する。

const http = require("http");
http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.end("Hello, World!\n");
}).listen(3000);

node.jsでWEBサーバーを起動しておく。

$ node ~/testapp.js

Nginxをインストールして起動+有効化する。

# dnf install nginx
# systemctl enable --now nginx

リバースプロキシを設定してnode.jsのWEBサーバーに中継する。
※「client_max_body_size 10m」で10MBまでの画像なども受け取れる
※「proxy_set_header Host $host」でクライアントが送信したリクエストのホスト名を渡す
※「proxy_set_header X-Real-IP $remote_addr」でクライアントのIPアドレスを渡す

server {
    listen 80;
    listen [::]:80;
    server_name testapp.example.com;
    client_max_body_size 10m;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_path http://localhost:3000/;
    }
}

Nginxの設定値を再読込する。

# systemctl reload nginx

Fcitx+Mozcでインライン入力できなくなったのを直す

下記のGUIからできる設定は有効化されているものとする。
-----------------------------
Fcitx入力メソッドの設定 → アドオン → Advanced
 → Fcitx XIM Frontend → XIMでOnTheSpotスタイルを使う

下記の設定ファイルを編集して「PreeditStringInClientWindow」がFalseになっていないか確認する。もしFalseになっていた場合は一度Fcitxを終了してからTrueに編集する。自分の環境ではPreeditStringInClientWindowをコメントブロックしただけで直ったのでデフォルトがTrueなのか。

…
# クライアントのウィンドウにプレエディットを表示
# 可能な値:
# True False
PreeditStringInClientWindow=True

Ubuntu22.04で画像を一括編集する

ファイルを検索した結果を一括トリミングする。
※画像は編集後に上書き保存される
※幅:1000px/高さ:700px/水平方向(X)開始位置:100px/垂直方向(Y)開始位置:50pxで切り抜く場合

$ find ./TestGallery/ -name "*.jpg" -print0 | xargs -0 mogrify -crop 1000x700+100+50

ファイルを検索した結果を一括リサイズする。
※画像は編集後に上書き保存される
※50%の大きさにリサイズする場合

$ find ./TestGallery/ -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%

Ubuntu22.04で肥大化したqcow2を小さくする

virt-sparsifyを使用するためパッケージをインストール。

# apt install libguestfs-tools

下記のコマンドで小さくできる。シンプロビジョニングには/tmp/を使用するので空き容量に注意。

# virt-sparsify /path/to/vm/image.qcow2 /path/to/vm/image2.qcow2