コンソールから切れたプロセスの標準出力をつなげなおす

コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ に、gdbを使って稼働中のプロセスの標準出力、標準エラー出力を繋ぎ直す話が載っていた。
.bash_profileからscreenを起動しているので、ここに書かれた事態に陥ることはまず無いのだが、記憶するためにシェルスクリプトにしておく。

#!/bin/bash
usage(){
    cat <<-EOF >&2 ; exit $1
    Usage:
    既存プロセスの標準出力と標準エラー出力を割り当て直す
    ${0##*/} PID [[-a] OUTFILE]
EOF
}
error(){
    echo "$@" >&2 ; exit 1
}

pid="$1"
test -z "$pid" && usage 0
user=$(ps h p "$pid" o user 2>/dev/null) ||
error "プロセスが見つからない"

test "$USER" = root -o "$USER" = "$user" ||
error "プロセスオーナーが自分ではない"

FLAG=0001 # O_WRONLY

out="$2"
case "$out" in
"") out=/dev/$(ps h p $$ o tty) ;;
-a) FLAG=02001 # O_WRONLY | O_APPEND
    out="$3"
    test -z "$out" && usage 1 ;;
/*) ;;
*)  out=$PWD/$out ;;
esac
touch "$out" 2>/dev/null ||
error "出力先に書けない"

gdb -p "$pid" <<EOF
p close(1)
p open("$out", $FLAG)
p close(2)
p open("$out", $FLAG)
detach
quit
EOF

RD機にキーボードを付けたら快適

HDDレコーダーRD機に、USBキーボードがつなげられることは分かっていたのだが、「有線でキーボードつなぐのも面倒」と思っていました。
ふと、無線キーボードでもいけるのでは無いかと検索すると、物によってはいけそう。

パソコンの他に、PlayStation(R)3、WiiWiiUでも使用可能です。

という説明のあるキーボードをAmazon Prime Dayに買ってみた。問題なくつながり、タイトル修正が快適。
リモコン代わりの操作もできる。

Firefoxで何でも新しいタブで開く

Tab Mix Plusが使えなくなって以来、いろいろ不便。

サーチ窓:
browser.search.openintab;true
ブックマーク:
browser.tabs.loadBookmarksInTabs;true
アドレスバー:
browser.urlbar.openintab;true


ついでにメモ。これをしないと、起動後にタブをクリックするまでページが読み込まれない。

browser.sessionstore.restore_on_demand;false

日本語マニュアルページの更新

Linuxの日本語マニュアルを最新化する。
1.https://linuxjm.osdn.jp/download.html から全体のアーカイブをダウンロードして解凍
2.make config して適当に答える。全部インストールすると指定する
  ⇒ installman.sh が出来る
3.インストール済みのマニュアルのみ更新するように、インストールコマンドを抽出

#!/bin/sh
# manファイルは /usr/share/man に、日本語manファイルは /usr/share/man/ja にあり、gzipされている前提
find /usr/share/man -type f |
awk '
FILENAME=="-"{w=$1;sub(/\.gz$/,"",w);man[w]=1;next}
FNR==1{ORS="\n\n";print;next}
{
split($0,line,/\n/)
split(line[4],word,/ /)
if(word[3] in  man) { print;next }
sub(/\/ja\//,"/",word[3])
if(word[3] in  man) { print }
}
' - RS= installman.sh > my-installman.sh

4.更新実行。sudo sh my-installman.sh
5.whatisDB更新。sudo makewhatis


これを自動化すべきか。

いまさら知ったfor変数

for %%A in (A B C D E) do call :sub
goto :EOF

:sub
for %%B in (1 2 3 4 5) do echo %%A-%%B

レキシカルには :sub は、for %%A のループの外だが、%%A が参照できる!
今まで、引数で渡してました。なんてことだ。


しかし、goto すると %%B だけでなく %%A も参照できなくなる。
まあ、これはしょうがない。

@echo off
for %%A in (A B C D E) do call :sub
goto :EOF

:sub
for %%B in (1 2 3 4 5) do (
  echo %%A-%%B
  goto foo
)
:foo
echo %%A-%%B

Proxy経由でMastodonをインストールする

ファイアーウォールの中でProxyサーバー経由で、CentOS7にMastodonをインストールするときのメモ。

1.DockerデーモンのProxy設定
★/etc/systemd/system/docker.service.d/proxy.conf に

[Service]
Environment="HTTP_PROXY=http://prox-hostname:port/"
Environment="HTTPS_PROXY=http://prox-hostname:port/"

というファイルを作って、
systemctl daemon-reload
systemctl restart docker
で反映して、
docker info
で、Proxy情報が表示されることを確認する。


2.コンテナにに対してのProxy設定
Mastodonインストールディレクトリにある .env.production に、

http_proxy=http://prox-hostname:port
https_proxy=http://prox-hostname:port

を追加する。


3.apk や npm や yarn に対してのProxy設定
Mastodonインストールディレクトリにある Dockerfile に、環境変数を追加してみる。

ENV https_proxy=http://prox-hostname:port
ENV http_proxy=http://prox-hostname:port

しかし、これではapkのhttpsに対して効かない(何故??)ようなので、リポジトリのURLをhttpに変更する。

RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
  ↓
RUN echo "@edge http://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \

これで、apkはOK。

npmが環境変数を見ていないようなので、proxy設定を追加する。

 && npm config set proxy http://prox-hostname:port \
 && npm config set https-proxy http://prox-hostname:port \

yarnはコマンドラインで指定する。

 && yarn --proxy http://prox-hostname:port --https-proxy http://prox-hostname:port --ignore-optional \


ちゃんと環境変数 http_proxy https_proxy を見ないツールがあるのは何故だろう?

RubyInstaller2.4.1

出ないのでは無いかと言われていたRubyInstaller2.4が出た。

ネイティブgemsのインストール用に、従来はDevKitというパッケージが用意されいていたが、今回からはインストーラーにMSYS2のインストーラーが含まれている。メニューで1,2,3と選べるようになっているので、順に実行する。それなら、全部自動で実行すればいいのに。


MSYS2インストール時のProxy越えは、環境変数 http_proxy https_proxy で。変数名は小文字であることが必要。


パッケージマネージャーは、pacman と言うコマンドで、アップデートやインストールが出来る。gemsのコンパイルで必要なパッケージをpacmanで追加インストールする。https://ja.wikipedia.org/wiki/Pacman