カテゴリー: 技術

homebrewでdeprecatedとなったfdcloneをなんとかする

macOSにfdcloneをインストールしていたのですが、最近のhomebrewでは

brew search fdclone
==> Formulae
fdclone ✔ (deprecated)

となってしまいまして、廃止だということになってしまいました。まだinstallできるけど随分と古い環境でmakeされたファイルがインストールされてしまいます。今後も使いたいので、自前でなんとかしてみました。


公式にパッチ送ったりすると、のちのち面倒な対応が発生したりすることになりかねないので、方針としてはとりあえず、ローカルのtapとして設定をするようにして、自前でmakeします。

前提として最新のhomebrewの環境がインストールされていること。当然ですが、コンパイラ環境もインストールしておきます。

#!/usr/bin/env bash
set -euo pipefail

# 1. ローカルTapリポジトリを作成 (既に存在する場合はスキップ)
if ! brew tap | grep -qx "local/fdclone"; then
  echo "==> Creating local tap: local/fdclone"
  brew tap-new local/fdclone
else
  echo "==> local/fdclone tap already exists."
fi

# 2. Tap ディレクトリおよび Formula ディレクトリのパスを取得・作成
TAP_DIR="$(brew --repository local/fdclone)"
mkdir -p "${TAP_DIR}/Formula"

# 3. Formula ファイル (fdclone.rb) を生成
echo "==> Generating Formula: ${TAP_DIR}/Formula/fdclone.rb"
cat << 'EOF' > "${TAP_DIR}/Formula/fdclone.rb"
class Fdclone < Formula
  desc "File Manager for UNIX-like OS"
  homepage "http://www.unixusers.net/authors/VA012337/soft/fd/"
  url "http://www.unixusers.net/authors/VA012337/soft/fd/FD-3.01j.tar.gz"
  mirror "https://deb.debian.org/debian/pool/main/f/fdclone/fdclone_3.01j.orig.tar.gz"
  version "3.01j"
  sha256 "fe5bb67eb670dcdb1f7368698641c928523e2269b9bee3d13b3b77565d22a121"
  license :cannot_represent

  # Rust製のコマンドライン検索ツール `fd` とコマンド名が重複するため競合を明記
  conflicts_with "fd", because: "both install `fd` binaries"

  def install
    # macOS システムヘッダとのインクルードガード競合を回避するための書き換え
    inreplace "dirent.h", "__DIRENT_H_", "__FD_DIRENT_H_"
    inreplace "printf.h", "__PRINTF_H_", "__FD_PRINTF_H_"

    # Makefile の依存関係順序を担保するためシングルスレッドでビルド
    ENV.deparallelize

    # Homebrew の Cellar パス / man パスに合わせてビルド・インストール
    system "make", "PREFIX=#{prefix}", "CONFDIR=#{etc}", "all"
    system "make", "PREFIX=#{prefix}", "CONFDIR=#{etc}", "MANTOP=#{man}", "install"

    # サンプル設定ファイルを pkgshare に配置
    pkgshare.install "_fdrc" => "fd2rc.dist"
  end

  def caveats
    <<~EOS
      To install the initial config file:
        install -c -m 0644 #{opt_pkgshare}/fd2rc.dist ~/.fd2rc

      To set application messages to Japanese, edit your ~/.fd2rc:
        MESSAGELANG="ja"
    EOS
  end

  test do
    # fd のシェルモード (fdsh) を利用して正常動作を確認
    assert_match "Hello Homebrew", shell_output("#{bin}/fdsh -c \"echo Hello Homebrew\"")
  end
end
EOF

echo "==> Done! Formula created at ${TAP_DIR}/Formula/fdclone.rb"
echo ""
echo "To build and install fdclone, run:"
echo "  brew install --build-from-source local/fdclone/fdclone"

このbashのスクリプトを実行するとローカルのtapにFormulaファイルの設定が書き込まれて、これをbrewコマンドでinstallするとfdcloneがmakeされて、従前のようにfdcloneを使うことができるようになります。

設定ファイルは ~/.fd2rc ですので(自動でインストールされます)、こちらを書き換えると設定の変更などができます。

なんか最近のmacOSのコンパイラだとmake通らないなあ、と思っていたのですが、AIさんに聞いたところ、「macOS システムヘッダとのインクルードガード競合を回避するための書き換え」があればmake通るとわかりまして、その反映をしたFormulaファイルをAIに作成させています。

Ubuntu 26.04 LTSへのアップデート

前回の24.04.1へのアップデートはこちらから。

