2025年06月22日 Slackware64-currentでsendmail-8.18.1のビルド失敗 [長年日記]
_ Slackware64-currentで
slackpkg -batch=on -default_answer=y upgrade-all
したところ、icu4c-76からicu4c-77にバージョンアップしたためsendmailが一部のライブラリを動的リンク出来なくなり起動しなくなった。
sendmailはextraパッケージから自分でビルドする必要があるので、いつも通りに行ってみると以下のエラーが出た。
vfscanf.c:249:30: error: assignment to ‘ULONGLONG_T (*)(const char *, char **, int)’ {aka ‘long long unsigned int (*)(const char *, char **, int)’} from incompatible pointer type ‘ULONGLONG_T (*)(void)’ {aka ‘long long unsigned int (*)(void)’} [-Wincompatible-pointer-types] 249 | ccfn = (ULONGLONG_T (*)())sm_strtoll; | ^ vfscanf.c:327:30: error: assignment to ‘ULONGLONG_T (*)(const char *, char **, int)’ {aka ‘long long unsigned int (*)(const char *, char **, int)’} from incompatible pointer type ‘ULONGLONG_T (*)(void)’ {aka ‘long long unsigned int (*)(void)’} [-Wincompatible-pointer-types] 327 | ccfn = (ULONGLONG_T (*)()) sm_strtoll; | ^
この手のエラーはコンパイラのバージョンが新しすぎてエラーチェックが厳しくなっているため、古めのソースだとよく出るやつ...
こんな時はLinuxQuestions.orgで尋ねるに限る。
あっという間(4時間程度)でレスが付き、パッチを3種類提供していただけました。
もちろんパチッを適用後はビルドがサックリ完了。ありがたや :)
2025年04月14日 Windows 11 Insider Preview 10.0.26120.3863 (ge_release_upr) インストールエラー 0xc1900209 [長年日記]
_ エラーコード 0xc1900209 は、Windows 11 Insider Preview のインストール中に互換性の問題が検出されたことを示しているらしい。これは通常、インストールを妨げているアプリケーションやドライバが原因とのこと。
インストールログを調べるには、以下のパスにあるログファイルを確認。
C:\$WINDOWS.~BT\Sources\Panther\CompatDataXXXX.xml
ログの抜粋。
<CompatibilityInfo BlockingType="Hard" Message="お使いの PC は、このバージョンの Windows ではまだサポートされていません。 Windows Updateは、問題が解決されると、このバージョンの Windows を自動的に提供します。 " Title="この PC をこのバージョンの Windows にアップグレードすることはできません。"/> <DriverPackage Inf="oem58.inf" BlockMigration="True" HasSignedBinaries="False"/> <DriverPackage Inf="oem57.inf" BlockMigration="True" HasSignedBinaries="False"/>
BlockMigration="True" かつ HasSignedBinaries="False" となっており、署名されていない or 不適切なドライバが移行をブロックしているもよう。
ドライバの情報を検索してみる。
pnputil /enum-drivers
一部を抜粋。
公開名: oem57.inf 元の名前: prnms009.inf プロバイダー名: Microsoft クラス名: Printer クラス GUID: {4d36e979-e325-11ce-bfc1-08002be10318} クラス バージョン: 4.0 ドライバー バージョン: 06/21/2006 10.0.22621.1 署名者名: Microsoft Windows
古いプリンタドライバ(?)らしい...
とりあえず削除してみる。
pnputil /delete-driver oem57.inf /uninstall /force pnputil /delete-driver oem58.inf /uninstall /force
下記のエラーメッセージが出て削除できず。
ドライバー パッケージがアンインストールされました。 ドライバー パッケージを削除できませんでした: ひとつ以上のデバイスが現在、指定された INF を使用してインストールされています。
regeditで「oem57.inf」「oem58.inf」を検索し、全て削除。
以上の対応で、Windows 11 Insider Previewのインストールエラーが解消 d(^^)。
2025年04月13日 vmware上の仮想Windows11ProでMACアドレスの取得が不正になる場合の対応 [長年日記]
_ ホストOSがLinuxで、仮想OSがWindows11 Pro(192.168.0.10)で運用しているが、何故かWindows11 Proがゲートウェイ(192.168.0.100)のMACを動的に誤った値で取得してしまう。以下のコマンドで静的に登録することで対応。
PS C:\Windows\System32> arp -d 192.168.0.100; netsh interface ipv4 delete neighbors "Ethernet0" 192.168.0.100; netsh -c "interface ipv4" add neighbors "Ethernet0" 192.168.0.100 xx-yy-zz-47-e3-ec OK
google検索だけでは埒があかなかったが、ChatGPTと会話を重ねることで解決!
2025年03月22日 xfce4-terminal内のメールアドレス文字列をCTLR+左クリックした時に起動するメーラの設定 [長年日記]
_ xfce4-terminal内のメールアドレスっぽい文字列をCTRL+左クリックするとemacsのデフォルトメーラが起動する。これをmewに変更したい。
_ メーラとして設定するスクリプト
$ cat ~/etc/mailer.sh #! /bin/sh # # (mew-user-agent-compose "address1,address2," "subject") # xfce4-terminal -e "emacs -nw --eval \"(mew-user-agent-compose \\\"$1\\\" nil)\""
_ 設定ファイル
設定内容は以下のファイルに記録される。
$ cat ~/.local/share/xfce4/helpers/custom-MailReader.desktop [Desktop Entry] NoDisplay=true Version=1.0 Encoding=UTF-8 Type=X-XFCE-Helper X-XFCE-Category=MailReader X-XFCE-CommandsWithParameter=mailer.sh "%s" Icon=mailer.sh Name=mailer.sh X-XFCE-Commands=mailer.sh
以上
2025年02月24日 USB Sound Blaster Digital Music SX with Slackware [長年日記]
_ USB Sound Blaster Digital Music SX
USB Sound Blaster Digital Music SXという古いオーディオインターフェースを入手したのだが、ヘッドフォンから再生される音も、マイク端子からの音もバリバリとノイズまじりになる。pulseaudioのデフォルトサンプリングレートが44100Hzに対し、SXの方は48000Hzしか対応していないらしい。
そこで~/.config/pulse/daemon.confに以下を記述し、
default-sample-rate = 48000
pulseaudioを再起動すると改善される。
$ pulseaudio -k $ pulseaudio --start --log-target=syslog
2025年02月20日 spf record for no-ip [長年日記]
_ spf record for no-ip
v=spf1 a:myh.no-ip.org include:hcn.zaq.ne.jp ~all
2025年02月11日 pulseaudioによる合成マイク作成 [長年日記]
_ pulseaudio環境でヘッドフォンから再生されている音声とマイク入力を合成して録音するために、仮想の合成マイクを作ってみた。
_ 仮想の出力デバイス(VOUT)を作成し、そこへの出力を取り込むためのデバイス(VOUT.monitor)に名称(MONITOR.VOUT)を設定する
$ pacmd load-module module-null-sink sink_name=VOUT $ pacmd update-sink-proplist VOUT device.description=VOUT $ pacmd update-source-proplist VOUT.monitor device.description=MONITOR.VOUT
_ VOUTに出力するためのソースを確認する
$ pacmd list-sources|egrep name: name: <alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI3__sink.monitor> name: <alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI2__sink.monitor> name: <alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI1__sink.monitor> name: <alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Headphones__sink.monitor> name: <alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Mic2__source> name: <alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Mic1__source>
_ VOUTにマイクの入力を接続する
$ pacmd load-module module-loopback source=alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Mic1__source sink=VOUT
_ VOUTにヘッドフォンの再生音声を接続する
$ pacmd load-module module-loopback source=alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Headphones__sink.monitor sink=VOUT
_ 仮想のソース(VOUT.monitor)を確認する
$ pacmd list-sources|egrep name: name: <alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI3__sink.monitor> name: <alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI2__sink.monitor> name: <alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__HDMI1__sink.monitor> name: <alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Headphones__sink.monitor> name: <alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Mic2__source> name: <alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Mic1__source> name: <VOUT.monitor>
_ ffmpegを使って録音してみる
$ ffmpeg -f pulse -i VOUT.monitor output.mp3
_ 仮想合成マイクを削除する
$ pacmd unload-module module-loopback $ pacmd unload-module module-null-sink
2025年01月19日 Audacityの自分用メモ... [長年日記]
_ ホワイトノイズ除去
- 無音部分を選択
- エフェクト->ノイズ除去と修復->ノイズを低減->ノイズプロファイルを取得
- 全選択
- エフェクト->ノイズ除去と修復->ノイズを低減->[OK]
- ファイル->オーディオをエクスポート
_ 音量のノーマライズ
- 全選択
- エフェクト->音量と音圧->ノーマライズ->適用
_ 表示拡大縮小
- Ctrl-1 表示拡大
- Ctrl-2 表示リセット
- Ctrl-3 表示縮小
_ カーソル移動
- 位置付:左右カーソルキーまたはクリック
- トラックの先頭:J
- トラックの末尾:K
_ 選択
- 選択:Shift+左右カーソルキー
- 全選択:Ctrl+A 又は 波形上をダブルクリック
- 解除:Alt+S N
_ 選択範囲を再生範囲に設定&解除
- 設定:Shift+L
- 解除:Shift+Alt+L
_ ループ再生設定&解除
- 設定&解除(トグル):L
_ 再生&停止
- スペース(トグル)
_ 録音&停止
- 選択トラックに追加:R
- 新規トラック:Shift+R
- 停止:スペース
_ 再生録音一時停止
- P
_ 新規トラック追加
- ステレオ:Alt+T N S
- モノラル:Alt+T N M
_ 繰り返し
- 選択
- エフェクト->特殊->繰り返し->繰り返し回数の追加->適用
2024年12月27日 python 仮想環境 [長年日記]
_ python 仮想環境
仮想環境作成
mkdir _AppName_ cd _AppName_ python -m venv --upgrade-deps .venv
- .venv は推奨のディレクトリ名
仮想環境の活性化
source .venv/bin/activate
パッケージのインストール
最新版
pip install _PackageName_
指定バージョン
pip install _PackageName_==_Version_
パッケージの更新
pip install -U _PackageName_
インストール可能バージョンの確認
pip index versions _PackageName_
インストールしたパッケージの一覧
pip freeze
pip freeze >requirements.txt
パッケージの削除
pip uninstall _PackageName_
pip uninstall -r requirement.txt -y
インストールしたパッケージの一括再インストール
pip install -r requirements.txt
- 同じ仮想環境を複製したい場合に行う。
全パッケージの一覧
pip list
pip list --format=freeze
最新でないパッケージの一覧
pip list -o
最新状態のパッケージの一覧
pip list -u
仮想環境の非活性化
deactivate
仮想環境のpythonバージョンをローカルのバージョンに合わせる
python -m venv .venv --clear
- 実行後は自分でインストールしたパッケージが削除されているので、再インストールが必要。
pip install -r requirements.txt
2024年12月07日 Docker on Slackware64-current [長年日記]
_ Docker on Slackware64-current
DockerをSlackware64-currentに導入してみた。基本的にはPonceさんのGithubからSlackbuildスクリプトをダウンロードしてきて諸々をビルドしていく。 ソースはSlackbuild内の*.infoに記述されているので、そこからダウンロードする。 ビルドする際にはsuではなくsu -でrootになって行う。
ビルド後source /etc/profile.d/go.shを実行し、gcc-goではなくgoogle-go-langが優先して実行されるように設定し、以降のビルドを行う。 go.shはビルド時のみ必要で、Docker実行時には必要ない。
chmod +x /etc/rc.d/rc.libvirt
/etc/rc.d/rc.local
if [ -x /etc/rc.d/rc.libvirt ]; then /etc/rc.d/rc.libvirt start fi
chmod +x /etc/rc.d/rc.docker
/etc/rc.d/rc.local
if [ -x /etc/rc.d/rc.docker ]; then /etc/rc.d/rc.docker start fi
_ 動作確認
以下のコマンドを実行し
$ docker run hello-world
以下のような表示がされればOK
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world c1ec31eb5944: Pull complete Digest: sha256:305243c734571da2d100c8c8b3c3167a098cab6049c9a5b066b6021a60fcb966 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ $
_ docker(基本)
実体
/var/lib/docker/
docker hub(https://hub.docker.com/)からコンテナイメージを取得
docker pull _ContainerImage_:_Tag_
- :_Tag_ 未指定時は :latest を指定したとみなす。
コンテナイメージからコンテナを生成し実行する
docker run --name _ContainerName_ \ -it \ -e _EnvName_=_Value_ [-e ...] \ -p _LocalPort_:_ContainerPort_ [-p ...] \ -v _LocalDir_:_ContainerDir_ [-v _VolumeName_:_ContainerDir_] \ --net _NetworkName_ --expose _OpenPort_ \ -d \ _ContainerImage_:_Tag_
- -it
- ローカルとコンテナの標準入出力を紐づける
- -p
- 外部からのアクセス用ポート指定
- -v _VolumeName_
- _VolumeName_ は docker volume create で作成しておく
- --net _NetworkName_
- _NetworkName_ は docker network create で作成しておく
- --expose _OpenPort_
- コンテナ間通信用に公開するポート
- -d
- バックグラウンドで起動する
- ローカルにコンテナイメージが存在しない場合は、自動的にdocker hubからpullしてくる。
生成済のコンテナを実行する
docker start _ContainerName_
コンテナを停止する
docker stop _ContainerName_
コンテナの削除
docker rm _ContainerName_
コンテナイメージの削除
docker rmi _ContainerImage_
コンテナの一覧
docker container ls -a
コンテナイメージの一覧
docker image ls -a
コンテナプロセスの一覧
docker ps -a
コンテナ内でコマンド実行
docker exec -u _UserName_ \ -w _WorkingDir_ \ -e _EnvName_=_Value_ [-e ...]\ -it \ _ContainerName_ \ /bin/_AnyCommand_ arg1 arg2 ...
ボリュームの生成
docker volume create _VolumeName_
ボリュームの確認
docker volume inspect _VolumeName_
ボリュームの一覧
docker volume ls
ボリュームの削除
docker volume rm _VolumeName_
Bridgeネットワークの作成
docker network create _NetworkName_
ネットワークの削除
docker network rm _NetworkName_
_ コンテナイメージの作成
コンテナイメージの定義(Dockerfile)
# ベースイメージ FROM ubuntu:latest # コンテナ起動時のカレントディレクトリ WORKDIR /var/www/htdocs # コンテナ生成時にローカルからコンテナにファイルをコピーする COPY index.html ./ COPY .htaccess ./ # コンテナ生成時にコンテナ内でコマンドを実行する RUN apt update && \ apt install -y -q apache && \ apt install ..snip.. # コンテナ起動時に実行するコマンド ENTRYPOINT["/etc/rc.d/rc.httpd"] CMD ["start"]
CMD は docker run の引数で置き換えることが可能。
docker run ...snip... _ContainerImage_:_Tag_
は /etc/rc.d/rc.httpd start を実行する。一方、
docker run ...snip... _ContainerImage_:_Tag_ stop
は /etc/rc.d/rc.httpd stop を実行する。
コンテナイメージ生成
docker build -t _ContainerImage_:_Tag_ .
_ composeによる複数コンテナの管理
YAML(compose.yaml)による定義
version: '1' services: app1: build: . container_name: _ContainerName_ working_dir: _WorkingDir_ volumes: - _LocalDir_:_ContainerDir_ - _VolumeName_:_ContainerDir_ ports: - "_LocalPort_:_ContainerPort_" depends_on: - app2 app2: image: _ContainerImage_:_Tag_ container_name: _ContainerName_ environment: _Environ_: _Value_ volumes: - _LocalDir_:_ContainerDir_ - _VolumeName_:_ContainerDir_ volumes: _VolumeName_:
composeでコンテナ群を生成&開始
docker compose up -d --build
- --build コンテナが存在してもイメージから再作成する
- すべてのサービスが自動的に生成された単一のネットワークに接続されている
- サービス名(例 app1,app2)がホスト名になる
composeでコンテナ群を停止&削除
docker compose down
composeでコンテナ群を開始
docker compose start -d
composeでコンテナ群を停止
docker compose stop
composeでコンテナプロセス一覧
docker compose ps -a
composeでコマンド実行
docker compose exec -u _UserName_ \ -w _WorkingDir_ \ -e _EnvName_=_Value_ \ app1 \ /bin/_AnyCommand_ arg1 arg2 ...