26.04がリリースされたので、検証用に設定したVirtualBox上の24.04.4 LTSのDesktopのアップデートを行った。

まず全体を最新の24.04にするためにaptでupgradeを行い、すべてが最新版になっていることを確認。
sudo apt update
sudo apt upgrade

その後、システムのアップグレードコマンドを実行。回答を求められるプロンプトは基本はすべてyで問題なし(ただし説明はきちんと読んで確認しよう。問題ありとわかったらyでなくnを!)。
sudo do-release-upgrade -d

まだ、ポイントリリースの26.04.1になっていないので、
do-release-upgrade -d
と-dが必要だが、最終的に再起動して、完了。とくにエラーで止まることなく、GUIの環境含めて、一式の更新が完了した。

VPSの環境の24.04.4はいろいろと使用しているので、もうちょっと様子を見てから対応予定。またWindows11のwsl2環境の24.04は do-release-upgrade の途中で止まってしまうので、要調査。最悪wsl2は一から入れ直してもいいけれど。


現時点でのwsl2でのエラーの様子は、下記。

2026/04/25時点ではwsl2環境のUbuntu 24.04.4では正常にアップデート処理が動かずAbort

これは26.04.1になって、-dオプションなしでアップデートできるようになれば、その時点で解決しているだろうか。ちなみに、wsl2の26.04は、ubuntu.comのサイトで配布中。 


2026-04-26追記

wsl2の環境でのアップデートにはwsl2の設定が不足しているとエラーで止まるようです。

cmdから、下記コマンドにてメモ帳を起動して

notepad %USERPROFILE%\\.wslconfig

下記を記載編集する。ファイルがない場合は新規で保存する。(表示上回り込んで複数行に見えるかもしれないですが、kernelCommandLineからcgroup_no_v1=all”で1行です)

[wsl2]
kernelCommandLine="systemd.unified_cgroup_hierarchy=1 cgroup_no_v1=all"

この設定にてwsl2を起動する。すでにwsl2が起動している状態の場合は

wsl --shutdown

で、強制的にシャットダウンして、あらためてWindows TerminalでUbuntuを起動する。

その後

sudo do-release-upgrade -d

にて、アップデート開始する。Abortしないでアップデートが進行する。指示に従って進めて再起動すると26.04へのアップデートが完了する。


2026-04-26追記

VPS環境についても、VPSのコントロールパネルからリモートコンソールのアクセスでログインして、 do-release-upgrade -d にて更新完了。途中、nginxの設定ファイルを更新するかの確認があったが、これはnで更新なしを指定。それ以外で設定変更を聞かれることなく、アップデート後の再起動で、そのまま必要なサービスが起動して、リモートからもアクセスできた(このWEBサイトも、そのVPS環境上の構築)。

以前、CentOSでのバージョンアップで酷い目にあったことがあるが(手順がOS再インストールしかないとか、手順通り進めると途中でエラーが出て解決方法がなく結局OS再インストールとか)、Debian系のLinuxはバージョンアップのアップデート更新も簡単に、正確にできて、サーバ運用するならこちらのほうが楽だよなあ、というのが、現時点での感想です。


2026-05-21追記

wsl2の環境については、wsl2自体の更新もかけたほうがよさそうです。PowerShellかcmdのコンソールにて

wsl --update

で、wsl自体のアップデートを行い、システム更新をして、Ubuntu 26.04での環境構築となります。

邪悪なAdobe Creative Cloud ( Adobe CC )のhosts書き換え問題に対抗する

邪悪なAdobe Creative Cloud ( Adobe CC )のhosts書き込みにたいしての対応策を共有しておきます。


Macの場合はファイルシステムの権限設定で対応可能。

sudo vi /private/etc/hosts
で書き加えられた部分を削除して、

sudo chflags uchg /private/etc/hosts
で変更不可属性を設定することで、今後、書き換えられないようになる(root権限でも直接は書き換えできない)。

sudo chflags nouchg /private/etc/hosts
もし、何か自分の意思での書き換えが発生した場合は、変更不可属性を解除することで対応可能。


Windowsの場合は、 下記を行う。

Adobeの邪悪な書き込みの消し込みはコマンドプロンプトを管理者権限(コマンドプロンプトのアイコン右クリックで管理者権限で起動を選択)にて起動して、下記のようにnotepadで編集して保存
notepad C:\Windows\System32\drivers\etc\hosts

その後、C:\Windows\System32\drivers\etc\ をエクスプローラーで開いて、hostsというファイルに対して、

1 ファイルを右クリックし、[プロパティ] を開く
2 [セキュリティ] タブを選択し、[詳細設定] をクリック
3 [アクセス許可の変更]をクリック後、[継承の無効化] をクリック、[継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換します。]をクリック
4 SYSTEMの行をクリック、[フルコントロール][変更][書き込み]のチェックを外して[読み取りと実行][読み取り]だけにして[OK]をクリック
5 同様にAdministratorsの行をクリック、[フルコントロール][変更][書き込み]のチェックを外して[読み取りと実行][読み取り]だけにして[OK]をクリック
6 [OK] を押して変更するダイアログで[はい]をクリック

もし、何か自分の意思での書き換えの都合が発生した場合は、SYSTEMとAdministratorsの権限に[フルコントロール][変更][書き込み]のチェックを入れて変更です。

iOS26のSafariの問題・不具合・バグあれこれ

iOS26のSafariには、いろいろと問題、不具合、バグがありそうで、情報収集しました。それらのまとめです。

100dvhが100dvhになっていないじゃないか問題

  • ファーストビューでの全画面プレゼンが高さ100%にならない(ように見える)
  • モーダルダイアログのBGグレー透過背景が高さ100%にならない(ように見える)
  • ハンバーガーメニューをオープンした時に高さ100%にならない(ように見える)
  • 画面下部だけじゃなく画面上部も勝手に表示されることがある

→
iOSの設定(アクセシビリティの「画面表示とテキストサイズ」の「透明度を下げる」)における透明度のon/offで見た目が異なるので透明度onのときに合わせてむりやり高さを100%以上に引き伸ばすと、透明度offのときに見切れ問題がある。通常ブラウザ側からの設定状況取得は、CSS mediaqueryのprefers-reduced-transparencyにて判定可能になるはずだが、iOSのSafariにはprefers-reduced-transparencyは実装されていない。この設定が実装されるまで、透明度の問題の根本的な回避策(有用な実装)はHTML/CSSレベルでは記述できないと見られる。

ちなみに、上下が覆われておらず、高さが足りないと思っている部分が実は100dvhで、その上下(上の時計などあるエリアと、下のURL欄などがあるタブバーのエリア)はviewportからはみ出ているエリア。viewport外が見えている状態。viewportがviewportの役目になっていない。アプリUIの仕様がおかしい。

position:fixed;bottom:0;が固定されないじゃないか問題

  • bottomに固定でなく画面上下中央に固定表示?(という投稿を見かけた)
  • bottom:0が100dvhの最下部なので透過しているタブバーの上になるので一番下に見えない(ように見える)
  • スクロール中にbottomとタブバーの間に隙間が見えることがある(隙間ないパターンもある) 画面最下部の判定できていない
  • 100dvhの下、タブバーのエリアの背景に勝手に色塗りされるが、塗られる色の判定基準がわからない(ついでに画面上部の時計などあるエリアも塗りつぶしされることがある)

→
全般的にこれはバグっぽいが、どうか? 固定パーツは100%幅でなく背景色塗りなしという小細工のデザインで回避できそう

その他、認識しておくこと

  • Safariにおけるタブバーの表示設定はデフォルトの「コンパクト」以外に、「上」「下」があるが、それぞれ100dvhの表示の挙動が異なる
  • デバイスの横持ち(landscape)での表示もあり、透明度がonになっている通常の状態において、タブバーが「コンパクト」設定でも画面上部にタブバーが透明でない状態で、ベタっと表示されるからこっちの考慮も必要
  • 「共有」から「ホームに保存」でホーム画面にブックマーク保存してからタップして開く、PWAのモードも見た目が通常のSafariと異なるので、むりやり通常のSafariに対してHackした場合はその点も留意が必要

つまり組み合わせは以下の通り。

  • デバイス縦(portrait)
    • 透明度on(アクセシビリティ設定の標準)
      • タブ・コンパクト
      • タブ・上
      • タブ・下
    • 透明度off(アクセシビリティ設定でoff)
      • タブ・コンパクト
      • タブ・上
      • タブ・下
  • デバイス横(landscape)
  • PWA

さらに、細かく見ていくとデバイス横の透明onとoffの区別、デバイス横のタブ配置の区別、デバイス横のタブ表示off設定、PWAのデバイス横とデバイス縦の区別も必要かも。

他、何かiOS26のSafariの挙動で気になることがあれば、コメントで教えてください。


2025-09-24追記
挙動やハックをまとめている方がいましたので、共有しておきます。iOS26のSafariの縦モード(portrait)専用の検証なので、横持ち(landscape)するとおかしなことになりますね。


2025-09-30追記
iOS26.0.1がリリースされました。が、Safariの課題は解決していません。先は長そうです。


2025-10-14追記
ブラウザのモード別の区別の組み合わせについて追記した。また、当初「メニューバー」とこの投稿では記載していたが、iOSのSafariの設定画面の表記が「タブ」の配置になっているので、「タブ」または「タブバー」と記述を修正した。


2025-11-04追記
iOS26.1がリリースされたけれど、状況に変化なさそう。

Windowsのプロセスを強制的にkillするには、wmicコマンドのdeleteオプションを使う(25H2以降でwmicは廃止になるので、PowerShellコマンドを使う)

taskkillコマンドを使う

taskkill /f /im explorer.exe

taskkillではアクセス拒否されてしまい、killできないこともある。管理者権限で指定しているのだから、killできないとおかしいのだが。

これでも言うことを聞かない場合は、こちらを試す。

wmic process where "name='explorer.exe'" delete

これなら、確実にプロセスをkillできるようだ。


2025-09-11T11:20:00補足
Windows11 25H2以降でwmicコマンドが削除されて廃止になるので、下記のようなPower Shellコマンドになります。

Stop-Process -Name "explorer" -Force

Power ShellのStop-Processの詳細については、マイクロソフトのPower ShellのStop-Processのページを参照ください。

wslでsystemdを起動する方法

wslを起動してから、

$ sudo vi /etc/wsl.conf

でエディタを起動して、以下を記述する。

[boot]
systemd=true

これで、次回のwslの起動から、systemdが自動起動してinitの処理を行うようになる。ただし、initの処理が走るためにwslの高速な起動が、もっさり起動になってしまうのが、玉に瑕。

FreeBSD環境でApache 2.4 / PHP 8.2 / Let’s Encrypt / HTTP2を設定する

FreeBSDで、Let’s EncryptでTLS(SSL)の証明書を設定し、HTTP2プロトコルを有効にしたWebサーバを、Apache 2.4とPHP 8.2で作成する。

以下、簡単な手順を記述。

root権限でpkgで必要なものをインストールする。PHPの追加パッケージはお好みで。

pkg install  php82 php82-gd php82-mbstring php82-mysqli php82-pgsql
pkg install apache24 ap24-mod_http2
pkg install py39-certbot py39-certbot-apache

/etc/rc.conf にApache Web Serverの起動設定を行う。

apache24_enable="YES"

Apache Web Serverを起動する。ここではhttpのみの起動となる。

/usr/local/etc/rc.d/apache24 start

Let’s Encryptの実行をして証明書を取得する。httpでサーバにアクセスがあるので、Apache Web Serverの起動されていることが前提。

certbot certonly --webroot -w /usr/local/www/apache24/data -d www.example.com

crontabで定期的に更新するように設定。

0 9 1,15 * * /usr/local/bin/certbot renew

SSLの設定を行う。

cp /usr/local/etc/apache24/extra/httpd-ssl.conf /usr/local/etc/apache24/modules.d/000_httpd-ssl.conf

SSLの設定ファイルをコピーして編集する。Let’s Encryptで作ったキーファイルを指定

SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.example.com/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.example.com/privkey.pem"
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.example.com/fullchain.
pem"
ファイル内の書き換える箇所のみ引用

Apacheの設定では、 /usr/local/www/apache24/httpd.conf を書き換えする。

LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
# LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

mod_mpm_preforkがデフォルトになっているが、これではHTTP2でPHPを実行できないので、mod_mpm_eventを有効にする。

設置されている /usr/local/etc/apache24/modules.d/200_mod_h2.conf を編集する

LoadModule http2_module libexec/apache24/mod_h2.so

/usr/local/etc/apache24/modules.d/001_php.conf というファイルを作成して編集。

HTTP2の環境でのPHPはmod_phpではなく、php-fpmでの実行となる。

LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_http2_module libexec/apache24/mod_proxy_http2.so
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
<FilesMatch \.php$>
        SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

/etc/rc.conf で起動するように設定

php_fpm_enable="YES"

php-fpmを起動し、Apache Web Serverを再起動する。

/usr/local/etc/rc.d/php-fpm start
/usr/local/etc/rc.d/apache24 restart

iPadOS 16.1のSafariの表示がおかしい

iPadのOSを16.1に更新したところ、Safariの表示がおかしくなった。デスクトップモードのview port が正しく認識されていない可能性がありそう。

iPadを横向きにしたときは、きちんと横幅にフィットして表示される。

画面横向き(iPad Pro 11inch)
画面縦向き(iPad Pro 11inch)

iPadを縦にすると、Safariの表示で横幅にフィットしないではみ出る。

これは、いわゆる「おま環」の現象だろうか?

補足:ステージマネージャをoffにしたら、iPad縦向きでも、Safariできちんと幅いっぱいにフィットした。ステージマネージャのバグのような気がする。

2022/12/14追記

iPadOS 16.2に更新したところ、まだこの状況は変わっていないみたい。ただ、うまく表示できているサイトもあって、どうなっているのかな。Yahoo Japanは16.1と同様で、縦モードのときはみ出たままです。

vsftpd

めげずにCentOS8に設定中

# dnf install vbsftpd
# systemctl start vsftpd
# systemctl enable vsftpd

FreeBSDでのqmail vpopmailのインストール

まずはportsを最新にする

# portsnap all

portsでqmailをmakeする

# cd /usr/ports/mail/qmail
# make config
# make install
qmailのmake config

configはこんな感じで、設定。あれこれ詰め込んでnetqmailを構築する

続いてcheckpasswordとtcpserverをインストール。この2つはデフォルト設定のままで進む

# cd /usr/ports/security/checkpassword
# make install
# /usr/ports/sysutils/ucspi-tcp
# make install

qmailの基本的な設定は割愛。

/var/qmail/rc は、Maildirの形式にする。

# cp /var/qmail/boot/maildir /var/qmail/rc

vpopmailのインストール

# /usr/ports/mail/vpopmail
# make config
# make install
vpopmailのmake config

configはこんな感じで、設定。あれこれ詰め込んでvpopmailを構築する。

起動スクリプトは、あれこれ自前で設定したいので、独自に作成する。

# vi /usr/local/etc/rc.d/qmail
!/bin/sh

# PROVIDE: qmail
# REQUIRE: LOGIN
# KEYWORD: shutdown

#
# Add the following line to /etc/rc.conf to enable qmail:
# qmail_enable="YES"
#

. /etc/rc.subr

name="qmail"
desc="Enable/Disable qmail"
rcvar="qmail_enable"

load_rc_config "$name"

start_cmd="${name}_start"
command="/var/qmail/bin/qmail-start"

extra_commands="stop"
stop_cmd="${name}_stop"

pidfile="/var/run/${name}.pid"
HOSTNAME=hostname

qmail_start(){
    #start qmail daemon
    /var/qmail/rc start

    /usr/local/bin/tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb \
    /usr/local/vpopmail/etc/tcp.smtp.tmp \
    < /usr/local/vpopmail/etc/tcp.smtp

    #start smtpd
    /usr/local/bin/tcpserver -H -R -v -x /usr/local/vpopmail/etc/tcp.smtp.cdb -c 100 -u qmaild -g qmaild 0 25 \
    /var/qmail/bin/qmail-smtpd 2>&1 \
    | /var/qmail/bin/splogger smtpd &

    #start popd
    /usr/local/bin/tcpserver -R -H 0 110 /var/qmail/bin/qmail-popup $HOSTNAME \
    /usr/local/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 \ | /var/qmail/bin/splogger pop3d &

    /bin/pgrep qmail-send > ${pidfile}
    echo "qmail start"
}

qmail_stop(){
    killall tcpserver
    killall qmail-send
    echo "Shutting down pop & smtp"
}

run_rc_command "$1"
# chmod 0755 /usr/local/etc/rc.d/qmail
# echo qmail_enable=\"YES\" >> /etc/rc.conf
# echo sendmail_enable=\"NONE\" >> /etc/rc.conf

こんな感じで起動スクリプトを置いて、rc.confで起動設定と、標準のsendmailの停止を設定する。

他のプログラムはpkgでイントールしたいので、qmailとvpopmailはpkgで更新されないようにlockをかける

# pkg lock netqmail-1.06_5
# pkg lock vpopmail-5.4.33_3

以上で、qmailとvpopmailの基本的なインストールと設定は終了。

WEBブラウザでアカウント管理するならqmailadminをインストールする。

# cd /usr/ports/mail/qmailadmin
# make install

設定は標準のままでインストールまで行う。

Linux環境であれこれ苦労してパッケージ入れたり、自分でコンパイルすることに比べて、FreeBSDでの構築は非常に簡単ですね。