Emacs (emacs-gtk)起動時に以下のような Warning が出る.
Gtk-Message: 09:25:50.067: Failed to load module "canberra-gtk-module"
libcanberra-gtk3-module を install して Warning が出ないようにする.
Emacs (emacs-gtk)起動時に以下のような Warning が出る.
Gtk-Message: 09:25:50.067: Failed to load module "canberra-gtk-module"
libcanberra-gtk3-module を install して Warning が出ないようにする.
厚生労働省の新型コロナウイルス接触確認アプリ(COCOA)を延々と使っているが,690日目にしてやっと通知来た.この○○daysでなにかポイント還元してくれたらいいのに...マイナポイントなりで.
さて,May 11 の 9am からの 24時間中 67 分間接触があったとのこと.GMT基準の24時間毎に測っている様子で,もしかすると 8:50-9:10 に close contact があったりしたらうまく反応してくれないのかも.
67 minutes of contact に基本的に身に覚えがないが,あるとすれば飛行機に乗っていた時(かつ機内モードでも bluetooth を有効にする習慣がある; COCOA と Fitbit と,たまに AVIOT の Earbud).周りの乗客で,後で陽性になった人が居たのかも.
Instructions によると,症状があったり見に覚えがある場合は相談窓口に連絡,そうでない場合は7日間注意せよ(自己隔離せよ,とまでは書かれていない),とのこと.Find COVID-19 Consultation Centers をクリックすると都道府県を選ぶページが出てきて,そこから相談窓口を探す.
症状はなくて,機内でもマスクつけていたし,換気システムで充分な換気がされているはずで,たぶん感染はしていないのだけど,機内では爆睡していてその間になにかあったりとかしたら嫌なので,念の為 PCR 検査を受けたくて悩む.
札幌市では以下の無料検査事業をやっていて,札幌駅近辺でも予約不要で受けることができる様子.
ワクチン検査パッケージ・対象者全員検査等定着促進事業
実施期間 令和4年6月30日(木)まで(抗原定性検査)
感染拡大傾向時の一般検査事業
実施期間 令和4年5月31日(火)まで(抗原定性検査/PCR検査)
のだけど,動き始める際にそこまで調べられなくて,ひとまずいつもの野良PCR検査を受けて,安心を買っておいた.
受けたのは狸小路の東亜産業PCR検査(2,000円).要予約だけど大抵空いてる.以前は1Fでやっていたけど(かつ3,000円だったような気がする),今は3Fに移動していて,1Fはドラッグストアのようなものが入っている(1F,2Fが商品だらけで3Fに上がる階段が見つけづらい).ちなみに「陰性証明」は発行されなくて,以下の抜粋のような報告レポートが届くのみ.
検体として取り出した唾液内に、SARS-CoV-2(新型コロナウイルス)に特徴的な RNA 配列が、「存在しない」状況を示していました。したがいまして、検査状況としては、「低リスク」であることをご報告申し上げます。
本レポートは、検査の状況をご報告するものであり、検体にウイルスが存在する又はしないことを保証するものではありません。
sudo apt update
で以下の Warning が最近出るようになった.Debian GNU/Linux unstable (sid) 環境で,apt 2.4.5.
All packages are up to date.
W: https://repo.skype.com/deb/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
W: http://packages.cloud.google.com/apt/dists/cloud-sdk-sid/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
W: http://linux.dropbox.com/debian/dists/sid/Release.gpg: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
/usr/share/doc/apt/changelog.gz
によると 2.4.0 からとのこと.
[/usr/share/doc/apt/changelog.gz] (partial excerpt)
apt (2.4.0) unstable; urgency=medium
* Warn if the legacy trusted.gpg keyring is used for verification
-- Julian Andres Klode <jak@debian.org> Tue, 22 Feb 2022 20:00:46 +0100
以下で import した key が /etc/apt/trusted.gpg
に保存されているのが原因で,最近は /etc/apt/trusted.gpg.d/
に置くことになっているとのこと(--dearmour
した binary は .gpg
として,ASCII armored keys は .asc
で置くことになっている).
wget -qO- https://myrepo.example/myrepo.asc | sudo apt-key add -
man apt-key
によると以下のとおり /etc/apt/keyrings
に置く選択肢もあって,ただしこの場合 /etc/apt/sources.list
で Signed-By
option により path を指定知る必要があるらしく(deb822-styleを想定?),面倒そうなので普通に /etc/apt/trusted.gpg.d/
に置くことにした.
Recommended: Instead of placing keys into the /etc/apt/trusted.gpg.d
directory, you can place them anywhere on your filesystem by using the
Signed-By option in your sources.list and pointing to the filename of
the key. See sources.list(5) for details. Since APT 2.4,
/etc/apt/keyrings is provided as the recommended location for keys not
managed by packages. When using a deb822-style sources.list, and with
apt version >= 2.4, the Signed-By option can also be used to include
the full ASCII armored keyring directly in the sources.list without an
additional file.
まず以下で,
sudo mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.0
sudo apt update
以下のように必要な key を確認して,
Err:11 http://packages.cloud.google.com/apt cloud-sdk-sid InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB
Err:12 https://repo.skype.com/deb stable InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 1F3045A5DF7587C3
Err:18 http://linux.dropbox.com/debian sid Release.gpg
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FC918B335044912E
あとは,以下で順に export していった.
sudo mv /etc/apt/trusted.gpg.0 /etc/apt/trusted.gpg
sudo apt update
sudo apt-key export FEEA9169307EA071 8B57C5C2836F4BEB | gpg --dearmour | sudo sh -c 'cat > /etc/apt/trusted.gpg.d/packages.cloud.google.com.gpg'
sudo apt-key export 1F3045A5DF7587C3 | gpg --dearmour | sudo sh -c 'cat > /etc/apt/trusted.gpg.d/repo.skype.com.gpg'
sudo apt-key export FC918B335044912E | gpg --dearmour | sudo sh -c 'cat > /etc/apt/trusted.gpg.d/linux.dropbox.com.gpg'
sudo rm /etc/apt/trusted.gpg
Linux 5.17 がでたので 5.16.18 から .config
がどう変更されるのか見てみた.もう 5.17.3 が出ているけど 5.16 は EOL らしいので.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-517-features 参照.
+CONFIG_ACPI_PCC=y
ACPI: PCC: Implement OperationRegion handler for the PCC Type 3 subtype
y のままにしておく.
+CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y
+CONFIG_BLK_ICQ=y
+CONFIG_BUILDTIME_MCOUNT_SORT=y
+CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y
ftrace: Have architectures opt-in for mcount build time sorting
+CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
+CONFIG_DRM_NOMODESET=y
+CONFIG_GUEST_PERF_EVENTS=y
+CONFIG_HAVE_KVM_DIRTY_RING=y
+CONFIG_HAVE_KVM_PFNCACHE=y
+CONFIG_NET_VENDOR_ENGLEDER=y
tsnep: Add TSN endpoint Ethernet MAC driver
n にする.
+CONFIG_NET_VENDOR_VERTEXCOM=y
net: vertexcom: Add MSE102x SPI support
n にする.
+CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
arch/Kconfig: split PAGE_SIZE_LESS_THAN_256KB from PAGE_SIZE_LESS_THAN_64KB
+CONFIG_SERIAL_8250_PERICOM=y
serial: 8250_pericom: Re-enable higher baud rates
n にする.
-CONFIG_DAX_DRIVER=y
-CONFIG_GENERIC_FIND_FIRST_BIT=y
-CONFIG_NFT_COUNTER=m
-CONFIG_NF_FLOW_TABLE_IPV4=m
-CONFIG_NF_FLOW_TABLE_IPV6=m
CONFIG_DRM_GEM_SHMEM_HELPER: y->m
proc: remove PDE_DATA() completelyの影響で bullseye の nvidia-legacy-390xx-kernel-dkms の compile に以下の通り失敗する.
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c: In function ‘nv_procfs_open_gpu_info’:
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:29: error: implicit declaration of function ‘PDE’ [-Werror=implicit-function-declaration]
118 | # define NV_PDE_DATA(inode) PDE(inode)->data
| ^~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:136:13: note: in expansion of macro ‘NV_PDE_DATA’
136 | NV_PDE_DATA(inode)); \
| ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:161:1: note: in expansion of macro ‘NV_DEFINE_PROCFS_SINGLE_FILE’
161 | NV_DEFINE_PROCFS_SINGLE_FILE(gpu_info);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:39: error: invalid type argument of ‘->’ (have ‘int’)
118 | # define NV_PDE_DATA(inode) PDE(inode)->data
| ^~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:136:13: note: in expansion of macro ‘NV_PDE_DATA’
136 | NV_PDE_DATA(inode)); \
| ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:161:1: note: in expansion of macro ‘NV_DEFINE_PROCFS_SINGLE_FILE’
161 | NV_DEFINE_PROCFS_SINGLE_FILE(gpu_info);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c: In function ‘nv_procfs_open_version’:
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:39: error: invalid type argument of ‘->’ (have ‘int’)
118 | # define NV_PDE_DATA(inode) PDE(inode)->data
| ^~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:136:13: note: in expansion of macro ‘NV_PDE_DATA’
136 | NV_PDE_DATA(inode)); \
| ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:175:1: note: in expansion of macro ‘NV_DEFINE_PROCFS_SINGLE_FILE’
175 | NV_DEFINE_PROCFS_SINGLE_FILE(version);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c: In function ‘nv_procfs_open_file’:
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:39: error: invalid type argument of ‘->’ (have ‘int’)
118 | # define NV_PDE_DATA(inode) PDE(inode)->data
| ^~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:195:23: note: in expansion of macro ‘NV_PDE_DATA’
195 | nvfp->proc_data = NV_PDE_DATA(inode);
| ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c: In function ‘nv_procfs_open_params’:
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:39: error: invalid type argument of ‘->’ (have ‘int’)
118 | # define NV_PDE_DATA(inode) PDE(inode)->data
| ^~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:136:13: note: in expansion of macro ‘NV_PDE_DATA’
136 | NV_PDE_DATA(inode)); \
| ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:346:1: note: in expansion of macro ‘NV_DEFINE_PROCFS_SINGLE_FILE’
346 | NV_DEFINE_PROCFS_SINGLE_FILE(params);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/src/nvidia-legacy-390xx-390.147
に以下のパッチをあてればなんとかなる.
--- a/common/inc/nv-procfs.h
+++ b/common/inc/nv-procfs.h
@@ -113,7 +113,7 @@ typedef struct file_operations nv_proc_ops_t;
})
#if defined(NV_PDE_DATA_PRESENT)
-# define NV_PDE_DATA(inode) PDE_DATA(inode)
+# define NV_PDE_DATA(inode) pde_data(inode)
#else
# define NV_PDE_DATA(inode) PDE(inode)->data
#endif
--- a/conftest.sh
+++ b/conftest.sh
@@ -1800,7 +1800,7 @@ compile_test() {
CODE="
#include <linux/proc_fs.h>
void conftest_PDE_DATA(void) {
- PDE_DATA();
+ pde_data();
}"
compile_check_conftest "$CODE" "NV_PDE_DATA_PRESENT" "" "functions"
Python の code (正確には Jupyter Notebook)を Web 上でインタラクティブに動作させる環境である Jupyterhub で LDAP 認証が使えるのであるが(つまりマルチユーザで利用可能),LDAP w/o SSL 環境(port #: 389)ではそのままではうまく認証できない,という話.
以下のようなエラーを吐いて,認証しようとするとコケる.
[I 2021-12-11 12:48:55.527 JupyterHub app:2717] Running JupyterHub version 2.0.0
[I 2021-12-11 12:48:55.527 JupyterHub app:2747] Using Authenticator: ldapauthenticator.ldapauthenticator.LDAPAuthenticator-1.3.2
[I 2021-12-11 12:48:55.527 JupyterHub app:2747] Using Spawner: jupyterhub.spawner.LocalProcessSpawner-2.0.0
[I 2021-12-11 12:48:55.527 JupyterHub app:2747] Using Proxy: jupyterhub.proxy.ConfigurableHTTPProxy-2.0.0
[I 2021-12-11 12:48:55.528 JupyterHub app:1641] Writing cookie_secret to /tf/jupyterhub_cookie_secret
[I 2021-12-11 12:48:55.541 alembic.runtime.migration migration:201] Context impl SQLiteImpl.
[I 2021-12-11 12:48:55.541 alembic.runtime.migration migration:204] Will assume non-transactional DDL.
[I 2021-12-11 12:48:55.548 alembic.runtime.migration migration:615] Running stamp_revision -> 833da8570507
[I 2021-12-11 12:48:55.683 JupyterHub proxy:496] Generating new CONFIGPROXY_AUTH_TOKEN
[I 2021-12-11 12:48:55.709 JupyterHub app:1913] Not using allowed_users. Any authenticated user will be allowed.
[I 2021-12-11 12:48:55.727 JupyterHub roles:358] Adding role admin for User: myn
[W 2021-12-11 12:48:55.729 JupyterHub app:2152] No admin role found; assuming hub upgrade. Initializing default roles for all entities
[I 2021-12-11 12:48:55.768 JupyterHub app:2786] Initialized 0 spawners in 0.002 seconds
[W 2021-12-11 12:48:55.769 JupyterHub proxy:687] Running JupyterHub without SSL. I hope there is SSL termination happening somewhere else...
[I 2021-12-11 12:48:55.769 JupyterHub proxy:691] Starting proxy @ http://:8000
12:48:55.921 [ConfigProxy] info: Proxying http://*:8000 to (no default)
12:48:55.934 [ConfigProxy] info: Proxy API at http://127.0.0.1:8001/api/routes
[I 2021-12-11 12:48:56.023 JupyterHub app:3035] Hub API listening on http://0.0.0.0:8081/hub/
[I 2021-12-11 12:48:56.023 JupyterHub app:3037] Private Hub API connect url http://hoge-mydockerimage:8081/hub/
12:48:56.023 [ConfigProxy] info: 200 GET /api/routes
12:48:56.024 [ConfigProxy] info: 200 GET /api/routes
[I 2021-12-11 12:48:56.024 JupyterHub proxy:431] Adding route for Hub: / => http://hoge-mydockerimage:8081
12:48:56.025 [ConfigProxy] info: Adding route / -> http://hoge-mydockerimage:8081
12:48:56.026 [ConfigProxy] info: Route added / -> http://hoge-mydockerimage:8081
12:48:56.026 [ConfigProxy] info: 201 POST /api/routes/
[I 2021-12-11 12:48:56.026 JupyterHub app:3101] JupyterHub is now running at http://:8000
[I 2021-12-11 12:53:41.998 JupyterHub log:189] 302 GET / -> /hub/ (@::ffff:10.8.1.6) 0.61ms
[I 2021-12-11 12:53:42.069 JupyterHub log:189] 302 GET /hub/ -> /hub/login?next=%2Fhub%2F (@::ffff:10.8.1.6) 0.51ms
[I 2021-12-11 12:53:42.240 JupyterHub log:189] 200 GET /hub/login?next=%2Fhub%2F (@::ffff:10.8.1.6) 27.24ms
[E 2021-12-11 12:53:47.996 JupyterHub web:1789] Uncaught exception POST /hub/login?next=%2Fhub%2F (::ffff:10.8.1.6)
HTTPServerRequest(protocol='http', host='hoge:8000', method='POST', uri='/hub/login?next=%2Fhub%2F', version='HTTP/1.1', remote_ip='::ffff:10.8.1.6')
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/tornado/web.py", line 1704, in _execute
result = await result
File "/usr/local/lib/python3.8/dist-packages/jupyterhub/handlers/login.py", line 151, in post
user = await self.login_user(data)
File "/usr/local/lib/python3.8/dist-packages/jupyterhub/handlers/base.py", line 788, in login_user
authenticated = await self.authenticate(data)
File "/usr/local/lib/python3.8/dist-packages/jupyterhub/auth.py", line 473, in get_authenticated_user
authenticated = await maybe_future(self.authenticate(handler, data))
File "/usr/local/lib/python3.8/dist-packages/ldapauthenticator/ldapauthenticator.py", line 382, in authenticate
conn = self.get_connection(userdn, password)
File "/usr/local/lib/python3.8/dist-packages/ldapauthenticator/ldapauthenticator.py", line 314, in get_connection
conn = ldap3.Connection(
File "/usr/local/lib/python3.8/dist-packages/ldap3/core/connection.py", line 363, in __init__
self._do_auto_bind()
File "/usr/local/lib/python3.8/dist-packages/ldap3/core/connection.py", line 391, in _do_auto_bind
if self.start_tls(read_server_info=False):
File "/usr/local/lib/python3.8/dist-packages/ldap3/core/connection.py", line 1314, in start_tls
if self.server.tls.start_tls(self) and self.strategy.sync: # for asynchronous connections _start_tls is run by the strategy
File "/usr/local/lib/python3.8/dist-packages/ldap3/core/tls.py", line 277, in start_tls
raise LDAPStartTLSError(connection.last_error)
ldap3.core.exceptions.LDAPStartTLSError: startTLS failed - protocolError
[E 2021-12-11 12:53:48.018 JupyterHub log:181] {
"X-Forwarded-Host": "hoge:8000",
"X-Forwarded-Proto": "http",
"X-Forwarded-Port": "8000",
"X-Forwarded-For": "::ffff:10.8.1.6",
"Accept-Language": "en-US,en;q=0.9,ja;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Referer": "http://hoge:8000/hub/login?next=%2Fhub%2F",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded",
"Origin": "http://hoge:8000",
"Upgrade-Insecure-Requests": "1",
"Cache-Control": "max-age=0",
"Content-Length": "34",
"Connection": "close",
"Host": "hoge:8000"
}
[E 2021-12-11 12:53:48.018 JupyterHub log:189] 500 POST /hub/login?next=%2Fhub%2F (@::ffff:10.8.1.6) 23.50ms
12:53:56.029 [ConfigProxy] info: 200 GET /api/routes
Jupyterhub は Docker image として構築していて,Jupyterhub (+ LDAP auth) 関連の Docierfile 該当部は以下.
RUN pip install jupyterhub
RUN pip install jupyterhub-ldapauthenticator
RUN npm install -g configurable-http-proxy
あとは,起動時に
jupyterhub --config=/etc/jupyterhub_config.py
が呼ばれるようになっていて,jupyterhub_config.py
は以下のようなもの.
c.JupyterHub.authenticator_class = "ldapauthenticator.LDAPAuthenticator"
c.LDAPAuthenticator.server_address = "10.0.0.1"
c.LDAPAuthenticator.server_port = 389
c.LDAPAuthenticator.bind_dn_template = "uid={username},ou=People,dc=example,dc=com"
c.LDAPAuthenticator.use_ssl = False
c.JupyterHub.hub_ip = '0.0.0.0'
c.Authenticator.admin_users = {'myn'}
LDAP には SSL 使っていない(ローカル環境なので)のに startTLS
しようとしているように見える.たぶん /usr/local/lib/python3.8/dist-packages/ldapauthenticator/ldapauthenticator.py
の以下の箇所がおかしいような気がしていて,
def get_connection(self, userdn, password):
server = ldap3.Server(
self.server_address, port=self.server_port, use_ssl=self.use_ssl
)
auto_bind = (
ldap3.AUTO_BIND_NO_TLS if self.use_ssl else ldap3.AUTO_BIND_TLS_BEFORE_BIND
)
conn = ldap3.Connection(
server, user=userdn, password=password, auto_bind=auto_bind
)
return conn
ここの箇所で以下の修正をするとうまく動いてくれる.
- ldap3.AUTO_BIND_NO_TLS if self.use_ssl else ldap3.AUTO_BIND_TLS_BEFORE_BIND
+ ldap3.AUTO_BIND_NO_TLS if not self.use_ssl else ldap3.AUTO_BIND_TLS_BEFORE_BIND
Dockerfile 的には以下を書いている.
RUN sed -i 's/ldap3\.AUTO_BIND_NO_TLS if self\.use_ssl/ldap3.AUTO_BIND_NO_TLS if not self.use_ssl/g' /usr/local/lib/python3.*/dist-packages/ldapauthenticator/ldapauthenticator.py
Gnome で Input Source は
を使っているのだけど Window 毎に Input Source をスイッチしたいという話.具体的にはたとえば
として固定(というか個別に Input Source を変えられるように)して使いたいという話.そうしないと Chome (Japanese (Mozc) による日本語入力)から Terminal に移った際に全角でコマンドを打ってしまったりする.以下で Switch input sources individually for each window
を有効にする.
現在の設定の確認:
% gsettings get org.gnome.desktop.input-sources per-window
false
設定の変更:
% gsettings set org.gnome.desktop.input-sources per-window true
変更後の設定の確認:
% gsettings get org.gnome.desktop.input-sources per-window
true
なお,Mozc の入力モードは Desktop 全体で共通になるので
といった運用はできない.
念の為,日本語キーボード利用環境でも同じ話.
加えて,
という謎環境にすると,Mozc の際のキーボード配列は,Japanese (Mozc) に Switch する前のキーボード配列になる.
GUI では Settings→Keyboard で Input Source Switching で Switch input sources individually for each window
を有効にする.
Mailman 2.1 設定メモの Mailman 3 版.Mailman 2.1 の環境を Debian GNU/Linux bullseye に移行した際,Mailman 2.1 環境は一式削除して,新たにインストール(あらかじめ list pseudo user が存在していた環境なので,クリーンインストール環境とは差があるかもしれない).
Mailman 3 + Postfix + Apache を想定.
sudo apt install mailman3-full
これが以下に依存して,
さらに以下が install される.
Mailman 3 の Web I/F は以下で提供される.
/usr/share/doc/mailman3/README.Debian.gz
や /usr/share/doc/mailman3-web/README.Debian.gz
に従って設定すればOKだが,Postfix 向け alias (mailman process への転送)は /var/lib/mailman3/data/postfix_lmtp*
で提供され,mailman3 install 時に /etc/postfix/main.cf
に以下のとおり(コメントアウトされた状態で)追記されるので,この箇所を有効にする.
# mailman
owner_request_special = no
transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp
local_recipient_maps = proxy:unix:passwd.byname $alias_maps hash:/var/lib/mailman3/data/postfix_lmtp
relay_domains = ${{$compatibility_level} < {2} ? {$mydestination} : {}} hash:/var/lib/mailman3/data/postfix_domains
Apache 向けの snippet は /etc/mailman3/apache.conf
にあり,これも mailman3-web install 時に適切に Apache に組み込まれる (/etc/apache2/
以下に適切に symlink が生成される).が,手元では以下の patch が必要だった.
- ProxyPass /mailman3 unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost/
+ ProxyPass /mailman3/ unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost/
HyperKitty に archive させるには Mailman への REST アクセスが必要で,その api_key を /etc/mailman3/mailman-hyperkitty.cfg
に書き込む.これは以下で実現される.
sudo dpkg-reconfigure python3-mailman-hyperkitty
他,以下の通り微調整.
/etc/mailman3/mailman-web.py
の EMAILNAME
変数は install 時(debconf 時)に適切に設定されるはずだが,確認する.changeme@example.com
なので,/etc/mailman3/mailman.cfg
の site_owner
で変更する.example.com
になっているので,設定した host (myn.example.com
とする) に http://myn.example.com/mailman3/admin/ でアクセスすると Django administration page が現れるので,Sites
の箇所 (http://myn.example.com/mailman3/admin/sites/site/) で修正する(多分そのままでも問題ないのかもしれない).create ml
% sudo -u list mailman create testml@myn.example.com
remove ml
% sudo -u list mailman remove testml@myn.example.com
list member
sudo -u list mailman members testml@myn.example.com
add member
コマンドラインから1メールアドレスずつ追加する場合以下.ファイルにリストして追加する場合は -
の箇所をファイル名にする(そして pipe しない).
% echo myn@myn.example.com | sudo -u list mailman addmembers - testml@myn.example.com
以下のような welcome message が送付される.
To: myn@myn.example.com
Subject: Welcome to the "Testml" mailing list
From: testml-request@myn.example.com
Welcome to the "Testml" mailing list!
To post to this list, send your message to:
testml@myn.example.com
You can unsubscribe or make adjustments to your options via email by
sending a message to:
testml-request@myn.example.com
with the word 'help' in the subject or body (don't include the
quotes), and you will get back a message with instructions. You will
need your password to change your options, but for security purposes,
this password is not included here. If you have forgotten your
password you will need to reset it via the web UI.
delete (remove) member
% sudo -u list mailman delmembers -l testml@myn.example.com -m myn@myn.example.com
以下のような goodbye message が送付される(body は空).
To: <myn@myn.example.com>
Subject: You have been unsubscribed from the Testml mailing list
From: <testml-bounces@myn.example.com>
mailman create
で /var/lib/mailman3/data/postfix_lmtp
(およびそのdb)が以下の通り自動生成される.
# This file is generated by Mailman, and is kept in sync with the binary hash
# file. YOU SHOULD NOT MANUALLY EDIT THIS FILE unless you know what you're
# doing, and can keep the two files properly in sync. If you screw it up,
# you're on your own.
# Aliases which are visible only in the @myn.example.com domain.
testml@myn.example.com lmtp:[127.0.0.1]:8024
testml-bounces@myn.example.com lmtp:[127.0.0.1]:8024
testml-confirm@myn.example.com lmtp:[127.0.0.1]:8024
testml-join@myn.example.com lmtp:[127.0.0.1]:8024
testml-leave@myn.example.com lmtp:[127.0.0.1]:8024
testml-owner@myn.example.com lmtp:[127.0.0.1]:8024
testml-request@myn.example.com lmtp:[127.0.0.1]:8024
testml-subscribe@myn.example.com lmtp:[127.0.0.1]:8024
testml-unsubscribe@myn.example.com lmtp:[127.0.0.1]:8024
Envelope from は testml-bounces で,また,testml-owner にはなにがしか mailman から notification が届く.自動 subscripe や参加者 command を使わせないのであれば,それ以外はこの段階で disable しておいたほうが安心かもしれない.
以下で適当に comment out して,それを /var/lib/mailman3/data/postfix_lmtp
に配置して,
cat /var/lib/mailman3/data/postfix_lmtp | sed 's,\(.*-\(confirm\|join\|leave\|request\|subscribe\|unsubscribe\)\),# \1,'
その後は以下で /var/lib/mailman3/data/postfix_lmtp.db
を作成する.
sudo -u list postmap /var/lib/mailman3/data/postfix_lmtp
本当は手動で調整するのは微妙.mailman create
や mailman remove
の後に自動で処理するようにしたほうが良いはず.
追記(2021/11/5): mailman3 が起動する際に /var/lib/mailman3/data/postfix_lmtp
が生成されるので,その後に hook が必要.
追記(2022/4/6): /var/lib/mailman3/data/postfix_lmtp
に作成されるエイリアスのリストは /usr/lib/python3/dist-packages/mailman/mta/aliases.py
で以下の通り定義されている.ここを修正すれば制御可能.
SUBDESTINATIONS = (
'bounces',
'confirm',
'join',
'leave',
'owner',
'request',
'subscribe',
'unsubscribe',
)
ということで以下にした.Package が upgrade される際に上書きされるけど.
SUBDESTINATIONS = (
'bounces',
'owner',
)
Mailman 2 と異なり Mailman 3 では /usr/sbin/config_list
のような設定を直接操作するコマンドが用意されていない.Web I/F でポチポチ設定するということになるが,他は REST を使うか mailman shell
の Python の shell を使う.他に Python の method を list を引数に呼び出すアプローチもある.
私にとって一番やりやすいのは上記の最後のアプローチで,以下の script を作成した.これを main.py
とかでどこかに置いておいて,あとは /usr/lib/mailman3/bin
に symlink を置いておけば,ユーザ権限でいろいろな操作を (method を書けば)可能になる.
from mailman.testing.documentation import dump_json
from mailman.testing.documentation import call_http
from mailman.interfaces.mailinglist import SubscriptionPolicy
from mailman.interfaces.archiver import ArchivePolicy
# default method
def main():
dump_json('http://localhost:8001/3.1/lists')
# config dump
def getconf(mlist):
url = 'http://localhost:8001/3.1/lists/%s/config' % mlist.fqdn_listname
dump_json(url)
# private ml default configuration
def conf(mlist):
mlist.send_welcome_message = False
mlist.send_goodbye_message = False
mlist.subject_prefix = ''
mlist.include_rfc2369_headers = False
mlist.digests_enabled = False
mlist.archive_policy = ArchivePolicy.private
mlist.require_explicit_destination = False
mlist.collapse_alternatives = False
mlist.max_message_size = 0
mlist.subscription_policy = SubscriptionPolicy.moderate
mlist.unsubscription_policy = SubscriptionPolicy.moderate
mlist.max_num_recipients = 20
# site level で footer を disable する
def site_conf():
r = call_http('http://localhost:8001/3.1/uris')
for key in ['list:member:regular:footer', 'list:member:digest:footer']:
flag = True
if 'entries' in r:
for i in r['entries']:
if 'name' in i:
if i['name'] == key:
flag = False
break
if flag:
s = 'file:///var/lib/mailman3/templates/site/en/{}'.format(key)
call_http('http://localhost:8001/3.1/uris',
{key: s}, method='PATCH')
以下で,上記の main()
が処理される.list の list を得る.
sudo -u list mailman shell -r main
以下で,指定した list の個人的好みの default の設定を行う.上記の conf(mlist)
がコマンドラインで指定した list を引数に呼ばれる.
sudo -u list mailman shell -r main.conf -l testml@myn.example.com
https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/listconf.html?highlight=send_goodbye_message#changing-a-partial-configuration のように dump_json
を使っても良いかもしれない.
他,上記 script では以下用意した.
main.getconf
: list の configuration dumpsite_conf
: site level の設定site_conf
では site level で footer を disable する設定をしている.
file:///var/lib/mailman3/templates/site/en/list:member:regular:footer
file:///var/lib/mailman3/templates/site/en/list:member:digest:footer
を参照するようにしていて,ここにからのファイルを配置する.
追記(2021/11/5): SQLite での運用時,ファイルがなくてもなんとかなっていた(空として処理される)ような気がしたのだけれど,MySQL (MariaDB) に変更したらファイルがなければ配信が止まるようになった(HyperKitty には Archive される).ファイルを touch すると勢い良く配信が始まった.
mailman 自体の Default 設定は /usr/lib/python3/dist-packages/mailman/styles/base.py
参照.
mlist.send_welcome_message = False
, mlist.send_goodbye_message = False
welcome/goodbye message を disable する.See /usr/lib/python3/dist-packages/mailman/app/membership.py
.
mlist.subject_prefix = ''
Subject の先頭部分に追加される prefix.ML の存在をあまりユーザに気にさせたくないので,空(’’)にする.
mlist.include_rfc2369_headers = False
RFC2369のヘッダを付加するか否か.ユーザに操作させたくない(MLの存在もあまり気にさせたくない)ので,disable する.
mlist.digests_enabled = False
Digest は使わないので disable する.
mlist.archive_policy = ArchivePolicy.private
HyperKitty での Archive を private
モードで運用 (Web でログインしないと見られない).Default は public
だったような気がする.ArchivePolicy
は enum
になっていて,他に取れる値は never
.See /usr/lib/python3/dist-packages/mailman/interfaces/archiver.py
.
mlist.require_explicit_destination = False
Default True.True だと,ML に Bcc で送付するなど(もしくは転送など),ML の email address が To や Cc に含まれない場合に admin proval が要求される.
mlist.collapse_alternatives = False
元のメールのまま配信したいので disable する.mlist.collapse_alternatives の Default は False.
mlist.max_message_size = 0
0 (無制限)にする.Default: 40 (kilobytes).
mlist.subscription_policy = SubscriptionPolicy.moderate
, mlist.unsubscription_policy = SubscriptionPolicy.moderate
Default は confirm
.ユーザによる confirm があれば subscribe/unsubscribe 可能.勝手に join/leave して欲しくないので moderate
にする.SubscriptionPolicy
は enum
になっていて,他に取れる値は open
,confirm_then_moderate
.See /usr/lib/python3/dist-packages/mailman/interfaces/mailinglist.py
.
mlist.max_num_recipients = 20
この数字以上の宛先がメールに含まれている場合に admin proval を要求するというもの.0 だと制限がなくなる.Default は 10.
mailman 2 にあったような DontReceiveDuplicates
は Web I/F でユーザ毎に設定可能.Default では DontReceiveDuplicates
は Off の様子.
SQLite3 で運用していたら以下のような Error が頻出しており (ちょうど下にある Bounce 処理の確認をしている際),
Nov 05 20:28:28 2021 (688389) Uncaught runner exception: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurri
ng prematurely)
(sqlite3.OperationalError) database is locked
[SQL: UPDATE mailinglist SET last_post_at=?, post_id=? WHERE mailinglist.id = ?]
[parameters: ('2021-11-05 11:28:23.577152', 4, 2)]
(Background on this error at: http://sqlalche.me/e/13/e3q8)
Nov 05 20:28:28 2021 (688389) Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1276, in _execute_context
self.dialect.do_execute(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 609, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked
sqlalchemy.exc.OperationalError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(sqlite3.OperationalError) database is locked
[SQL: UPDATE mailinglist SET last_post_at=?, post_id=? WHERE mailinglist.id = ?]
/usr/share/doc/mailman3/README.Debian
に書いてあるとおり,SQLite が怪しいので MySQL に backend を置き換えた.
Database backend ================
The default configured database backend is SQLite3. This is necessary to not break automated (non-interactive) installations without installing recommends.
For productive setups, SQLite3 is not recommended as database backend. PostgreSQL or MySQL should be used instead. The database configuration can be automated by installing ‘dbconfig-pgsql’ or ‘dbconfig-mysql’ and running ‘dpkg-reconfigure mailman3’. A respective local or remote database server has to be available in this case.
(SQLite だとメールが SHUNT されたり,それを sudo -u list mailman unshunt
や sudo /etc/init.d/mailman3 restart
で吐き出させたり,いろいろややこしい状況になっていた; 上にあるテンプレートのファイルを置いていなかったのも原因の一つかもしれない)
ひとまず MariaDB (MySQL) をインストールして
sudo aptitude install mariadb-server
あとは以下を順番に行う.
sudo dpkg-reconfigure mailman3
sudo dpkg-reconfigure mailman3-web
SQLite3 か MySQL か聞かれるので,MySQL と答え,他は以下にした(ほぼ Default; 以下 mailman3 のみ,mailman3-web もほぼ同じ).
mailman3 は ModuleNotFoundError: No module named 'pymysql'
で起動できなかったので sudo aptitude install python3-pymysql
して,mailman3-web は django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
でコケている雰囲気だったので sudo aptitude install python3-mysqldb
した.
Mailman 3 の Default の Bounce 処理 (See /usr/lib/python3/dist-packages/mailman/model/bounce.py
)は
Bounce score が bounce_score_threshold
(default: 5) を超えると配信が disable され,disable されたアドレスには disable warning が送信される.Warning の template は /usr/lib/python3/dist-packages/mailman/templates/en/list:user:notice:warning.txt
.Bounce するけど.
Disable warning が bounce_you_are_disabled_warnings
回 (default: 3) 送信されるた後に list から remove される
Disable warning の送信 interval は bounce_you_are_disabled_warnings_interval
で決まる(default: 7d).
bounce_you_are_disabled_warnings
が 0 であれば,warning を送信せずに disable のタイミングで remove される
Bounce score は bounce 毎 1 increment されるが,Bounce が発生した日に既に increment されている場合は increment されない.
Bounce score は bounce_info_stale_after
(default: 7d) の間に bounce が発生しなければ reset (0 に戻る)される.
手元では
bounce_score_threshold
: 1bounce_you_are_disabled_warnings
: 0にして,bounce したら即 remove することにした.
disable, removal の際に list owner に通知が届く.Template は以下にある.
/usr/lib/python3/dist-packages/mailman/templates/en/list:admin:notice:disable.txt
/usr/lib/python3/dist-packages/mailman/templates/en/list:admin:notice:removal.txt
bounce_notify_owner_on_disable
および bounce_notify_owner_on_removal
でこの通知の Enable/Disable を設定できるが,True (Enabled)が Default で,このままで通常問題ない.
が,上で作成した list では owner の設定ができてなくて,設定するには Web から設定するのがおそらく簡単.http://myn.example.com/mailman3/postorius/lists/testml.myn.example.com/members/owner/
から設定.一旦1人設定すると,Removing the last owner is impossible
とか怒られて削除できなくなる.
CUI から owner を設定するには,以下を上で説明している main.py
に書いておいて,
from mailman.interfaces.usermanager import IUserManager
from zope.component import getUtility
from mailman.interfaces.member import MemberRole
def set_owner(mlist):
user_manager = getUtility(IUserManager)
admin = user_manager.get_user('myn@myn.example.com')
mlist.subscribe(admin.addresses[0], MemberRole.owner)
def members():
dump_json('http://localhost:8001/3.1/members')
以下で呼び出す.
sudo -u list mailman shell -r main.set_owner -l testml@myn.example.com
たぶん address が既に mailman 内に無いと get_user
でコケるかもしれない.Owner を削除するには
sudo -u list mailman shell -r main.members
で該当 Owner の member_id を探して,以下を呼び出すようにする (Leaving a mailing list参照).
dump_json('http://localhost:8001/3.1/members/<member_id>', method='DELETE')
なお,disable, removal の際の list owner への通知は以下のヘッダで届く (上の bounce したら即 remove の設定だと2通同時に届く).また,bounce の log は /var/log/mailman3/bounce.log
で確認できる.
Return-Path: <testml-bounces@myn.example.com>
To: testml-owner@myn.example.com
Subject: myn-error@myn.example.com's subscription disabled on Testml
From: myn@myn.example.com
Return-Path: <testml-bounces@myn.example.com>
To: testml-owner@myn.example.com
Subject: myn-error@myn.example.com unsubscribed from Testml mailing list due to bounces
From: myn@myn.example.com
Linux 5.14 がでたので 5.13.13 から .config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-514-features 参照.
+CONFIG_ACPI_MDIO=y
+CONFIG_FWNODE_MDIO=y
-CONFIG_FIXED_PHY=m
+CONFIG_FIXED_PHY=y
net: mdio: Add ACPI support code for mdio
net: mdiobus: Introduce fwnode_mdiobus_register_phy()
IEEE 802.3 の PHY management interface である MDIO 関連.このあたりの影響で手元では CONFIG_FIXED_PHY が y になった.
+CONFIG_ACPI_PRMT=y
ACPI: PRM: implement OperationRegion handler for the PlatformRtMechanism subtype
Platform Runtime Mechanism (PRM) 関連.
depends on EFI && X86_64
で default y
+CONFIG_ARCH_HAS_ZONE_DMA_SET=y
mm: generalize ZONE_[DMA|DMA32]
Selected by [y]:
- X86 [=y] && EXPERT [=y]
+CONFIG_ARCH_WANTS_NO_INSTR=y
+CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
Kconfig: Introduce ARCH_WANTS_NO_INSTR and CC_HAS_NO_PROFILE_FN_ATTR
+CONFIG_ASN1=m
cifs: decoding negTokenInit with generic ASN1 decoder
Selected by [m]:
- CIFS [=m] && NETWORK_FILESYSTEMS [=y] && INET [=y]
+CONFIG_HAVE_KVM_PM_NOTIFIER=y
+CONFIG_HUGETLB_PAGE_FREE_VMEMMAP=y
mm: hugetlb: introduce a new config HUGETLB_PAGE_FREE_VMEMMAP
+CONFIG_IOMMU_SVA_LIB=y
+CONFIG_SECRETMEM=y
mm: introduce memfd_secret system call to create “secret” memory areas
+CONFIG_X86_PLATFORM_DRIVERS_INTEL=y
-CONFIG_CLKDEV_LOOKUP=y
clkdev: remove CONFIG_CLKDEV_LOOKUP
CONFIG_HAVE_CLK
に統合.
-CONFIG_DRM_KMS_FB_HELPER=y
drm: Remove DRM_KMS_FB_HELPER Kconfig option
It’s only used by DRM_FBDEV_EMULATION, so inline it there.
-CONFIG_HAVE_IDE=y
ide: remove the legacy ide driver
The legay ide driver has been replace with libata starting in 2003 and has been scheduled for removal for a while.
-CONFIG_MAX_RAW_DEVS=256
-CONFIG_RAW_DRIVER=m
The raw driver used to provide direct unbuffered access to block devices before O_DIRECT was invented. It has been obsolete for more than a decade.
-CONFIG_NEED_MULTIPLE_NODES=y
-CONFIG_X86_RESERVE_LOW=64
x86/setup: Remove CONFIG_X86_RESERVE_LOW and reservelow= options
+CONFIG_AX88796B_PHY=m
net: usb/phy: asix: add support for ax88772A/C PHYs
手元では USB_NET_AX8817X
で select されている.
bullseye の nvidia の以下の driver については https://gist.github.com/joanbm/144a965c36fc1dc0d1f1b9be3438a368 のパッチが必要.
nvidia-kernel-dkms
についてはそのまま patch apply 可能,nvidia-legacy-390xx-kernel-dkms
については以下ぐらい.
dev->pdev = pdev;
削除current->state = TASK_INTERRUPTIBLE;
を WRITE_ONCE(current->__state, TASK_INTERRUPTIBLE);
に変更参考:
もしかしたら英語で使っているのが原因なだけかもしれないが,Adobe Acrobat Pro DC で長さの単位がインチ(Inches)になっていて感じ悪い.Edit → Preferences → Unit & Guides から Page & Ruler Units を Inches から Millimeters に変更すると,単位がミリになる.
メールサーバ(Courier Mail Server)から手元の独自メールサーバに fetchmail でメールを取り出しているのだけど(POP),fetchmail は UTF-8 をサポートしておらず,8bit を含む Subject のメールは POP される際に Courier Mail Server 側で 以下のように変換される.
MUA がこういった表示をしているのかと思ってたのだけど,fetchmail の問題で Courier Mail Server が変換していた.大抵 Subject は MIME で Encode されて 7bit で送信されるので,8bit Subject で送信されるのは SPAM がほとんどだけどちょっと気になる.
Received: from pop.example.com [xx.xx.xx.xx]
by client.example.com with POP3 (fetchmail-6.4.0.beta4)
for <myn@localhost> (single-drop); Tue, 17 Aug 2021 20:50:24 +0900 (JST)
From: Mail Delivery Subsystem <postmaster>
Subject: Cannot display Unicode content
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="=_XXXXXX-XXXXXXXXXX"
--=_XXXXXX-XXXXXXXXXX
Content-Type: text/plain
This E-mail message was determined to be Unicode-formatted
but your E-mail reader does not support Unicode E-mail.
Please use an E-mail reader that supports POP3 with UTF-8
(see https://tools.ietf.org/html/rfc6856.html).
This can also happen when the sender's E-mail program does not
correctly format the sent message.
The original message is included as a separate attachment
so that it can be downloaded manually.
--=_XXXXXX-XXXXXXXXXX
Content-Type: message/global
https://gitlab.com/fetchmail/fetchmail/-/issues/14 のとおり Issue 登録はされている.
なお,fetchmail には他に 32bit 問題があって,サーバのスプール容量が 2G を超えると log に spool サイズがマイナスで表示される,というのがあって,直る気配がない.ログを漁ってたらちょうどマイナスに切り替わるタイミングがあったので,以下.
fetchmail: 68112 messages (68112 seen) for myn at mail.example.com (2137611084 octets).
fetchmail: 68113 messages (68112 seen) for myn at mail.example.com (-2145081713 octets).
ちなみに,以前は Courier Mail Server 側で UTF8 コマンドのチェックをしていなかったはずで,調べてみたら以下の commit とかで導入されたらしい.
fetchmail 6.4.0~beta4-3+deb10u1 を bullseye の 6.4.16-4 に上げたら,上記 (-2145081713 octets).
が表示されなくなった.加えて改行まで消える様子で,log がやたら見づらい...どうやら report.c
の bug で https://gitlab.com/fetchmail/fetchmail/-/commit/d3db2da1d13bd2419370ad96defb92eecb17064c のパッチが必要な様子.修正すると,(8367740453 octets)
とか表示された...Maildir でため過ぎ...
参考:
作業中で git add していないファイルが溜まってきていて,しかもその内容はもう見たくもない,が,あとで参照する可能性はある...という状況で,git status で大量にそういったファイルがリストされるので,なんとかしたい(なんともならないけど).
まとめてそういったファイルをある新しい directory に移動してしまったら,リストされる行が1行になるので,見た目ストレスが軽減される(なお,通常は git stash -u
するが,stash したことを絶対忘れそうなので,git status
でなにか untracked なものがあることはリマインドしたい,という話).
untracked files の list は,あまり git の command を覚えていない私的には以下.
% git status -s . | grep '^\?\?'
ただしこれだと,スペースを含むファイルがある際に以下のように double quote を含むようになり,パイプしづらい.
?? "test death.txt"
ということで,調べた範囲だと,以下とするのが良さそう.
git ls-files --others --exclude-standard --directory .
--others
: untracked files をリストする.--exclude-standard
: ignore (.gitignore
とか)を適用する.--directory
: directory まるごと untracked の場合は directory のみ表示(この option がなければ個別のファイルがすべてリストされる)幸い今処理したい working repository では sub-directory に untracked なファイルがないので,
% mkdir work-old
% git ls-files --others --exclude-standard --directory . | while read i ; do mv -v "$i" work-old ; done
ぐらいで1つの directory に untracked files をまとめてしまえる.あるいは -z
を使うと null 文字区切りにできるので,以下.
% mkdir -p work-old
% git ls-files --others --exclude-standard --directory -z . | xargs -0 mv -t work-old
mv
の -t
は予め移動先を指定してしまう方法.なお,いずれも work-old も ls-files されてしまうので,以下のように怒られるけど気にしない.
mv: cannot move 'work-old/' to a subdirectory of itself, 'work-old/work-old'
なお,通常は git stasu -u
する(再度).
Web サーバ兼 MTA なサーバを(ある組織で)共有で使っているのだけど,以前は SPAM 対策がされていた(おそらくプロプライエタリなもので,SPAM を隔離した旨メールが届いて,Web から確認するタイプのもの)のだけど,サーバリプレースに伴いその機能がなくなり,SPAM が多くなってきた(特に ML で悲惨)ので対策.
もともと procmail + fml でなんとなくシステムを作ってあるので(MTA は postfix と qmail の併用),procmail から簡単に使える SpamAssassin を利用する.タイトルどおりユーザ権限で,必要なものをどんどん入れていく.のメモ.
方針としては以下.
cpan Mail::SpamAssassin
で Install できれば簡単だけど,依存するものの,特に test 段階で失敗するものがあり,SpamAssassin は手動で入れることにする.まず,SpamAssassin の機嫌を尋ねる.
Mail-SpamAssassin-3.4.6
取得,展開perl Makefile.PL
で Makefile
ができて,あとは make; make install
という流れだけど,perl Makefile.PL
の段階で依存にするものがリストされるので,それを順番に入れていく(入れられないものは諦める)ユーザ権限で CPAN でモジュールを入れると ~/perl5/
にファイルがインストールされていく.加えて ~/.cpan/
に管理用(や build)のファイルが溜まっていく.手元環境でインストールしたもの,以下.たぶん.順番とか怪しい.
cpan Net::Patricia
したら Install できた)Mail::SPF は /usr/sbin
にファイル(spfd
)を copy しようとして失敗する(権限がない; see https://rt.cpan.org/Public/Bug/Display.html?id=34768).以下のようにして $HOME/perl5/bin
にインストールするようにする.spfd
は今のところ使わないつもり.
cpan Mail::SPF (→ install でコケる)
cd ~/.cpan/build/Mail-SPF-v2.9.0-0 (build directory に移動)
sed 's,/usr/sbin,/home/myn/perl5/bin,' -i Build.PL
cpan .
Mail::DKIM はまず依存する Crypt::OpenSSL::RSA や Crypt::OpenSSL::Random のインストールでこける.これは,手元では独自に OpenSSL をインストールしていて,その OpenSSL のパスを探せず(あるいは設定できず)に嵌った.
Crypt::OpenSSL::RSA は Crypt::OpenSSL::Guess に依存して,これがパスを探してくれるが,カスタムなパスをどのように渡すが謎だったので,直接推定(?)させることにした.~/perl5/lib/perl5/Crypt/OpenSSL/Guess.pm
の @guesses
という連想配列の先頭に '/home/myn/local/bin/openssl' => '/home/myn/local',
を追加して,確実にこれが推定されるようにする.ほか rpath
関連もなにか問題があったような気がするが(~/.cpan/CPAN/MyConfig.pm
で makepl_arg
で LIBS
や INC
を自前で指定していると Crypt::OpenSSL::Guess の推定が使われないとかだったように思う; makepl_arg
の設定をなくし,Crypt::OpenSSL::Guess で正しく推定できれば LD_RUN_PATH
付きで build されていたような気がする).
Mail::DKIM が依存するものがインストールできたとして,次は Mail::DKIM の test でコケる.t/policy.t
と t/public_key.t
のテストでコケていて,
cd ~/.cpan/build/Mail-DKIM-1.20200907-0
% perl -Ilib t/policy.t
1..19
ok 1 - new() works
ok 2 - parse() works
DNS query timeout for _domainkey.policy.test.authmilter.org at lib/Mail/DKIM/DNS.pm line 100.
これ,8.8.8.8
(Google の Public DNS) および 1.1.1.1
(Cloudflare の Public DNS) を DNS サーバ(リゾルバ)としてテストするのが原因(ゲートウェイをパケットが通らない環境なので...).それぞれのテストファイルのリゾルバ(のリスト)の箇所を手元の /etc/resolv.conf
に合わせて修正して解決.
Net::LibIDN2 は,そもそも libidn2 (IDN (internationalized domain names) の encode/decode ライブラリ)を install するところから(システム側にヘッダファイルが用意されていない...).
wget https://ftp.gnu.org/gnu/libidn/libidn2-2.3.2.tar.gz
tar zxfv libidn2-2.3.2.tar.gz
cd libidn2-2.3.2
./configure --prefix=/home/myn/local
make
make install
そのうえで cpan Net::LibIDN2
が上記 install した libidn2 を見つけられずに当然ハマる.上記 libidn2.so の symbol が見つけられず perl module LibIDN2.so
が load できない,とか.以下でなんとかする.cpan
する前に ./Build
したかも.いずれにせよ --extra_linker_flags
でしていた option 付きで link された LibIDN2.so
が ~/perl5/lib/perl5/x86_64-linux-thread-multi/auto/Net/LibIDN2/LibIDN2.so
にインストールされれば OK.ldd LibIDN2.so
で自前インストールの libidn2.so に link されているか確認できる.
cd .cpan/build/Net-LibIDN2-1.01-0
perl Build.PL --extra_compiler_flags=-I/home/myn/local/include --extra_linker_flags='-L/home/myn/local/lib -lidn2 -Wl,--rpath,/home/myn/local/lib'
cpan .
色々整った段階でようやく Mail-SpamAssassin をインストール.
tar jxfv Mail-SpamAssassin-3.4.6.tar.bz2
cd Mail-SpamAssassin-3.4.6
perl Makefile.PL CONTACT_ADDRESS=admin@example.com
make
make install
~/perl5/bin/spamassassin
に install される.CONTACT_ADDRESS
を指定しないとインタラクティブに聞かれる.
もう疲れたので,手短に.
% spamassassin -D < mail_file
とかでテストする.はじめは rule が存在しないので sa-update
で取得する(かつ cron を仕込んでおく).なお ~/perl5/var/spamassassin/3.004006/
に rule ファイルが置かれる.
~/.spamassassin/user_prefs
にユーザ設定を置く.
required_score 10
score SUBJECT_ENCODED_TWICE 0
score DNS_FROM_AHBL_RHSBL 0
report_safe 0
internal_networks 1XX.XX.XX.XX....
whitelist_from ...@....
SPAM 判定のしきい値は高め(10; default は 5)に設定した.スコア 0 にしているものは,以前そのような設定にしたもので,今でもこのルールがあるかどうかは確認していない.internal_networks
にはこのメールサーバに到達するために通常通過するサーバをリストする(それらの IP address の良し悪しを評価しなくなる; 評価すると SPAM Score が通常は下がる).
whitelist_from
は welcomelist_from
に将来的に(Target Milestone: 4.0.0)変更になる様子だが,現時点(3.4.6)では welcomelist_from
と書くと parse error になる.なお,blacklist_from
は blocklist_from
になる.ただし,spamassassin の report では USER_IN_BLACKLIST DEPRECATED: See USER_IN_BLOCKLIST
とか表示されるので感じ悪い.
あとは procmail から spamassassin を filter として呼び出して,その結果に応じて処理をする.procmail をローカル配送に使っていないので,無理やり procmail を呼び出すようにしていて,
[~/.qmail-hoge]
|/usr/bin/procmail /home/myn/spool/procmail/hoge
そのレシピファイルで spamassassin を通して,その結果に応じて処理を変える.以下では spam@example.com
に転送しているが,これはローカル配送を想定していて,結果同じメールサーバ(example.com)の Maildir に保存されていく,みないな設定にした.なお spamassassin.lock
のロックファイルは $HOME/spamassassin.lock
に作成される.
[/home/myn/spool/procmail/hoge]
LOGFILE=$HOME/spool/procmail/log/hoge.`date +%Y-%m`
SENDMAIL=/var/qmail/bin/sendmail
DEFAULT=$HOME/Maildir/.myn/
:0fw: spamassassin.lock
* < 10000000
| /home/myn/perl5/bin/spamassassin
:0
* ^X-Spam-Flag: YES
!spam@example.com
:0c
!myn@example.com
あと,はじめはあまり賢くないので,sa-learn --ham
および sa-learn --spam
で HAM (!SPAM)と SPAM の違いを覚えさせる.ある程度覚えるとあとは autolearn してくれる(はず).
高速化のために re2c
をインストールして,rule ファイルを native code にコンパイルできるようにしていたのだけど,手動で sa-compile
する必要があるのを忘れていた(sa-update
とともに cron に仕込む).
ただし,手元の CPAN 環境では,手動で実行した感じ以下のようにエラーで落ちる.
Aug 15 14:15:06.345 [4115915] info: generic: base extraction starting. this can take a while...
Aug 15 14:15:06.345 [4115915] info: generic: extracting from rules of type body_0
100% [==========================================================================================] 5277.67 rules/sec 00m00s DONE
100% [==========================================================================================] 4722.65 bases/sec 00m00s DONE
Aug 15 14:15:07.069 [4115915] info: body_0: 1328 base strings extracted in 1 seconds
cd /tmp/.spamassassin4115915hkQrfJtmp
reading bases_body_0.in
cd Mail-SpamAssassin-CompiledRegexps-body_0
re2c -i -b -o scanner1.c scanner1.re
re2c -i -b -o scanner2.c scanner2.re
re2c -i -b -o scanner3.c scanner3.re
re2c -i -b -o scanner4.c scanner4.re
re2c -i -b -o scanner5.c scanner5.re
re2c -i -b -o scanner6.c scanner6.re
re2c -i -b -o scanner7.c scanner7.re
/usr/bin/perl Makefile.PL PREFIX=/tmp/.spamassassin4115915hkQrfJtmp/ignored INSTALLSITEARCH=/home/myn/perl5/var/spamassassin/compiled/5.026/3.004006
Only one of PREFIX or INSTALL_BASE can be given. Not both.
command failed: exit 25
CPAN の初期設定段階で ~/.zshrc
に以下が書かれていたのが原因の様子.ということで PERL_MM_OPT= sa-compile
でうまく compile できる.
PERL_MM_OPT="INSTALL_BASE=/home/myn/perl5"; export PERL_MM_OPT;
踏まえて仕込んだ cron (から呼ばれる script)はだいたい以下のような感じ.case 文は Debian の /etc/cron.daily/spamassassin
を参考にした.
/home/myn/perl5/bin/sa-update
case $? in
0)
# got updates!
PERL_MM_OPT= sa-compile
;;
1)
# no updates
;;
2)
# lint failed!
;;
*)
echo "sa-update failed for unknown reasons" 1>&2
;;
esac
コンパイルされたものは ~/perl5/var/spamassassin/compiled/
に置かれることになる.
書き忘れていた.コンパイルされた rule を利用するには ~/perl5/etc/mail/spamassassin/v320.pre
の以下の行のコメントアウトを外す.
loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
Sync content across all devices with Drive for desktop のとおり Backup and Sync (バックアップと同期) から Drive for Desktop (パソコン版 Google ドライブ)への移行が推奨されている.というか Backup and Sync は今後使えなくなる.
移行についてもう少し詳細な Instruction が公開されるのでは? とか思って様子見していたのだけど,特にそういった気配はなく,どうやら単に Drive for Desktop をインストール(Backup and Sync に対して上書きインストール?)すれば良いらしい(←と,どこかに書いておいてくれてたら良かったのに...).
Drive for Desktop インストール時のメモ(Backup and Sync がすでにインストールされている場合).
Backup and Sync で利用しているアカウントについて,Drive for Desktop でもログインをうながされる
Backup and Sync の設定(ローカルファイルの Google Drive への同期設定)がチェックされる(20分ほどかかっていた)
同期の方式について Stream files と Mirror files のいずれかを選択
Stream files を選択した.
ローカルフォルダの同期先を Google Drive と Google Photo のいずれかから選択(写真・動画のみを保存しているフォルダについては,その旨通知されて Google Photo をおすすめされる).
すべて Google Drive にしておいた.
Google Drive はネットワークドライブとして扱われる.
Backup and Sync では C:\Users\<username>\Google Drive\
にマウントされていて,WSL からも /mnt/c/Users/<username>/Google Drive/
でアクセスできていた.
Drive for Desktop ではネットワークドライブを WSL 側でどこか適当なマウントポイントにマウントする必要がある.
複数アカウントで Backup and Sync を利用していた場合,そのそれぞれで Drive for Desktop の設定を行う必要がある(確か,ここでスキップすると後で設定の引き継ぎはできない,とかそんな説明が出ていたような気がする).
複数アカウントで Backup and Sync を利用していた場合,Windows の通知領域 (notification area) にアカウントごとの Backup and Sync アイコンが表示されるが,Drive for Desktop ではアイコン1つ.
Drive for Desktop インストールの最後で Backup and Sync を削除するか尋ねられて,削除すると移行完了.
Inbox by Gmail の機能(の一部)が Gmail に統合されて久しいが,そのうちスヌーズ機能に関して,以前スヌーズしたメールを探すやり方などなどがよくわからなかったので,メモ.公式ドキュメントにはいまいち明記されていない様子.
in:snoozed
label:pinned
手元で試した感じこれらは排他的になっていて,snooze 終了後に pinned というラベルが付加され,再度 snooze すると pinned というラベルが削除される,という仕様になっている様子.なので,両方同時にリストするには in:snoozed OR label:pinned
とする(in:snoozed OR label:pinned
だと ∅).
なお,pinned
というラベルは Inbox by Google の「ピン留め」機能の名残っぽい.
参考:
いつのまにか Login する度に Xilinx Information Center (xic
) と Skype for Linux と Teams が起動するようになっていて,それらを止めたいという話.~/.config/autostart/
にある .desktop
file を削除すると解決する.
日本語で書いた Markdown を pandoc
で変換する際,改行がスペースに変換されてしまう問題,east_asian_line_breaks
という拡張が存在していてそれを使えば解決できるらしい.今まで改行なしでパラグラフを書いていて,git diff とかが見づらかったのだが,これで解決できる.
% cat test.md
これ
は
this is
a test
です
% cat test.md | pandoc -f markdown
<p>これ は this is a test です</p>
% cat test.md | pandoc -f markdown+ignore_line_breaks
<p>これはthis isa testです</p>
% cat test.md | pandoc -f markdown+east_asian_line_breaks
<p>これは this is a test です</p>
WordPress が動作しているサーバでいろいろコマンドラインから操作するには WP-CLI を使えば良いのだが,そうではなくて WordPress が用意している API を叩くというアプローチは無いのだろうか? と思ったら,当然あって,REST APIが用意されている.
認証まわりも Application Passwords が使えて,Application Passwords Plugin 自体 WordPress 5.6 で本体に取り込まれている.
ということでApplication Passwords: Integration Guideに従って使ってみようとしたのだが,Basic Auth (ベーシック認証)がうまく行かず悩む.
% curl --user 'USERNAME:PASSWORD' 'https://myn.example.com/?rest_route=/wp/v2/users/me' | jq
上でユーザ情報が得られたら正しく動作していることになるのだが,以下が返ってくる.
{
"code": "rest_not_logged_in",
"message": "You are not currently logged in.",
"data": {
"status": 401
}
}
そもそも PHP が Basic Auth の情報を受け取らなければ,認証情報が WordPress に渡らないわけで,HTTP authentication with PHP を参考にテストしつつ,最終的には https://www.php.net/manual/en/features.http-auth.php#114877 にある以下を .htaccess
に書いて,正しく動作するようになった(お名前.com 共用サーバーSD).
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
これがあると HTTP_AUTHORIZATION
という環境変数で HTTP ヘッダの Authorization の情報(Basic ...
)が PHP に渡される.
あと,メモがてら Server process から CGI が起動される際に渡される環境変数をチェックするためのスクリプト(サーバの情報ダダ漏れになるので,使ったあとは削除).
[test.cgi]
#!/bin/sh
echo Content-Type: text/plain
echo
env
REST API が使えるようになったので,いちいち Web I/F で操作していた部分を一部自動化しようかと.
どうやら Pages の Update ができない.https://developer.wordpress.org/rest-api/reference/pages/ を見る限り API は用意されていそうなのだけど,POST 自体は成功する(content の raw で新しいデータを POST)けど更新されない...
Linux 5.13 出てた.5.12.XX から .config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.今回やるきなし.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-512-features 参照.Apple M1 support.
+CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
+CONFIG_ARCH_USE_MEMTEST=y
+CONFIG_AS_IS_GNU=y
+CONFIG_AS_VERSION=23101
+CONFIG_DRM_I915_REQUEST_TIMEOUT=20000
+CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
+CONFIG_MODPROBE_PATH="/sbin/modprobe"
+CONFIG_MODULE_COMPRESS_NONE=y
+CONFIG_NETFILTER_XTABLES_COMPAT=y
+CONFIG_NETFS_SUPPORT=y
+CONFIG_NET_SELFTESTS=y
+CONFIG_NET_SOCK_MSG=y
+CONFIG_NET_VENDOR_MICROSOFT=y
+CONFIG_PCPU_DEV_REFCNT=y
+CONFIG_SND_CTL_LED=m
-CONFIG_BOUNCE=y
-CONFIG_HAVE_NET_DSA=y
-CONFIG_TOUCHSCREEN_PROPERTIES=y
CONFIG_BOUNCE
block: remove BLK_BOUNCE_ISA support で ZONE_DMA
に依存しなくなり n
になった.
CONFIG_HAVE_NET_DSA
CONFIG_TOUCHSCREEN_PROPERTIES
Input: touchscreen - move helper functions to core で core に移動した.
Linux 5.13 では以下が compile できない.
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-modeset.c: In function ‘__will_generate_flip_event’:
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-modeset.c:96:23: warning: unused variable ‘primary_plane’ [-Wunused-variable]
struct drm_plane *primary_plane = crtc->primary;
^~~~~~~~~~~~~
./tools/objtool/objtool orc generate --module --no-fp --retpoline --uaccess /var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-linux.o
./tools/objtool/objtool orc generate --module --no-fp --retpoline --uaccess /var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nv-pci-table.o
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:311:23: error: initialization of ‘int (*)(struct drm_plane *, struct drm_atomic_state *)’ from incompatible pointer type ‘int (*)(struct drm_plane *, struct drm_plane_state *)’ [-Werror=incompatible-pointer-types]
.atomic_check = nv_drm_plane_atomic_check,
^~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:311:23: note: (near initialization for ‘nv_plane_helper_funcs.atomic_check’)
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:312:23: error: initialization of ‘void (*)(struct drm_plane *, struct drm_atomic_state *)’ from incompatible pointer type ‘void (*)(struct drm_plane *, struct drm_plane_state *)’ [-Werror=incompatible-pointer-types]
.atomic_update = nv_drm_plane_atomic_update,
^~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:312:23: note: (near initialization for ‘nv_plane_helper_funcs.atomic_update’)
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:313:23: error: initialization of ‘void (*)(struct drm_plane *, struct drm_atomic_state *)’ from incompatible pointer type ‘void (*)(struct drm_plane *, struct drm_plane_state *)’ [-Werror=incompatible-pointer-types]
.atomic_disable = nv_drm_plane_atomic_disable,
^~~~~~~~~~~~~~~~~~~~~~~~~~~
460.67 Incompatible with Kernel 5.13 at the moment の patch を当てる必要がある.nvidia-legacy-390xx-kernel-dkms
については patch
に失敗するので手動で調整.
2020/9/15 17:56 / 256-bit AES encrypted PDF file に書いたとおりなのだけども,バルク処理したい時のメモ.
% for i in *hoge*.pdf ; do pdftk "$i" input_pw XXXX output "$i:r-decrypt.pdf" ; done
で一旦確認してから,
% for i in *-decrypt.pdf ; do mv -v "$i" "${i%-decrypt.pdf}.pdf" ; done
とか.
以前一度作成して,その修正(具体的には keybind を追加)したくて,なかなか思い出せなかったので備忘まで.
端的には generic.el
の define-generic-mode
というマクロを使う.ここで,呼び出される関数を定義可能なので,そこで keybind (keymap) を書く.keymap の object (構造) は make-sparse-keymap
で作成する.そこに define-key
で key を追加していく.こうして作った keymap
を利用するには use-local-map
を使う(というのを mode が呼び出される際に評価されるように書いておく).
参考:
今まで気づかなかったのだが,pLaTeX では全角疑問符(?)の後にスペースが入るらしい.LaTeX で書くような文章であまり全角疑問符を使わなかったから気づかなかったなのかも.
ただし「?」の後が全角の「)」だとスペースが入らない.「?」の後にスペースを入れないようにするには \mbox{?}
とする.
日本語の文章での括弧は全角を使うべきということになっている(*1)のだけど,あんまり全角括弧は使いたくなくて,その割に疑問符(感嘆符も)については全角の方が大きくてインパクトがあるので全角を使いたい,という妙なこだわりで無駄に嵌る.
*1: 英文フォントの半角括弧はディセンダの箇所(yやgのベースラインから下の箇所)まであるので,括弧が下にはみ出るように見える)
\begin{itemize}
\item \mbox{?}A
\item ?A
\item ?\,A
\item ?~A
\item ? A
\item \mbox{?}あ
\item ?あ
\item ?\,あ
\item ?~あ
\item ? あ
\item ?A
\item (?)A
\item (?)A
\item (?)A
\item (?)A
\end{itemize}
MediaWiki で docx ファイルを移動(rename)しようとすると以下のように怒られる.
The page could not be moved, for the following reason:
The new file extension does not match its type.
もとの docx は手元では MIME type: application/zip
としてアップロードされており,たぶん拡張子が .zip
ではないということで怒られているような気がする.MS Word のファイル(docx)が zip であると判定されるのは,docx が実は zip であるというだけ(拡張子を zip に変更すると zip で展開できる).
一旦削除して再アップロードしてしまったので,解決可能か全く不明だが,LocalSettings.php
に以下を書いておくことにした.
$wgMimeDetectorCommand = "file -bi";
file
コマンドは docx を application/vnd.openxmlformats-officedocument.wordprocessingml.document
と判定する.ただし https://www.mediawiki.org/wiki/Manual:$wgMimeDetectorCommand に以下のようにあって,これで直るかどうかは不明.
It is important to note that MediaWiki itself performs a set of MIME detection tests itself, and only if those are unsuccessful is the MIME detector invoked.
結局上記では直らなかった.移動の際にこのチェックを行っているのは includes/MovePage.php
の以下の箇所で,この箇所コメントアウトしたら無事ファイル(File:
)の移動ができるようになった.
if ( !File::checkExtensionCompatibility( $file, $this->newTitle->getDBkey() ) ) {
$status->fatal( 'imagetypemismatch' );
}
以前は bbdb-merge-records
がなにがしかの key に割り当てられていたはずなのだけど,describe-mode
した感じどの key にも割り当てられていない状態になっていて,いちいち M-x bbdb-merge-records
は面倒なので割り当てる.
(define-key bbdb-mode-map "r" 'bbdb-merge-records)
Default では M
に割り当てられていたけれど http://git.savannah.gnu.org/gitweb/?p=emacs/elpa.git;a=commitdiff;h=ee9feb6183052ae2d5a528ab5748cdc1a5ceb9b1 で M
が bbdb-mail-address
に変更になっていた様子(2010頃).r
に割り当てられていた気もするのだけど,もしかすると自身で設定していたのかも.
Markdown の itemize (unordered list, ul) や enumerate (ordered list, ol) で使うスペースの数でいつも悩む.Emacs の markdown-mode
の default は 4文字に揃うようにスペースが入る.ただこれだと markdownlint
(MDL
) に怒られる(MD030).MDL
の場合の default は -
の後にスペース1つ.
一般的には4文字アラインメントが推奨されているはずで,ただ各 item がシンプルで短くたとえば1段落である場合はスペース1つにするべき,という話もある.
MDL
に従ってスペース1つに直しつつあったが,すべて4文字アラインメントにすることにした(code block との親和性もあるし,markdown-mode
が使えれさえすれば良くてスペースの多さはあまり気にならないので).MDL
の MD030
を無視するには .mdlrc
に rules "~MD030"
を書いていく.
あと AsciiDoc を使う選択肢もあるかもしれないが,Emacs major mode が未だ貧弱なので後回し.
Linux 5.12 がでたので 5.11.11 から .config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-512-features 参照.
などなど.
-CONFIG_LD_VERSION=231010000
+CONFIG_LD_VERSION=23101
+CONFIG_LD_IS_BFD=y
-CONFIG_SFI=y
-CONFIG_OPROFILE=m
-CONFIG_OPROFILE_NMI_TIMER=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_RING_BUFFER_ALLOW_SWAP=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
+CONFIG_LTO_NONE=y
kbuild: add support for Clang LTO
Link Time Optimization (LTO), Clang 11 is required.
+CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
+CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y
+CONFIG_HAVE_PREEMPT_DYNAMIC=y
+CONFIG_ARCH_HAS_ELFCORE_COMPAT=y
-CONFIG_FRAME_VECTOR=y
+CONFIG_SOCK_RX_QUEUE_MAPPING=y
+CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
ALSA: hda: move Intel SoundWire ACPI scan to dedicated module
+CONFIG_VIRTIO_PCI_LIB=m
-CONFIG_DCDBAS=m
-CONFIG_DELL_RBU=m
platform/x86: Move all dell drivers to their own subdirectory
+CONFIG_IOMMU_IO_PGTABLE=y
+CONFIG_NFS_V4_2_SSC_HELPER=y
-CONFIG_CRYPTO_GLUE_HELPER_X86=m
-CONFIG_CRYPTO_RMD128=m
-CONFIG_CRYPTO_RMD256=m
-CONFIG_CRYPTO_RMD320=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_SALSA20=m
crypto: rmd128 - remove RIPE-MD 128 hash algorithm
crypto: rmd256 - remove RIPE-MD 256 hash algorithm
crypto: rmd320 - remove RIPE-MD 320 hash algorithm
crypto: tgr192 - remove Tiger 128/160/192 hash algorithms
crypto: salsa20 - remove Salsa20 stream cipher algorithm
+CONFIG_HAVE_ARCH_KFENCE=y
+CONFIG_HAVE_OBJTOOL_MCOUNT=y
+CONFIG_FTRACE_MCOUNT_USE_CC=y
mathworks_network_license_manager_glnxa64.zip
を展開して得られる MATLAB ライセンスサーバのバイナリが謎の no such file or directory
で起動できない.以下の通り.
% ls -la lmgrd
-r-xr-xr-x 1 myn users 1166680 Nov 15 09:16 ./lmgrd
% ./lmgrd
zsh: no such file or directory: ./lmgrd
これ,以下の通りバイナリの interpreter
が /lib64/ld-lsb-x86-64.so.3
になっているのが原因.Debian GNU/Linux にはこのファイルがない.
% file lmgrd
lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
/lib64/ld-linux-x86-64.so.2
への symlink として /lib64/ld-lsb-x86-64.so.3
を作成するか,以下のようにすると起動できる.
% /lib64/ld-linux-x86-64.so.2 ./lmgrd
(略)
参考:
いつも忘れるのでメモ.
find . -type f
とかで file をリストして,そのそれぞれに chmod 644 をしたい,とかそういう話.Windows とかから Linux に rsync したすべて 777
の file/directory に対して,
chmod a-x,go-w . -R
(全て 644 になる)
chmod 644 . -R
してもいいし,chmod 644 `find . -type f`
で全てのファイルに対して chmod 644
してもいいのだけど,ファイル名やディレクトリ名にスペースが含まれると大変ややこしい.
2通りやり方があって,1つは find
の -exec
option を使う方法.{}
は引数に置換され,\;
で終了を表す.{}
と \;
の間にはスペースが必要.
% find . -type f -exec chmod 644 -v {} \;
% find . -type d -exec chmod 755 -v {} \;
もう1つは xargs
を使う方法.find
の -print0
オプションは null 文字(^@)を区切りにしてリストするので,それを xargs -0
で 1つずつ処理していく.
% find . -type f -print0 | xargs -0 chmod 644
% find . -type d -print0 | xargs -0 chmod 755
あるいは shell の機能でなんとかするか.$i
を "
でくくるのがポイント.
% find . -type f | while read i ; do chmod 644 "$i" ; done
% find . -type d | while read i ; do chmod 755 "$i" ; done
btrfs 上の file を swap file として利用しようとすると,以下のように kernel に怒られる.
[1646778.804931] BTRFS warning (device nvme0n1): swapfile must not be copy-on-write
これを回避するには以下のようにして copy-on-write (CoW) の機能を off にしたファイルを作成して swapon
する(要 Linux 5.0以降).
% sudo touch swap
% sudo lsattr swap
-------------------- swap
% sudo chattr +C swap
% sudo lsattr swap
---------------C---- swap
% sudo fallocate -l 2g swap
% sudo chmod 600 swap
% sudo mkswap swap
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=(snip)
% sudo swapon swap
touch
してから fallocate
する必要があるので注意.See man chattr
.
A file with the ‘C’ attribute set will not be subject to copy-on-write updates. This flag is only supported on file systems which perform copy-on-write. (Note: For btrfs, the ‘C’ flag should be set on new or empty files. If it is set on a file which already has data blocks, it is undefined when the blocks assigned to the file will be fully stable. If the ‘C’ flag is set on a directory, it will have no effect on the directory, but new files created in that directory will have the No_COW attribute set.)
gnome-shell の Alt-tab は window を純粋にスイッチ(switch-windows
)するわけではなく,複数 window がある application はグループ化されてしう.グループ化された window グループ内で window を switch されるためには Alt-`,あるいは Alt-tab で window switcher を出した状態で矢印キーを使う必要がある.ということで Alt-tab で group ベースの window switch をしたくなくて,そのための設定.
具体的には switch-applications
に割り当てられている <Alt>Tab
を switch-windows に移動する.以下.dconf
や dconf-editor
(GUI)でも同じようなことができる.
現在の設定の確認:
% gsettings get org.gnome.desktop.wm.keybindings switch-applications
['<Super>Tab', '<Alt>Tab']
% gsettings get org.gnome.desktop.wm.keybindings switch-windows
@as []
設定の変更:
% gsettings set org.gnome.desktop.wm.keybindings switch-applications "['<Super>Tab']"
% gsettings set org.gnome.desktop.wm.keybindings switch-windows "['<Alt>Tab']"
変更後の設定の確認:
% gsettings get org.gnome.desktop.wm.keybindings switch-applications
['<Super>Tab']
% gsettings get org.gnome.desktop.wm.keybindings switch-windows
['<Alt>Tab']
なお,グループ化された window グループ内で window を switch されるための Alt-` は以下のような default 設定になっていて,
% gsettings get org.gnome.desktop.wm.keybindings switch-group
['<Super>Above_Tab', '<Alt>Above_Tab']
ここで Above_Tab
は ` のことで,Tab
の上にあるキーであることが想定されている.標準的な英語キーボードがそのようなレイアウト(HKKBの場合は英語配列でも右上端に ` がある.).
関連する org.gnome.desktop.wm.keybindings
の key をまとめると以下.
switch-applications
: Application (group 化された window) の switchswitch-windows
: Window switch (全ての window を順に switch)switch-group
: Application (group 化された window) 内の window switchGUI では Settings → Keyboard → Keyboard Shortcuts → View and Customize Shortcuts → Navigation →
switch-applications
switch-windows
switch-group
他に
cycle-windows
(default: <Alt>Escape
)cycle-group
(default: <Alt>F6
)がある(これらは window を list 表示しない).
参考:
もろもろの設定等のログを残すために WordPress を git で管理しているのだが,.git
ディレクトリが存在する場合は以下のように表示されて自動更新が無効化される.
関連するファイル・関数は以下.
wp-admin/update-core.php
: function core_auto_updates_settings
wp-admin/includes/class-wp-automatic-updater.php
: function is_vcs_checkout
automatic_updates_is_vcs_checkout
というフィルタがあるので,これを使えば制御できる.自動更新を(バージョン管理下でも)有効にする場合は以下を wp-content/mu-plugins/automatic_updates.php
とかに置いておく.
<?php
add_filter( 'automatic_updates_is_vcs_checkout', '__return_false', 1 );
参考:
snmpd
の default の logging に関する option が -Lsd
で,syslog の LOG_DAEMON
に送るような設定になっている.これが結構 verbose (LOG_NOTICE
が送られる)なので,-LSwd
に変更して LOG_WARNING
の level に変更したい,という話.
以前は /etc/default/snmpd
で設定できていたのだが,/etc/init.d/snmpd
が /etc/default/snmpd
を source しているように見せかけて,実は systemctl
が呼び出される仕組みが導入されており,/etc/default/snmpd
を変更したところで設定が反映されない./etc/default/snmpd
にも以下のようにそんなことが書いてある.
# This file controls the behaviour of /etc/init.d/snmpd
# but not of the corresponding systemd service file.
# If needed, create an override file in
# /etc/systemd/system/snmpd.service.d/local.conf
# see man 5 systemd.unit and man 5 systemd.service
で,/etc/systemd/system/snmpd.service.d/local.conf
を作成するというのはいわゆる drop-in ファイルを作るというもので,sudo systemctl edit snmpd.service
で作成される /etc/systemd/system/snmpd.service.d/override.conf
と同様(local.conf
でも問題ない; man systemd.unit
も local.conf
で説明されている).
drop-in については man systemd.unit
が詳しい.
Note that for drop-in files, if one wants to remove entries from a setting that is parsed as a list (and is not a dependency), such as AssertPathExists= (or e.g. ExecStart= in service units), one needs to first clear the list before re-adding all entries except the one that is to be removed. Dependencies (After=, etc.) cannot be reset to an empty list, so dependencies can only be added in drop-ins. If you want to remove dependencies, you have to override the entire unit.
あと,drop-in ファイルを用意したあとは sudo systemctl daemon-reload
が必要(sudo systemctl edit
で編集した場合は不要; see man systemctl
).
MHonArc+Namazu での Namazu の UTF-8 対応の続き.MLシステムが刷新されて fml から GNU Mailman に変更になったため対応.
fml はメールのヘッダに X-Mail-Count というフィールドがあって,ここに何件目の投稿かの番号が振られていたのだが,GNU Mailman に変更されてこのフィールドを参照できなくなった.GNU Mailman 側で対応してもらう手もあるが(https://shugo.net/jit/20100213.html等),これは期待できないので,幸い Subject の形式が [ML-Name:Count] Mail Subject
だったので,ここから抽出する.mhamain.pl
への追加パッチ以下.抽出に失敗したときのことはやるきがないので知らない.あと perl っぽい書き方もよく分かっていないので ruby っぽい書き方になってる.
--- a/perl/mhamain.pl
+++ b/perl/mhamain.pl
@@ -932,7 +932,13 @@ sub read_mail_header {
##------------------##
if (defined($SEQNUMFIELD)) {
$seq = $fields->{$SEQNUMFIELD}[0];
- $seq =~ s/(\d+)/$1/;
+ if ($seq =~ /^(\d+)$/) {
+ $seq=$1;
+ } elsif ($seq =~ /^\[\S+?:(\d+)\].*$/) {
+ $seq=$1;
+ } else {
+ $seq='';
+ }
print STDOUT "($seq)";
}
##------------------##
ついでに...MHonArc は URL をリンクに変換してくれるのだが,URL 末尾に全角スペースがあると,それも URL の一部だと解釈される.ということで URL 末尾に %E3%80%80
がついたベージに飛ばされる.ぴえんだ.これを修正するパッチは以下.こちらもやるきなし.変に表示が詰まるのを避けるため,末尾に全角スペースがあった場合は</a>
の後にスペースを入れることにしている.
--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -574,8 +574,15 @@ sub filter {
($HUrlExp)
}{
if (!defined($nolink) && !defined($link)) {
+ my $a = $1;
+ my $b = '';
+ $a =~ s/ +$/ /;
+ if ($a =~ /^(.*) +$/) {
+ $a = $1;
+ $b = ' ';
+ }
join('', '<a ', $target, ' rel="nofollow" href="',
- $1, '">', $1, '</a>');
+ $a, '">', $a, '</a>', $b);
} else {
my $url_match = $1;
my $scheme;
上のパッチだと文末の全角スペースのみしか考慮していない.全角スペースのあとに文字がある場合にも対応するには以下.
--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -576,10 +576,10 @@ sub filter {
if (!defined($nolink) && !defined($link)) {
my $a = $1;
my $b = '';
- $a =~ s/ +$/ /;
- if ($a =~ /^(.*) +$/) {
+ $a =~ s/ +/ /;
+ if ($a =~ /^([^ ]*)(.*)$/) {
$a = $1;
- $b = ' ';
+ $b = $2;
}
join('', '<a ', $target, ' rel="nofollow" href="',
$a, '">', $a, '</a>', $b);
もとの /usr/share/mhonarc/mhtxtplain.pl
からの patch は以下.
--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -574,8 +574,15 @@
($HUrlExp)
}{
if (!defined($nolink) && !defined($link)) {
+ my $a = $1;
+ my $b = '';
+ $a =~ s/ +/ /;
+ if ($a =~ /^([^ ]*)(.*)$/) {
+ $a = $1;
+ $b = $2;
+ }
join('', '<a ', $target, ' rel="nofollow" href="',
- $1, '">', $1, '</a>');
+ $a, '">', $a, '</a>', $b);
} else {
my $url_match = $1;
my $scheme;
いつも忘れるのでメモ.以下で input.xlsx
を input.csv
に変換できる.環境は Debian GNU/Linux の libreoffice package.
% libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc)":44,34,76 --outdir . input.xlsx
44,34,76
の意味は
,
(default: 44)"
(default: 34)% libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc)" --outdir . input.xlsx
のように Default でも input.csv
は生成されるが日本語が全て ?
になってしまう.ということで Character Set の指定が必要で,3つの Token を与える.詳細は https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options のとおり.
csv (UTF-8)から xlsx への変換も同様に可能で,例えば以下.
% libreoffice --headless --convert-to xlsx --infilter="CSV:44,34,76" --outdir . input.csv
なお,MS Excel で CSV を直接開くには,もとの CSV の文字コードが Shift_JIS でなければならないはずで,UTF-8 の CSV を MS Excel に読み込むには「データ→テキストまたはCSVから」でインポートする必要がある.
PDFがメールで送られてきていて,パスワードも知らされていたのだが Evince で開けない(伝えられたパスワードが微妙に間違っているのではないかと思い script で結構な数のパスワードを試してしまった...).
調べたところ 256-bit AES (Acrobat X or later) で暗号化されていて,未対応で開けない様子だった.
手元の環境でいろいろ調べたところ Debian buster だと尽く未対応の様子.Debian sid でも pdftk が未対応(その代わり qpdf
という program がある).google-chrome
がもっとも汎用性が高いのかも知れない.
以下,qpdf
および pdftk
で decrypt するコマンドメモ.
% qpdf --decrypt --password=XXXX encrypted_file.pdf output_file.pdf
% pdftk encrypted_file.pdf input_pw XXXX output output_file.pdf
Linux 5.9-rc1 がでたので(既に rc4 になってるけど),5.8.8 から .config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-59-features 参照.
+CONFIG_RD_ZSTD=y
+CONFIG_DECOMPRESS_ZSTD=y
CONFIG_ZSTD_DECOMPRESS: m->y
usr: Add support for zstd compressed initramfs
使わないので n
にして,CONFIG_ZSTD_DECOMPRESS も m
のままに.
+CONFIG_HAVE_KERNEL_ZSTD=y
+CONFIG_DEBUG_FS_ALLOW_ALL=y
+CONFIG_DMA_OPS=y
+CONFIG_GENERIC_ENTRY=y
+CONFIG_KVM_XFER_TO_GUEST_WORK=y
entry: Provide infrastructure for work before transitioning to guest mode
+CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
posix-cpu-timers: Provide mechanisms to defer timer handling to task_work
+CONFIG_LEDS_TRIGGER_AUDIO=m
+CONFIG_SND_HDA_GENERIC_LEDS=y
ALSA: hda: generic: Add a helper for mic-mute LED with LED classdev
+CONFIG_MDIO_DEVRES=y
+CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
posix-cpu-timers: Provide mechanisms to defer timer handling to task_work
+CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
+CONFIG_WLAN_VENDOR_MICROCHIP=y
wilc1000: move wilc driver out of staging
n
にする.
+CONFIG_X86_HV_CALLBACK_VECTOR=y
KVM: x86: Switch KVM guest to using interrupts for page ready APF delivery
KVM_GUEST
で select
される.
-CONFIG_CC_HAS_STACKPROTECTOR_NONE=y
-CONFIG_HAVE_COPY_THREAD_TLS=y
-CONFIG_HAVE_MEMORY_PRESENT=y
-CONFIG_KASAN_STACK=1
kasan: improve and simplify Kconfig.kasan
KASAN
が n
だと現れなくなった.
Kernel を Linux 5.7.X から Linux 5.8.8 に上げたら /dev/md126
や /dev/md127
が見えなくなった.Kernel の問題なのか,udev
の問題なのか,あるいは mdadm
の問題か,という感じで順番に探っていったのだけど,Kernel と mdadm
の問題だった.
Linux 5.8.8 の block: fix locking in bdev_del_partition の修正で,BLKPG_DEL_PARTITION
ioctl
の仕様が微妙に変更になっていて,mdadm
がこの ioctl
を使ってブロックデバイスが partition か否かをチェックしていて,そこで挙動がおかしくなっていた.
mdadm
の該当箇所 util.c
は以下のとおりで,errno
が ENXIO
か ENOTTY
の場合は partition ではないと判断している.Linux 5.7.19 では partition ではない場合 ENXIO
(No such device or address)が返される.これが,Linux 5.8.8 では ENOMEM
(Cannot allocate memory)が返される.うーん.
int test_partition(int fd)
{
/* Check if fd is a whole-disk or a partition.
* BLKPG will return EINVAL on a partition, and BLKPG_DEL_PARTITION
* will return ENXIO on an invalid partition number.
*/
struct blkpg_ioctl_arg a;
struct blkpg_partition p;
a.op = BLKPG_DEL_PARTITION;
a.data = (void*)&p;
a.datalen = sizeof(p);
a.flags = 0;
memset(a.data, 0, a.datalen);
p.pno = 1<<30;
if (ioctl(fd, BLKPG, &a) == 0)
/* Very unlikely, but not a partition */
return 0;
if (errno == ENXIO || errno == ENOTTY)
/* not a partition */
return 0;
return 1;
}
sudo mdadm --detail-platform
は 5.7.19 と 5.8.8 で出力は同じ.一方 sudo mdadm --examine /dev/sda
(sda
は RAID メンバの1つ)の出力が両者で異なっていたので,そこから探っていって問題箇所を見つけた.
Linux 5.7.19 での sudo mdadm --examine /dev/sda
は以下で,
/dev/sda:
Magic : Intel Raid ISM Cfg Sig.
Version : 1.3.00
Orig Family : 231b061f
Family : 231b061f
Generation : 00e7c753
Attributes : All supported
UUID : (snip)
Checksum : (snip)
MPB Sectors : 2
Disks : 4
RAID Devices : 1
Disk01 Serial : (snip)
State : active
Id : 00000001
Usable Size : (snip)
[Volume0]:
UUID : (snip)
RAID Level : 5
Members : 4
Slots : [UUUU]
(snip)
Linux 5.8.8 の sudo mdadm --examine /dev/sda
は以下.
/dev/sda:
MBR Magic : aa55
Partition[0] : (snip) sectors at 1 (type ee)
ということで,mdadm
側に以下のパッチをあてると解決する.
--- mdadm-4.1/util.c 2018-10-02 03:26:06.000000000 +0900
+++ mdadm-4.1/util.c 2020-09-11 18:59:17.924356095 +0900
@@ -524,7 +524,7 @@
if (ioctl(fd, BLKPG, &a) == 0)
/* Very unlikely, but not a partition */
return 0;
- if (errno == ENXIO || errno == ENOTTY)
+ if (errno == ENXIO || errno == ENOTTY || errno == ENOMEM)
/* not a partition */
return 0;
手元環境 Debian なので上記 patch をあてた mdadm
のパッケージを作って,dpkg -i
で突っ込んで,mdadm
は initrd
にも含まれることになるので initrd
が更新されていなければ sudo update-initramfs -k all -u
で作り直す.
ENOMEM
が返される問題,Linux 5.8.10 で仕様がもとにもどされて(block: restore a specific error code in bdev_del_partition),今は ENXIO
を返すようになっている.
以下のようなコマンドで通常は A4 サイズの空の PDF を作成出来るのであるが(pdftk とかで空のページを挿入するなどの時に便利),まさに以下のようにコケる.
% convert xc:none -page A4 empty.pdf
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
Debian GNU/Linux buster で imagemagick
の version は 8:6.9.10.23+dfsg-2.1+deb10u1
.
原因は /etc/ImageMagick-6/policy.xml
に以下の様に記載されていること.
<!-- disable ghostscript format types -->
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
PDF
の箇所を
<policy domain="coder" rights="read|write" pattern="PDF" />
に修正すれば解決する./etc/ImageMagick-6/policy.xml
を直接修正するか,それを ~/.magick/policy.xml
にコピーして自分用のそれを修正するか.
お手軽に ffmpeg を使って mp4 の一部を削除するメモ.
[Makefile]
FILES=input-0.mp4 input-1.mp4
output.mp4: $(FILES:.mp4=.ts)
t=`echo $(FILES:.mp4=.ts) | sed 's, ,|,'` ;\
ffmpeg -y -i "concat:$$t" -c copy -bsf:a aac_adtstoasc $@
input-0.mp4: input.mp4
ffmpeg -y -t "59:32" -i $< -c copy $@
input-1.mp4: input.mp4
ffmpeg -y -ss "59:38" -i $< -c copy $@
$(FILES:.mp4=.ts): %.ts: %.mp4
ffmpeg -y -i $< -c copy -bsf:v h264_mp4toannexb -f mpegts $@
MP4 (Video: h264, Audio: aac) を想定.59分32秒のところまでの mp4 と 59分38秒から終わりまでの mp4 を作成して,それを(一旦TSを経由して)結合(つまりその間の6秒をカット).コーデックはそのまま(copy)なので高速に (ほぼディスクアクセスのみで)処理できる反面,切り出し指定の精度はかなり悪いので,ざっくりとした削除しかできないけど.
TSを経由するのは https://trac.ffmpeg.org/wiki/Concatenate を参考にした.以下とのこと.
If you have MP4 files, these could be losslessly concatenated by first transcoding them to MPEG-2 transport streams.
Wanderlust (Debian 版 wl-beta 2.15.9+0.20200822-1)でサマリ表示で Error になり焦る.原因は Obsolete elmo-replace-in-string. Use replace-regexp-in-string. により elmo-replace-in-string
が削除されたこと.elmo-replace-in-string
を replace-regexp-in-string
に単純に replace すれば直る.wl-summary-subject-filter-function
を default の wl-summary-default-subject-filter
以外にカスタマイズしている人が影響を受ける.
また,http://www.fan.gr.jp/~ring/Meadow/wanderlust.html や https://uwabami.github.io/cc-env/Emacs.html にあるような Wanderlust 設定例を参考にして,以下で Subject に含まれる複数の Tab/Space を無視する設定をしている人も修正が必要.
(defadvice std11-unfold-string (after simply activate)
(setq ad-return-value
(elmo-replace-in-string ad-return-value "[ \t]+" " ")))
以前は
% sudo tl-paper set all a4
/usr/bin/tl-paper: setting paper size for dvipdfmx to a4.
/usr/bin/tl-paper: setting paper size for dvips to a4.
/usr/bin/tl-paper: setting paper size for pdftex to a4.
/usr/bin/tl-paper: setting paper size for xdvi to a4.
で defailt の paper size を letter から a4 に変更できたはずなのだが,なぜか効かない.上記でたとえば pdftex (pdflatex)なら /var/lib/texmf/tex/generic/config/pdftexconfig.tex
が以下のように変更はされている.
--- pdftexconfig.tex.orig 2020-08-07 20:48:23.642640762 +0900
+++ pdftexconfig.tex 2020-08-07 23:00:43.181888255 +0900
@@ -6,8 +6,8 @@
\pdfoutput = 1
% Paper size: dimensions given in absolute terms
-\pdfpageheight = 11 true in
-\pdfpagewidth = 8.5 true in
+\pdfpageheight = 297 true mm
+\pdfpagewidth = 210 true mm
% Enable PDF 1.5 output and thus more compression
\pdfminorversion = 5
どうやら /var/lib/texmf/web2c/pdftex/pdflatex.fmt
を作り直す必要があるらしい.以下のようにdpkg-reconfigure texlive-base
するか,そこからトリガされているtex-common
をdpkg-reconfigure
してやればいいらしい.
% sudo dpkg-reconfigure texlive-base
mktexlsr: Updating /var/lib/texmf/ls-R-TEXLIVEDIST...
mktexlsr: Updating /var/lib/texmf/ls-R-TEXMFMAIN...
mktexlsr: Updating /var/lib/texmf/ls-R...
mktexlsr: Done.
tl-paper: setting paper size for dvips to a4: /var/lib/texmf/dvips/config/config-paper.ps
tl-paper: setting paper size for dvipdfmx to a4: /var/lib/texmf/dvipdfmx/dvipdfmx-paper.cfg
tl-paper: setting paper size for xdvi to a4: /var/lib/texmf/xdvi/XDvi-paper
tl-paper: setting paper size for pdftex to a4: /var/lib/texmf/tex/generic/config/pdftexconfig.tex
Processing triggers for tex-common (6.15) ...
Running updmap-sys. This may take some time... done.
Running mktexlsr /var/lib/texmf ... done.
Building format(s) --all.
This may take some time... done.
Wanderlustで最近良く中国からのメールで文字化けを起こす.原因は
Content-Type: text/plain; charset="gb2312"
(gb2312)のメールなのに実態は gb18030ということが原因ならしい.ちなみに送信元は Outlook.com.
Wanderlustで文字化け無しで見れるようにするには
(eval-after-load "mcs-20"
'(add-to-list 'mime-charset-coding-system-alist
'(gb2312 . gb18030)))
とすればいい.mcs-20.el
は apelのファイルで,mime-charset-coding-system-alist
の defcustom
の以下の箇所はそもそも gb18030
にしたほうが良いのかもしれない.
(gb2312 . cn-gb-2312)
(cn-gb . cn-gb-2312)
マイナンバーカード持っているので折角なので手続き(予約?).https://id.mykey.soumu.go.jp/mypage/MKCAS010/ によると以下のとおりで,急ぐ必要もないのだけれど忘れてしまうので(といっても最大5,000円だけど...).
○マイナポイントの予約・申込の際には、以下の点にご注意ください。・申込みを行った後も、8月末までの間は、チャージやお買い物をしていただいても、マイナポイントは付与されません。・申込みが可能なサービスは、7月1日より順次増えていきます。一度申し込んだサービスを変更することはできませんので、サービスの詳細情報をマイナポイント事業のホームページで事前によく確認いただき、慎重にサービスを選択してください。
申請にはマイナンバーカードが必要で,それで手続きをするにはスマートフォンアプリかPC (w/Internet Explorer)が必要(あるいは,コンビニのマルチコピー機で手続きできるらしい).なぜか私のスマートフォンはマイナポイントアプリに対応していなくて,PCで手続きしようにも既に削除済みのInternet Explorerが必要ということで,Internet Explorer 11のインストールから開始.
マイナポイントのIE縛りについては何故お役所ってオワコンIEが大好きなの?参照.
Internet Explorer 11から手続きを使用としても「マイキーID作成・登録準備ソフト」が必要.下は「マイキーID作成・登録準備ソフト」をインストールした後にそれを有効化しようとしているところ(英語環境).
あとは必要情報を入力するのみ.「マイナポイントの対象となるキャッシュレス決済サービス」としてなにを選択するか,については,私は JCB 系のサービス(Quick Payとか)が良かったのだが,JCBカードはマイナポイント事業の対象になりますか?によると以下の通りで,5,000円に加えて2,000円も付加される WAON を選択(see https://www.waon.net/mynapoint/).
JCBグループが発行するカードは、本事業への参画予定はありません。制度の対応準備までの期間等、総合的に判断いたしました。
WAONの場合は「WAONマイナポイント申込アプリ」というのがあって,これで手続きできるようなのだが,試したら途中で(私の端末では利用できない)「マイナポイントアプリ」を呼び出すようで,断念.結局 IE で手続き.手続きは簡単で WAON の番号(16桁)とセキュリティコード(00+コード番号6桁)を入力するのみ(WAON カードのウラ面に刻印されている).
Linux 5.8-rc1 がでたので(既に rc4 になってるけど),5.7.8 から .config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-58-features 参照.
+CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
mm/debug: add tests validating architecture page table helpers
X86
で select
される.CONFIG_DEBUG_VM_PGTABLE=y
にすると有効になる.
+CONFIG_ARCH_HAS_DEBUG_WX=y
x86: mm: use ARCH_HAS_DEBUG_WX instead of arch defined
mm: add DEBUG_WX support
X86
で select
される.v4.4 で導入された CONFIG_DEBUG_WX
は arch/x86/Kconfig.debug
から mm/Kconfig.debug
に移動した.
+CONFIG_ARCH_USE_SYM_ANNOTATIONS=y
x86/asm: Provide a Kconfig symbol for disabling old assembly annotations
X86
で select
される.
+CONFIG_AS_TPAUSE=y
x86/delay: Introduce TPAUSE delay
as
が tpause
命令に対応していれば y
になる.See https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.8-Intel-TPAUSE.
+CONFIG_CC_CAN_LINK_STATIC=y
bpfilter: check if $(CC) can link static libc in Kconfig
cc
が static link できれば y
になる.CONFIG_BPFILTER_UMH
が依存(←使ってない).
+CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
kasan: Bump required compiler version
CONFIG_KASAN
(KASAN: runtime memory debugger)が依存.GCC 8 以上であれば y
になる.
+CONFIG_CC_VERSION_TEXT="gcc (Debian 8.3.0-6) 8.3.0"
kbuild: ensure full rebuild when the compiler is updated
default は Makefile でチェックされる
`CC_VERSION_TEXT = $(shell $(CC) --version 2>/dev/null | head -n 1)`.
コンパイラが更新された場合に full build を行うため,とのこと.
+CONFIG_DEFAULT_INIT=""
+CONFIG_DRM_I915_FENCE_TIMEOUT=10000
drm/i915: Replace the hardcoded I915_FENCE_TIMEOUT
ハードコーディングされていたものを設定できるようになった(もとも10sまま).
+CONFIG_DYNAMIC_DEBUG_CORE=y
dynamic_debug: add an option to enable dynamic debug for modules only
Module の Compile で dynamic debug の On/Off ができるように導入された.CONFIG_DYNAMIC_DEBUG
で select
される.Module compile の際に DYNAMIC_DEBUG_MODULE
を define しておくと dynamic debug が有効になる.
This is useful for people who only want to enable dynamic debug for
kernel modules without worrying about kernel image size and memory
consumption is increasing too much.
とのこと.
+CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
efi/libstub: Make initrd file loader configurable
efi/libstub: Re-enable command line initrd loading for x86
X86
で y
になる.
+CONFIG_HAVE_ARCH_KCSAN=y
kcsan: Add Kernel Concurrency Sanitizer infrastructure
Kernel Concurrency Sanitizer (KCSAN) 関連.X86
で y
になるが,CONFIG_KCSAN=y
にするには CONFIG_HAVE_KCSAN_COMPILER
が必要で,これは CC_IS_CLANG
に依存する.
+CONFIG_HIBERNATION_SNAPSHOT_DEV=y
PM: hibernate: Split off snapshot dev option
y
のままにしておく.
+CONFIG_TASKS_RCU_GENERIC=y
+CONFIG_TASKS_RUDE_RCU=y
rcu-tasks: Refactor RCU-tasks to allow variants to be added
rcu-tasks: Add an RCU-tasks rude variant
手元では FUNCTION_TRACER [=y] && TRACING_SUPPORT [=y] && FTRACE [=y] && HAVE_FUNCTION_TRACER [=y]
で CONFIG_TASKS_RUDE_RCU=y
になって,それに依存して CONFIG_TASKS_RCU_GENERIC=y
に.
+CONFIG_XFRM_AH=m
+CONFIG_XFRM_ESP=m
esp, ah: consolidate the crypto algorithm selections
Instead of duplicating the algorithm selections between INET_AH and
INET6_AH and between INET_ESP and INET6_ESP, create new tristates
XFRM_AH and XFRM_ESP that do the algorithm selections, and make these be
selected by the corresponding INET* options.
とのこと.
CONFIG_MEDIA_SUPPORT_FILTER
関連+CONFIG_DVB_CORE=m
+CONFIG_DVB_DYNAMIC_MINORS=y
+CONFIG_DVB_MAX_ADAPTERS=16
+CONFIG_DVB_NET=y
+CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
+CONFIG_MEDIA_ATTACH=y
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
+CONFIG_MEDIA_PLATFORM_SUPPORT=y
+CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_SDR_SUPPORT=y
+CONFIG_MEDIA_TEST_SUPPORT=y
+CONFIG_MEDIA_TUNER=m
+CONFIG_MEDIA_TUNER_MC44S803=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC4000=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_RADIO_ADAPTERS=y
media: Kconfig: make filtering devices optional
自動的に選択されるようになった.
The per-device option selection is a feature that some
developers love, while others hate...
So, let's make both happy by making it optional.
とのこと.自動選択を無効にするには CONFIG_MEDIA_SUPPORT_FILTER=n
とする.面倒なのでこのままにしてく.
-CONFIG_DOUBLEFAULT=y
-CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
x86/entry: Use idtentry for interrupts
X86
(X86_64
) で select
されなくなった.
-CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
-CONFIG_MEMCG_SWAP_ENABLED=y
mm: memcontrol: make swap tracking an integral part of memory control
-CONFIG_NODES_SPAN_OTHER_NODES=y
mm: remove early_pfn_in_nid() and CONFIG_NODES_SPAN_OTHER_NODES
-CONFIG_VHOST_DPN=y
cachefiles
の挙動が 5.8.x で怪しい.以下でコケる.5.6 でも cachefiles
にはバグがあって,それは 5.6.14 で修正されたのだけど (Linux 5.6.x fs/cachefiles/rdwr.c bug参照),そもそも cachefiles
ユーザ(あるいは NFS ユーザ?)はそんなに多くないのかな...cachefiles
自体のコードは 5.7 から 5.8 でほぼ変更が加えられていない様子なのだけど.
Aug 21 19:14:42 qemu kernel: [ 323.988885] CacheFiles:
Aug 21 19:14:42 qemu kernel: [ 323.988888] CacheFiles: Assertion failed
Aug 21 19:14:42 qemu kernel: [ 323.988926] ------------[ cut here ]------------
Aug 21 19:14:42 qemu kernel: [ 323.988927] kernel BUG at fs/cachefiles/rdwr.c:715!
Aug 21 19:14:42 qemu kernel: [ 323.988934] invalid opcode: 0000 [#13] SMP PTI
Aug 21 19:14:42 qemu kernel: [ 323.988937] CPU: 2 PID: 4214 Comm: sshd Tainted: P D O 5.8.2-20200821-diskless-01 #313
Aug 21 19:14:42 qemu kernel: [ 323.988938] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-1 04/01/2014
Aug 21 19:14:42 qemu kernel: [ 323.988946] RIP: 0010:cachefiles_read_or_alloc_pages.cold.20+0x307/0x3b3 [cachefiles]
Aug 21 19:14:42 qemu kernel: [ 323.988948] Code: 10 e8 69 db cc e0 48 8b 44 24 28 8b 10 e9 50 c2 ff ff 48 c7 c7 43 87 40 a0 e8 51 db cc e0 48 c7 c7 60 9d 40 a0 e8 45 db cc e0 <0f> 0b 49 8b 57 20 44 89 e9 48 c7 c7 e7 87 40 a0 65 48 8b 34 25 00
Aug 21 19:14:42 qemu kernel: [ 323.988950] RSP: 0018:ffffc9000192f9c0 EFLAGS: 00010246
Aug 21 19:14:42 qemu kernel: [ 323.988952] RAX: 000000000000001c RBX: ffff8881fbc8ac00 RCX: 0000000000000027
Aug 21 19:14:42 qemu kernel: [ 323.988953] RDX: 0000000000000000 RSI: ffff88822be979c0 RDI: ffff88822be979c8
Aug 21 19:14:42 qemu kernel: [ 323.988954] RBP: ffff8881dec0a068 R08: 0000000000000534 R09: 000000000000002b
Aug 21 19:14:42 qemu kernel: [ 323.988955] R10: 0000000000000000 R11: ffffc9000192f875 R12: ffff8881c84dfa58
Aug 21 19:14:42 qemu kernel: [ 323.988956] R13: ffffc9000192fcd0 R14: ffff888227a36900 R15: ffff8881dec0a000
Aug 21 19:14:42 qemu kernel: [ 323.988958] FS: 00007f725f467e40(0000) GS:ffff88822be80000(0000) knlGS:0000000000000000
Aug 21 19:14:42 qemu kernel: [ 323.988961] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Aug 21 19:14:42 qemu kernel: [ 323.988963] CR2: 0000564ddd7d6168 CR3: 0000000187cfc000 CR4: 00000000000006e0
Aug 21 19:14:42 qemu kernel: [ 323.988964] Call Trace:
Aug 21 19:14:42 qemu kernel: [ 323.988971] ? out_of_line_wait_on_bit+0x91/0xb0
Aug 21 19:14:42 qemu kernel: [ 323.988976] ? fscache_run_op.isra.12+0x55/0xb0
Aug 21 19:14:42 qemu kernel: [ 323.988978] __fscache_read_or_alloc_pages+0x28e/0x300
Aug 21 19:14:42 qemu kernel: [ 323.988982] __nfs_readpages_from_fscache+0x60/0x160
Aug 21 19:14:42 qemu kernel: [ 323.988985] nfs_readpages+0xb5/0x1a0
Aug 21 19:14:42 qemu kernel: [ 323.988990] read_pages+0x1c1/0x1f0
Aug 21 19:14:42 qemu kernel: [ 323.988993] page_cache_readahead_unbounded+0x1ad/0x200
Aug 21 19:14:42 qemu kernel: [ 323.988997] generic_file_buffered_read+0x5c3/0x960
Aug 21 19:14:42 qemu kernel: [ 323.989001] ? nfs4_do_check_delegation+0x18/0x40
Aug 21 19:14:42 qemu kernel: [ 323.989005] ? nfs_check_cache_invalid+0x33/0x90
Aug 21 19:14:42 qemu kernel: [ 323.989007] nfs_file_read+0x6b/0x90
Aug 21 19:14:42 qemu kernel: [ 323.989011] new_sync_read+0x114/0x1a0
Aug 21 19:14:42 qemu kernel: [ 323.989013] vfs_read+0x151/0x180
Aug 21 19:14:42 qemu kernel: [ 323.989015] ksys_read+0x59/0xd0
Aug 21 19:14:42 qemu kernel: [ 323.989018] do_syscall_64+0x3e/0xb0
Aug 21 19:14:42 qemu kernel: [ 323.989020] entry_SYSCALL_64_after_hwframe+0x44/0xa9
Aug 21 19:14:42 qemu kernel: [ 323.989023] RIP: 0033:0x7f725f80a461
Aug 21 19:14:42 qemu kernel: [ 323.989025] Code: fe ff ff 50 48 8d 3d fe d0 09 00 e8 e9 03 02 00 66 0f 1f 84 00 00 00 00 00 48 8d 05 99 62 0d 00 8b 00 85 c0 75 13 31 c0 0f 05 <48> 3d 00 f0 ff ff 77 57 c3 66 0f 1f 44 00 00 41 54 49 89 d4 55 48
Aug 21 19:14:42 qemu kernel: [ 323.989026] RSP: 002b:00007ffd776e1588 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
Aug 21 19:14:42 qemu kernel: [ 323.989028] RAX: ffffffffffffffda RBX: 0000564ddd7bdf90 RCX: 00007f725f80a461
Aug 21 19:14:42 qemu kernel: [ 323.989029] RDX: 0000000000002000 RSI: 0000564ddd7d4160 RDI: 0000000000000004
Aug 21 19:14:42 qemu kernel: [ 323.989030] RBP: 0000000000000d68 R08: 0000000000000003 R09: 00007f725f8dbd30
Aug 21 19:14:42 qemu kernel: [ 323.989031] R10: 0000564ddd79e010 R11: 0000000000000246 R12: 00007f725f8d7760
Aug 21 19:14:42 qemu kernel: [ 323.989032] R13: 00007f725f8d82a0 R14: 0000000000000000 R15: 0000000000000000
Aug 21 19:14:42 qemu kernel: [ 323.989034] Modules linked in: fuse ext4 crc16 mbcache jbd2 dm_crypt ecb aes_generic libaes crypto_simd cryptd glue_helper xts algif_skcipher af_alg dm_mod xt_conntrack xt_MASQUERADE xfrm_user xfrm_algo nft_counter xt_addrtype nft_compat nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 br_netfilter cpufreq_userspace cpufreq_powersave cpufreq_ondemand cpufreq_conservative rpcsec_gss_krb5 btrfs blake2b_generic zstd_decompress zstd_compress bochs_drm drm_vram_helper drm_ttm_helper ttm drm_kms_helper syscopyarea intel_agp sysfillrect intel_gtt snd_pcm sg sysimgblt fb_sys_fops snd_timer joydev evdev snd serio_raw button soundcore pcspkr cachefiles lm78 i5k_amb nf_tables hwmon_vid nfnetlink msr drm agpgart nfsd binfmt_misc ip_tables x_tables autofs4 loop squashfs overlay raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c crc32c_generic raid1 raid0 multipath linear md_mod sd_mod t10_pi crc_t10dif crct10dif_generic sr_mod cdrom crct10dif_common
Aug 21 19:14:42 qemu kernel: [ 323.989066] ata_generic ata_piix libata psmouse scsi_mod rtc_cmos
Aug 21 19:14:42 qemu kernel: [ 323.989072] ---[ end trace f27e8415c423cf4c ]---
Aug 21 19:14:42 qemu kernel: [ 323.989076] RIP: 0010:cachefiles_read_or_alloc_pages.cold.20+0x307/0x3b3 [cachefiles]
Aug 21 19:14:42 qemu kernel: [ 323.989078] Code: 10 e8 69 db cc e0 48 8b 44 24 28 8b 10 e9 50 c2 ff ff 48 c7 c7 43 87 40 a0 e8 51 db cc e0 48 c7 c7 60 9d 40 a0 e8 45 db cc e0 <0f> 0b 49 8b 57 20 44 89 e9 48 c7 c7 e7 87 40 a0 65 48 8b 34 25 00
Aug 21 19:14:42 qemu kernel: [ 323.989079] RSP: 0018:ffffc900005cf9c0 EFLAGS: 00010246
Aug 21 19:14:42 qemu kernel: [ 323.989081] RAX: 000000000000001c RBX: ffff8881fbc8ac00 RCX: 0000000000000027
Aug 21 19:14:42 qemu kernel: [ 323.989082] RDX: 0000000000000000 RSI: ffff88822bf179c0 RDI: ffff88822bf179c8
Aug 21 19:14:42 qemu kernel: [ 323.989083] RBP: ffff8881dec0a068 R08: 000000000000027c R09: 000000000000002b
Aug 21 19:14:42 qemu kernel: [ 323.989084] R10: 0000000000000000 R11: ffffc900005cf875 R12: ffff8881c84dfa58
Aug 21 19:14:42 qemu kernel: [ 323.989085] R13: ffffc900005cfcd0 R14: ffff88822a584f00 R15: ffff8881dec0a000
Aug 21 19:14:42 qemu kernel: [ 323.989086] FS: 00007f725f467e40(0000) GS:ffff88822be80000(0000) knlGS:0000000000000000
Aug 21 19:14:42 qemu kernel: [ 323.989087] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Aug 21 19:14:42 qemu kernel: [ 323.989088] CR2: 0000564ddd7d6168 CR3: 0000000187cfc000 CR4: 00000000000006e0
https://bugzilla.kernel.org/show_bug.cgi?id=208883 にも報告されていて,ここでは https://lkml.org/lkml/2020/8/3/960 の fscache-iterを merge すれば解決するという案が示されているが,https://lkml.org/lkml/2020/8/10/454でこの pull request は一旦取り下げられている.
cachefiles
の挙動が 5.8.x で怪しい問題,https://lkml.org/lkml/2020/8/27/714 の patch をあてたら解決する.少なくとも 5.8.5 ではこの patch が必要.
cachefiles
の挙動が怪しい問題,https://lkml.org/lkml/2020/8/27/714 の patch がようやく cachefiles: Drop superfluous readpages aops NULL checkのように取り込まれた様子.5.11-rc5 および 5.10.11 (commit)で修正されている.
以下の compile には https://gitlab.com/-/snippets/1986228/ のパッチが必要.
また,nvidia-legacy-390xx-kernel-dkms
については kernel 側に https://www.spinics.net/lists/linux-fsdevel/msg173844.html のパッチが必要(なぜか radix_tree_preloads
が EXPORT_PER_CPU_SYMBOL_GPL
されていてリンクできない,とかだったはず).
使っているNotePC (ASUS ZenBook S UX391UA, Windows 10 Pro)で Windows Update が Intel Corporation - Display - 26.20.100.7325
の Install を繰り返す.Update history では Successfully installed
になっているのだが,実際にはベンダ提供ドライバ(23.20.16.4927)が使われ続ける.
一般的にはベンダ提供ドライバを使うことが推奨されるのだが,それを Windows Update が上書きしようとして,しかも成功しているかに見せかけて失敗して,繰り返しインストールを試みる,という症状.
ずっと放置していたのだが,何かの拍子に Windows Update によるインストールが正しく失敗するようになって,Windows Update の警告が表示されるようになってしまったので対処.
一般的には
などによると
services.msc
)で Windows Update Service を停止する(Stopする.ただしこれだと自動で起動することがあるので Property を開いて Startup type を Manual から Disabled に変更する)C:\Windows\SoftwareDistribution\Download
の中身をまるごと削除するservices.msc
)で Windows Update Service を有効にする(もとにもどす)が解決法ならしいが,手元では解決しない.ベンダ提供ドライバの再インストール等との組み合わせや,Intel からドライバを直接ダウンロードしてインストールを試みたがだめだった.
仕方がないので,個別の Windows Update を無効化する方法を調べた.Hide Windows Updates or driver updatesHide Windows Updates or driver updatesにある Show or hide updates という Troubleshooter を利用すると,個別の Windows Update を無効化できる.これで警告が出る問題,解決した.
なお,Intel® Driver & Support Assistant ではベンダ提供ドライバの状態で Your Intel® drivers and software are up to date
と判定される.
なお,急いでいる時にトラブルになると嫌なので,gpedit.msc
(Local Group Policy Editor; Windows 10 Pro 用)で以下のように辿ってたどり着く Configure Automatic Update
の設定で,自動ダウンロードを抑制している.
参考にしたページ:
Linux 5.7-rc1 がでたので(既に rc3 になってるけど),5.6.3 から .config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-57-features 参照.大きなところは Tiger Lake 関連かなと.
-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
kbuild: use KBUILD_DEFCONFIG as the fallback for DEFCONFIG_LIST
削除された.
+CONFIG_AS_AVX512=y
+CONFIG_AS_SHA1_NI=y
+CONFIG_AS_SHA256_NI=y
x86: probe assembler capabilities via kconfig instead of makefile
assembler (as) capability check を Makefile ではなく kconfig の段階で行うようになったため追加.自動で設定される(scripts/Kconfig.include
の as-instr
でチェック).
+CONFIG_LD_VERSION=231010000
arm64: Kconfig: ptrauth: Add binutils version check to fix mismatch
追加された.
-CONFIG_ARCH_CLOCKSOURCE_DATA=y
x86/vdso: Use generic VDSO clock mode storage
lib/vdso: Cleanup clock mode storage leftovers
CONFIG_GENERIC_VDSO_CLOCK_MODE
を使うように変更されたが,その後全アーキテクチャで generic storage を使うようになったので削除された.
+CONFIG_GENERIC_IRQ_INJECTION=y
genirq: Provide interrupt injection mechanism
PCI/AER: Fix the broken interrupt injection
手元では PCIEAER_INJECT [=m] && PCI [=y] && PCIEAER [=y]
で y
になっていた.
+CONFIG_HARDIRQS_SW_RESEND=y
x86: Select HARDIRQS_SW_RESEND on x86
X86
で select されるようになった.
-CONFIG_PLUGIN_HOSTCC="g++"
gcc-plugins: drop support for GCC <= 4.7
削除された.
+CONFIG_PAGE_REPORTING=y
手元では VIRTIO_BALLOON [=y] && VIRTIO_MENU [=y] && VIRTIO [=y]
で y
になっていた.
-CONFIG_TRANSPARENT_HUGE_PAGECACHE=y
mm: remove CONFIG_TRANSPARENT_HUGE_PAGECACHE
削除された.
+CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
+CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"
+CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
+CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud"
mm/zswap: allow setting default status, compressor and allocator in Kconfig
あと CONFIG_ZSWAP_DEFAULT_ON
も導入されているが,こちらは n
にしておく.
-CONFIG_NF_TABLES_SET=m
netfilter: nf_tables: make sets built-in
nf_tables_set.ko
に分ける必要ないよね,ということ.
-CONFIG_BLK_DEV_SR_VENDOR=y
scsi: sr: remove references to BLK_DEV_SR_VENDOR, leave it enabled
削除された.Default で有効になる.
+CONFIG_SATA_HOST=y
ata: make SATA_PMP option selectable only if any SATA host driver is enabled
ata: start separating SATA specific code from libata-core.c
追加された.libata-core.c
から CONFIG_SATA_HOST=y
用のコードが libata-sata.c
に分離された.
+CONFIG_PATA_TIMINGS=y
ata: separate PATA timings code from libata-core.c
追加された.libata-core.c
から CONFIG_PATA_TIMINGS=y
用のコードが libata-pata-timings.c
に分離された.
+CONFIG_ATA_FORCE=y
ata: make “libata.force” kernel parameter optional
“libata.force” kernel parameter が optional になった.n
にすると kernel size が 3KB 程削減されるとのこと.このままにしておく.
-CONFIG_DRM_I915_ALPHA_SUPPORT=y
drm/i915: drop alpha_support for good in favour of force_probe
削除された.経過期間が終わったとのことで.
-CONFIG_DRM_I915_SPIN_REQUEST=5
+CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=8000
drm/i915/gt: Expose busywait duration to sysfs
名前が変更になるとともに単位が us から ns に変更され,/sys/class/drm/card?/engine/*/ms_busywait_duration_ns
からアクセス可能になった.
+CONFIG_VHOST_MENU=y
vhost: refine vhost and vringh kconfig
vhost
と vringh
周りが整理され,追加になった.
+CONFIG_VHOST_IOTLB=m
追加された.CONFIG_VHOST
で select される.
+CONFIG_VHOST_NET=m
何かの拍子で m
になった.
CONFIG_VHOST_VDPA
と CONFIG_VHOST_SCSI
も m
にする.
+CONFIG_IOASID=y
iommu/vt-d: Add build dependency on IOASID
CONFIG_INTEL_IOMMU
で select されるようになった.
-CONFIG_OPTIMIZE_INLINING=y
compiler: remove CONFIG_OPTIMIZE_INLINING entirely
削除された.強制的に y
になるので無意味になったとのこと.
+CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""
serial/sysrq: Add MAGIC_SYSRQ_SERIAL_SEQUENCE
追加された.この機会に CONFIG_MAGIC_SYSRQ_SERIAL=n
にする.
-CONFIG_UBSAN_ALIGNMENT=y
ubsan: split “bounds” checker from other options
UBSAN (undefined behaviour sanity checker)関連が CONFIG_UBSAN
に依存するようになり CONFIG_UBSAN=n
なので n
になった.
The commit, cachefiles: drop direct usage of ->bmap method., included in v5.5 has a bug. The return value before list_for_each_entry_safe
, that is ret = space ? -ENODATA : -ENOBUFS
, overwritten by the return value of bmap
. This bug exists in Linux 5.6.2 at least.
The following is a patch to fix this bug. This patch also includes https://lkml.org/lkml/2020/3/20/399.
--- a/fs/cachefiles/rdwr.c
+++ b/fs/cachefiles/rdwr.c
@@ -431,7 +431,7 @@ int cachefiles_read_or_alloc_page(struct fscache_retrieval *op,
block <<= shift;
ret = bmap(inode, &block);
- ASSERT(ret < 0);
+ ASSERT(!ret);
_debug("%llx -> %llx",
(unsigned long long) (page->index << shift),
@@ -739,8 +739,8 @@ int cachefiles_read_or_alloc_pages(struct fscache_retrieval *op,
block = page->index;
block <<= shift;
- ret = bmap(inode, &block);
- ASSERT(!ret);
+ ret2 = bmap(inode, &block);
+ ASSERT(!ret2);
_debug("%llx -> %llx",
(unsigned long long) (page->index << shift),
This bug has been fixed in Linux 5.6.14 while fixed in v5.7-rc6 as for the master branch.
数値を3桁区切り表示したいときの話.Rails にはそれっぽい関数があるらしいが Ruby のみで.やるきなしなし.
class Integer
def to_c
(to_s.reverse.scan(/\d{1,3}/)*",").reverse
end
end
Python の場合は以下.
>>> "{:,}".format(12345678)
https://github.com/tensorflow/tensorboard/issues/3077 にあるように index.js
を tensorboard が返す際に Content-Type: text/plain
で応答するため,ブラウザ側で index.js
を実行出来ず真っ白な状態になる.これ,python に付属の mimetypes.py
関連の問題で,以下のように mime type を application/javascript
として推定して欲しいのに,Windows では text/plain
になってしまう.
% python3 /usr/lib/python3.6/mimetypes.py index.js
type: application/javascript encoding: None
でこれ,mimetypes.py
が import winreg as _winreg
とかしていて,Windows の場合レジストリの情報から拡張子と mime type の対応を作成しているのが原因.index.js
に対して text/plain
が返るということはそういう風にレジストリに登録されている.
最も簡単に対処するには Win-r で regedit 起動して,HKEY_LOCAL_MACHINE\Software\Classes
の .js
の Content Type
を application/javascript
に変更してしまうこと.
Slackのかわりに Mattermostを利用しているのだが,Default 環境では日本語検索ができない.日本語全文検索可能なストレージエンジン Mroonga を導入して検索できるようにする.環境は Debian GNU/Linux の stable (buster; Debian 10),RDBMS は MySQL派生の MariaDB(Debian 9 以降の Default RDBMS).
以下で Mroonga を install
sudo aptitude install mariadb-plugin-mroonga
MySQL (=MariaDB,以下同様)が既に導入済みで password 設定済みだと
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
のように MySQL への install に失敗するので以下実行.
mysql -u root -p<sql root password> < /usr/share/mysql/mroonga/install.sql
登録済みエンジン確認.
% mysql -u root -p<sql root password>
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 49565
Server version: 10.3.22-MariaDB-0+deb10u1 Debian 10
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show engines;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | Stores tables as CSV files | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO |
| Mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| SEQUENCE | YES | Generated tables filled with sequential values | YES | NO | YES |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.000 sec)
テーブルのエンジン確認.Mattermost の DB name は mattermost
を想定.
MariaDB [(none)]> select table_name, engine from information_schema.tables where table_schema = 'mattermost';
+----------------------+--------+
| table_name | engine |
+----------------------+--------+
| ClusterDiscovery | InnoDB |
| Compliances | InnoDB |
| Systems | InnoDB |
| Licenses | InnoDB |
| Tokens | InnoDB |
| ChannelMemberHistory | InnoDB |
| PluginKeyValueStore | InnoDB |
| TermsOfService | InnoDB |
| Reactions | InnoDB |
| Roles | InnoDB |
| Schemes | InnoDB |
| Teams | InnoDB |
| TeamMembers | InnoDB |
| ChannelMembers | InnoDB |
| Channels | InnoDB |
| PublicChannels | InnoDB |
| Posts | InnoDB |
| Users | InnoDB |
| Audits | InnoDB |
| Sessions | InnoDB |
| OAuthApps | InnoDB |
| OAuthAccessData | InnoDB |
| OAuthAuthData | InnoDB |
| IncomingWebhooks | InnoDB |
| OutgoingWebhooks | InnoDB |
| Commands | InnoDB |
| CommandWebhooks | InnoDB |
| Preferences | InnoDB |
| Emoji | InnoDB |
| Status | InnoDB |
| FileInfo | InnoDB |
| Jobs | InnoDB |
| UserAccessTokens | InnoDB |
| UserTermsOfService | InnoDB |
| LinkMetadata | InnoDB |
| GroupMembers | InnoDB |
| UserGroups | InnoDB |
| Bots | InnoDB |
| GroupTeams | InnoDB |
| GroupChannels | InnoDB |
+----------------------+--------+
Channels と Posts のエンジンを Mroonga に変更.その後上のコマンドでテーブルのエンジン確認.
MariaDB [mattermost]> alter table Channels ENGINE = Mroonga;
MariaDB [mattermost]> alter table Posts ENGINE = Mroonga;
念の為 Mattermost 再起動(systemctl で制御可能であることを想定).
ちなみに Mattermost,既存 Web server を利用することができるが,パスとして / から利用するので,それ用のドメインを切って Virtual Domain にて運用.
% sudo systemctl stop mattermost.service
% sudo systemctl start mattermost.service
参考にしたページ: - http://asuki-yt.hatenablog.jp/entry/2018/04/03/200000
chroot 環境で systemd の upgrade に以下で失敗する.
Detected unsafe path transition / → /var during canonicalization of /var/log/journal.
/ の owner が root:root になっていない場合に発生する.
# chown root:root /
すれば解決する.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=950684 参照.
Linux 5.6-rc2 で 5.5.5 から .config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-56-features 参照.大きなところは net: WireGuard secure network tunnel で VPN である WireGuard が取り込まれたことと AMD 関連かなと.
-CONFIG_BUILDTIME_EXTABLE_SORT=y
+CONFIG_BUILDTIME_TABLE_SORT=y
scripts/sorttable: Rename ‘sortextable’ to ‘sorttable’
Rename された.
+CONFIG_TIME_NS=y
+CONFIG_GENERIC_VDSO_TIME_NS=y
ns: Introduce Time Namespace
x86/vdso: Add time napespace page
-CONFIG_X86_PTDUMP_CORE=y
+CONFIG_GENERIC_PTDUMP=y
+CONFIG_PTDUMP_CORE=y
x86: mm: convert dump_pagetables to use walk_page_range
mm: add generic ptdump
A generic version of page table dumping.
+CONFIG_BOOT_CONFIG=y
+CONFIG_BOOTTIME_TRACING=y
bootconfig: Add Extra Boot Config support
bootconfig: Remove unneeded CONFIG_LIBXBC
bootconfig: Load boot config from the tail of initrd
tracing/boot: Add boot-time tracing
新機能.ともに n
にできるが y
のままにしておく.
+CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
+CONFIG_BPF_JIT_DEFAULT_ON=y
bpf, x86, arm64: Enable jit by default when not built as always-on
BPF_JIT_ALWAYS_ON=y
でなくても Default で BPF (Berkeley Packet Filter) の JIT が有効になるようになった.Debian では今のところ BPF_JIT_ALWAYS_ON=n
が Default の設定.
+CONFIG_IA32_FEAT_CTL=y
x86/intel: Initialize IA32_FEAT_CTL MSR at boot
def_bool y
depends on CPU_SUP_INTEL
+CONFIG_X86_VMX_FEATURE_NAMES=y
x86/cpu: Detect VMX features on Intel, Centaur and Zhaoxin CPUs
def_bool y
depends on IA32_FEAT_CTL && X86_FEATURE_NAMES
-CONFIG_HAVE_RCU_TABLE_FREE=y
+CONFIG_MMU_GATHER_RCU_TABLE_FREE=y
+CONFIG_MMU_GATHER_TABLE_FREE=y
asm-generic/tlb: rename HAVE_RCU_TABLE_FREE
asm-generic/tlb: provide MMU_GATHER_TABLE_FREE
CONFIG_HAVE_RCU_TABLE_FREE
が MMU_GATHER_RCU_TABLE_FREE
に Rename され,MMU_GATHER_TABLE_FREE
が導入された.
+CONFIG_ETHTOOL_NETLINK=y
ethtool: introduce ethtool netlink interface
y
にしておく.
-CONFIG_REGMAP_I2C=y
-CONFIG_REGMAP_SPI=y
+CONFIG_REGMAP_I2C=m
rtc: i2c/spi: Avoid inclusion of REGMAP support when not needed
RTC_I2C_AND_SPI
で select されなくなり,RTC_I2C_AND_SPI
に依存する個別の device driver で select されるようになった.REGMAP_I2C
については以前は以下で y
になっていた.
Selected by [y]:
RTC_I2C_AND_SPI [=y] && RTC_CLASS [=y] && I2C [=y]
Selected by [m]:
SENSORS_LM75 [=m] && HWMON [=y] && I2C [=y]
SENSORS_LM95245 [=m] && HWMON [=y] && I2C [=y]
TYPEC_TPS6598X [=m] && USB_SUPPORT [=y] && TYPEC [=m] && I2C [=y]
これ,5.5.6 でも <https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=fe0ed403e082358eea51ad2a2a56f92896f4a1cf> として取り込まれている.
-CONFIG_DRM_AMD_DC_DCN1_0=y
-CONFIG_DRM_AMD_DC_DCN2_0=y
-CONFIG_DRM_AMD_DC_DSC_SUPPORT=y
+CONFIG_DRM_AMD_DC_DCN=y
drm/amd/display: Drop CONFIG_DRM_AMD_DC_DCN2_0 and DSC_SUPPORTED
drm/amd/display: rename DCN1_0 kconfig to DCN
CONFIG_DRM_AMD_DC_DCN2_0
と CONFIG_DRM_AMD_DC_DSC_SUPPORT
が削除され(Default で有効),CONFIG_DRM_AMD_DC_DCN1_0
が CONFIG_DRM_AMD_DC_DCN
に Rename された.
GPU は Intel か nVidia ばかりで CONFIG_DRM_AMDGPU=m
自体不要かもしれないが,そのままで.
-CONFIG_SND_HDA_PREALLOC_SIZE=64
+CONFIG_SND_HDA_PREALLOC_SIZE=0
ALSA: hda: No preallocation on x86 platforms
CONFIG_SND_DMA_SGBUF=y
(CONFIG_X86=y
なら y
になる)であれば preallocation 不要とのことでここでの設定不可(0)になった.
+CONFIG_NFS_DISABLE_UDP_SUPPORT=y
NFS: allow deprecation of NFS UDP protocol
NFS over UDP を disable する設定が追加された.Default は y
.ちなみに手元では常に proto=tcp
で mount している(ずっと以前にGbEと100BASE-TXが混ざった環境でUDPだと挙動が怪しかったので,そのころからTCPにしている).ついにこの時が来たか,という感じ.
Choose Y here to disable the use of NFS over UDP. NFS over UDP
on modern networks (1Gb+) can lead to data corruption caused by
fragmentation during high loads.
+CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9
+CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256
selinux: sidtab reverse lookup hash table
selinux: cache the SID -> context string translation
ちょっとそもそも SELinux の機能を使っていないので CONFIG_SECURITY_SELINUX=n
にする.
-CONFIG_CRYPTO_LIB_POLY1305_RSIZE=4
+CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
crypto: x86/poly1305 - wire up faster implementations for kernel
include/crypto/poly1305.h
にある struct poly1305_key opaque_r
の配列長.若干早くなったらしい.
今のところ使っていないけど,CONFIG_CRYPTO_CHACHA20POLY1305
等有効にしておく.5.6 では VPN である WireGuard が kernel に取り込まれていて,これを使う場合は select される(とりあえず使わない).
いつものように以下の DKMS のコンパイルに失敗する.
nvidia-kernel-dkms については https://gitlab.com/snippets/1937313 のパッチを当てればコンパイルできる.以下の kernel の修正による.
ioremap_nocache
が削除された(ioremap
と同じなので).struct timeval
や struct timespec
が利用できなくなった.ioctl.rst の Timestamps 付近.getrawmonotonic
が削除され,かわりに ktime_get_raw_ts64
の利用が推奨される.proc_create_data
関数の I/F に変更があった.const struct file_operations
が const struct proc_ops
に変更され,メンバ名も変更された.nvidia-legacy-390xx-kernel-dkms についても同様だが,こちらは以下の影響も受ける.
put_user_page
が unpin_user_page
に rename された.nvidia-legacy-390xx-kernel-dkms 390.116-1 向け patch (Linux 5.5 向け patch があたっていることを想定)を https://pastebin.com/g4VD5U7F に置いた.
Linux 5.5-rc5 で 5.4.X から .config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-55-features 参照.
+CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
crypto: chacha - move existing library code into lib/crypto
一部が lib/crypto/libchacha.c に分離された.手元では CRYPTO_CHACHA20 で select される.これは CRYPTO_ADIANTUM で select されていて,必要かどうか不明だがこのまま.
On CPUs without AES instructions, Adiantum is much faster than AES-XTS.
とのこと.
+CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
crypto: poly1305 - move core routines into a separate library
一部が lib/crypto/poly1305.c に分離された.手元では CRYPTO_NHPOLY1305, CRYPTO_ADIANTUM, CRYPTO_POLY1305 で select される.
+CONFIG_CRYPTO_LIB_POLY1305_RSIZE=4
crypto: poly1305 - expose init/update/final library interface
crypto: x86/poly1305 - expose existing driver as poly1305 library
X86_64 で 4 に設定される.
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_SKCIPHER=y
+CONFIG_CRYPTO_SKCIPHER2=y
crypto: skcipher - rename the crypto_blkcipher module and kconfig option
rename された.
CRYPTO関連,ついでに以下にしておく.
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=m
CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_CHACHA20_X86_64=m
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
CONFIG_CRYPTO_LIB_CHACHA=m
CONFIG_CRYPTO_LIB_POLY1305=m
CONFIG_CRYPTO_NHPOLY1305_AVX2=m
CONFIG_CRYPTO_NHPOLY1305_SSE2=m
CONFIG_CRYPTO_POLY1305_X86_64=m
CONFIG_CRYPTO_CHACHA20_X86_64=m
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=m
+CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
+CONFIG_DRM_I915_PREEMPT_TIMEOUT=640
drm/i915/execlists: Force preemption
drm/i915: Default to a more lenient forced preemption timeout
+CONFIG_DRM_I915_STOP_TIMEOUT=100
drm/i915/gt: Try to more gracefully quiesce the system before resets
+CONFIG_DRM_I915_TIMESLICE_DURATION=1
+CONFIG_DRM_TTM_DMA_PAGE_POOL=y
drm/ttm, drm/vmwgfx: Use a configuration option for the TTM dma page pool
+CONFIG_DRM_TTM_HELPER=m
DRM_BOCHS で select される.
+CONFIG_CRYPTO_XXHASH=m
BTRFS_FS で select される.
+CONFIG_CRYPTO_BLAKE2B=m
crypto: blake2b - add blake2b generic implementation
btrfs: add Kconfig dependency for BLAKE2B
BTRFS_FS で select される.
上記ともに checksumming algorithm として利用可能なリストが CRC32 のみだったところ以下のように4種類から選択可能なように変更されたことによる.
enum btrfs_csum_type {
BTRFS_CSUM_TYPE_CRC32 = 0,
BTRFS_CSUM_TYPE_XXHASH = 1,
BTRFS_CSUM_TYPE_SHA256 = 2,
BTRFS_CSUM_TYPE_BLAKE2 = 3,
};
btrfs: add sha256 to checksumming algorithm
btrfs: add xxhash64 to checksumming algorithms
btrfs: add blake2b to checksumming algorithms
+CONFIG_BLK_CGROUP_RWSTAT=y
blk-cgroup: separate out blkg_rwstat under CONFIG_BLK_CGROUP_RWSTAT
block/blk-cgroup.c
の一部が block/blk-cgroup-rwstat.c
に分離された.BLK_DEV_THROTTLING
および BFQ_GROUP_IOSCHED
から select される.
+CONFIG_CC_HAS_INT128=y
int128: move __uint128_t compiler test to Kconfig
ARCH_SUPPORTS_INT128 を select するか判断するために利用される.
+CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
+CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
ftrace/x86: Add register_ftrace_direct() for custom trampolines
ftrace: Add register_ftrace_direct()
ともに X86 で select される.
+CONFIG_FW_CACHE=y
firmware_class: make firmware caching configurable
Because firmware caching generates uevent messages that are sent over
a netlink socket, it can prevent suspend on many platforms. It's
also not always useful, so make it a configurable option.
とのこと.CONFIG_PM_SLEEP
の箇所がCONFIG_FW_CACHE
に変更されている.CONFIG_PM_SLEEP=y
でこれまで通りで問題ないので,y にしておく.
+CONFIG_HAVE_ARCH_KASAN_VMALLOC=y
x86/kasan: support KASAN_VMALLOC
kasan: support backing vmalloc space with real shadow memory
X86_64 で select される.KASAN (KernelAddressSANitizer).CONFIG_KASAN は n のままにしておく.
+CONFIG_IOMMU_DMA=y
iommu/amd: Convert AMD iommu driver to the dma-iommu api
AMD_IOMMU
で select される.
+CONFIG_IRQ_MSI_IOMMU=y
上記 CONFIG_IOMMU_DMA
で select されるようになった.
+CONFIG_IO_WQ=y
io-wq: small threadpool implementation for io_uring
io_uring: replace workqueue usage with io-wq
IO_URING
(Linux 5.1 で導入された非同期I/O I/F)で select される.
+CONFIG_MAPPING_DIRTY_HELPERS=y
mm: Add write-protect and clean utilities for address space ranges
drm/vmwgfx: Implement an infrastructure for write-coherent resources
DRM_VMWGFX
で select される.
以前は VMWare の使用も想定していたのだが,最近は使わないので,以下とともにまるごと n にした.
CONFIG_DRM_VMWGFX
CONFIG_VMWARE_PVSCSI
CONFIG_VMWARE_VMCI
CONFIG_VMXNET3
+CONFIG_MEMREGION=y
lib: Uplevel the pmem “region” ida to a global allocator
LIBNVDIMM
で select される.
+CONFIG_SND_INTEL_DSP_CONFIG=m
CONFIG_SND_INTEL_NHLT: m->y
ALSA: hda: add Intel DSP configuration / probe code
Intel 系 SND DSP,手元では SND_HDA_INTEL
で select される.CONFIG_SND_INTEL_NHLT
は tristate から bool に変更された.
+CONFIG_SYMBOLIC_ERRNAME=y
printf: add support for printing symbolic error names
If you say Y here, the kernel's printf implementation will
be able to print symbolic error names such as ENOSPC instead
of the number 28. It makes the kernel image slightly larger
(about 3KB), but can make the kernel logs easier to read.
とのこと.y にしておく.
+CONFIG_X86_IOPL_IOPERM=y
x86/ioperm: Fix use of deprecated config option
x86/ioperm: Extend IOPL config to control ioperm() as well
x86/iopl: Remove legacy IOPL option
x86/iopl: Restrict iopl() permission scope
CONFIG_X86_IOPL_EMULATION
として導入されたが,iopl と ioperm で一緒に提供するようになった.default の y にしておく.
-CONFIG_64BIT_TIME=y
y2038: remove CONFIG_64BIT_TIME
全アーキテクチャで define されたとのことで remove された.
-CONFIG_ARCH_HAS_REFCOUNT=y
-CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
-CONFIG_CALGARY_IOMMU=y
x86: Remove the calgary IOMMU driver
「calgary IOMMU was only used on high-end IBM systems」とのことで削除された.
-CONFIG_KEYS_COMPAT=y
-CONFIG_X86_INTEL_UMIP=y
+CONFIG_X86_UMIP=y
x86/Kconfig: Rename UMIP config parameter
AMD 2nd generation EPYC processors support the UMIP (User-Mode
Instruction Prevention) feature. So, rename X86_INTEL_UMIP to generic
X86_UMIP and modify the text to cover both Intel and AMD.
drm: delete drmP.h + drm_os_linux.hによって drmP.h が削除されたので,
/var/lib/dkms/nvidia-current/430.64/build/nvidia-drm/nvidia-drm-utils.h:30:10: fatal error: drm/drmP.h: No such file or directory
#include <drm/drmP.h>
^~~~~~~~~~~~
ように以下の DKMS のコンパイルに失敗する.
https://devtalk.nvidia.com/default/topic/1068332/linux/nvidia-driver-does-not-build-on-linux-v5-5-release-candidate-kernel/ にあるパッチでともに対応可能.kernel/nvidia-drm/nvidia-drm-connector.c
の break
の箇所が #if
で条件付けされていないのが気になるけど.
nvidia-kernel-dkms 430.64-4~bpo10+1 向け patch を https://pastebin.com/dgBadP0K に置いた.
あとパッチによるとdrm/connector: Allow max possible encoders to attach to a connectorによって DRM_CONNECTOR_MAX_ENCODER
(3) の #define
が削除されたものへの対応も必要らしい(drm_connector_for_each_possible_encoder
マクロを利用する).
Emacs の MUA である Wanderlust で,bbdb を使ってメールアドレス等を収集しているのであるが,bbdb3 が 3.2-6 から 3.2-7 にあがったタイミングで以下のエラーで表示メール関連の bbdb entry が表示されなくなった.M-x bbdb
自体は機能している.
save-current-buffer: Wrong type argument: stringp, nil
そもそも bbdb3 自体が Wanderlust で設定困難で,https://github.com/wanderlust/wanderlust/issues/64#issuecomment-388231182 にあるとおり,以下のような bbdb/wl-header
(see /usr/share/emacs/site-lisp/bbdb3/bbdb-wl.el
)を自前で用意していたのだが,これが原因らしい.
--- orig.el 2020-01-06 15:24:44.308354408 +0900
+++ new.el 2020-01-06 15:25:24.643900212 +0900
@@ -1,7 +1,7 @@
(defun bbdb/wl-header (header)
- (with-current-buffer wl-summary-buffer-name
+ (with-current-buffer wl-message-buffer-cur-summary-buffer
(elmo-message-entity-field
(elmo-message-entity wl-summary-buffer-elmo-folder
(wl-summary-message-number))
(intern (downcase header))
'string)))
3.2-7 では
のとおり bbdb-mua-auto-update
が wl-message-redisplay-hook
ではなく wl-summary-redisplay-hook
にadd-hook
されるようになったので,上記自前 bbdb/wl-header
は不要になった様子.
いつもハマるのでメモ.有線接続している NotePC を AP にする話.
有線は Realtek USB GbE Family Controller のアダプタで接続されていて,これを WiFi で共有する.WiFi のアダプタは Intel(R) Dual Band Wireless-AC 8265.
Intel(R) Dual Band Wireless-AC 8265 では Hosted Network をサポートしていなくて (See Why Hosted and Ad-Hoc Networks Are Not Working on Windows® 10)
% netsh wlan show drivers
で調べても
Hosted network supported : No
と表示される.つまり
% netsh wlan set hostednetwork mode=allow ssid=NetworkName key=YourPassword
% netsh wlan start hostednetwork
とかで有効にできない(↑上の情報がWeb上にあふれている).さて...
以下設定方法(for Windows 10 で最近の Intel WiFi Adapter の場合).
Settings → Network and Internet → Mobile hotspot
から Share my Internet connection with other devices を On にする(同じページのSSIDおよびパスワードの設定があるので,ここは適宜).
これが出来ない場合は Device Manager でおもむろに有線およびWiFi,Microsoft Wi-Fi Direct Virtual Adapter 等関連アダプタを削除して,Scan for hardware changes でデバイスを検索してデバイスを再認識する (大抵これでできるようになる).
ただこの状態だと,Client (子)側で WiFi 経由で IP Address が取得できない.そこで
Control Panel\Network and Internet\Network Connections
でアダプタ一覧を表示し,有線のアダプタの Property で Sharing Tab から
Allow other network users to connect through this computers internet connection
をチェックして,共有先として Microsoft Wi-Fi Direct Virtual Adapter のネットワーク名(Local Area Connection* 2 等)を指定する.これでつながるはず.
ひさしぶりに MHonArc (2.6.19-2) と Namazu (2.0.21-22) をつかってメール検索システム構築(対象は fml で送られてきたメール).いろいろ嵌ったのでメモ.
「mhonarcの出力ファイル名の数字を特定のフィールドから決める場当たり的改造」で紹介されているパッチをあてる.mhonarc 実行時に mhonarc -seqnumfield x-mail-count
というオプションをつける.以下念の為の 2.6.19 向け版パッチ.
diff --git a/perl/mhamain.pl b/perl/mhamain.pl
index 7af1fcc..eefca45 100644
--- a/perl/mhamain.pl
+++ b/perl/mhamain.pl
@@ -771,7 +771,7 @@ sub write_mail {
sub read_mail_header {
my $handle = shift;
my($date, $tmp, $i, $field, $value);
- my($from, $sub, $msgid, $ctype);
+ my($from, $sub, $msgid, $ctype, $seq);
local($_);
my $index = undef;
@@ -927,6 +927,14 @@ sub read_mail_header {
}
@refs = remove_dups(\@refs); # Remove duplicate msg-ids
+ ##------------------##
+ ## Get seq number ##
+ ##------------------##
+ if (defined($SEQNUMFIELD)) {
+ $seq = $fields->{$SEQNUMFIELD}[0];
+ $seq =~ s/(\d+)/$1/;
+ print STDOUT "($seq)";
+ }
##------------------##
## Get Content-Type ##
##------------------##
@@ -941,6 +949,10 @@ sub read_mail_header {
my $t = $index;
$index .= $X . sprintf('%d',(defined($msgnum)?$msgnum:($LastMsgNum+1)));
+ if (defined($SEQNUMFIELD)) {
+ $IndexNum{$index} = $seq;
+ }
+
## Set mhonarc fields. Note how values are NOT arrays.
$fields->{'x-mha-index'} = $index;
$fields->{'x-mha-message-id'} = $msgid;
@@ -970,7 +982,11 @@ sub read_mail_header {
$IndexNum{$index} = $msgnum;
++$NumOfMsgs; # Counteract decrement by delmsg
} else {
- $IndexNum{$index} = getNewMsgNum();
+ if(defined $SEQNUMFIELD) {
+ &getNewMsgNum();
+ }else{
+ $IndexNum{$index} = getNewMsgNum();
+ }
}
$Refs{$index} = [ @refs ] if (@refs);
diff --git a/perl/mhopt.pl b/perl/mhopt.pl
index 939109b..587ccab 100644
--- a/perl/mhopt.pl
+++ b/perl/mhopt.pl
@@ -221,7 +221,8 @@ sub get_resources {
'readdb', # Just read db
'v', # Version information
- 'help' # A brief usage message
+ 'help', # A brief usage message
+ 'seqnumfield=s', # Sequence number field name
);
## Check for help/version options (nothing to do)
@@ -576,6 +577,8 @@ sub get_resources {
$IdxPageNum = $opt{'pagenum'} if defined($opt{'pagenum'});
+ $SEQNUMFIELD = $opt{'seqnumfield'} if defined($opt{'seqnumfield'});
+
$AttachmentDir = $opt{'attachmentdir'} if defined($opt{'attachmentdir'});
$AttachmentUrl = $opt{'attachmenturl'} if defined($opt{'attachmenturl'});
Default だとランダムな文字列(しかも実行する度に異なる)ファイル名になる.
ということもあって MD5SUM 由来のものにする.以下パッチ.やるきなしなのでオプション切り替え不能なパッチ.ファイルが存在する場合は上書きしないことにしてある.
diff --git a/perl/mhmimetypes.pl b/perl/mhmimetypes.pl
index deb806b..c723ead 100644
--- a/perl/mhmimetypes.pl
+++ b/perl/mhmimetypes.pl
@@ -28,6 +28,7 @@
package mhonarc;
use File::Basename;
+use Digest::MD5 qw(md5_hex);
$UnknownExt = 'bin';
@@ -336,26 +337,27 @@ sub write_attachment {
$fname =~ tr/\0-\40\t\n\r?:\57\134*"'<>|\177-\377/_/;
}
- ## Write to random file first
- my($fh, $tmpfile) = file_temp($ext.'XXXXXXXXXX', $pathname, '.'.$ext);
- binmode($fh);
- print $fh $$sref;
- close($fh);
-
- ## Set pathname for file
+ my $target;
if ($fname) {
- # need to rename to desired filename
- $pathname .= $DIRSEP . $fname;
- if (!rename($tmpfile, $pathname)) {
- die qq/ERROR: Unable to rename "$tmpfile" to "$pathname": $!\n/;
- }
+ $target = $pathname . $DIRSEP . $fname;
} else {
- # just use random filename
- $pathname = $tmpfile;
- $fname = basename($tmpfile);
+ my $md5 = md5_hex($$sref);
+ $fname = $md5.".".$ext;
+ $target = $pathname . $DIRSEP . $fname;
+ }
+ if(! -e $target) {
+ ## Write to random file first
+ my($fh, $tmpfile) = file_temp($ext.'XXXXXXXXXX', $pathname, '.'.$ext);
+ $pathname = $target;
+ binmode($fh);
+ print $fh $$sref;
+ close($fh);
+ if (!rename($tmpfile, $pathname)) {
+ die qq/ERROR: Unable to rename "$tmpfile" to "$pathname": $!\n/;
+ }
+ file_chmod($pathname);
}
$url .= '/' if ($url); $url .= urlize_file_path($fname);
- file_chmod($pathname);
if ($rel_outdir) {
$pathname = $path;
なお m2h_external::filter の usename
argument (添付ファイル名をそのまま用いる,ただし日本語は_
に変換される)は活かしておく.誰も使わないだろうけど.usename
を使う場合はrcfile
に以下を書いておく(See https://www.mhonarc.org/MHonArc/doc/resources/mimeargs.html).
<MIMEArgs>
m2h_external::filter; usename
</MIMEArgs>
PDF ファイルは pdftotext で一旦テキストに変換されてインデックスされるが,日本語環境(LANG=ja_JP mknmz . -O index
とか)だと Unable to convert pdf file (maybe copying protection)
と怒られてインデックスされない.これ,Namazu の内部処理文字コードの EUC-JP に変換しようとして pdftotext のオプションの箇所でコケている(copy protection が原因ではない).
手元のpdftotext
は version 0.71.0 (poppler)なのだが,mknmz
はなぜか pdftotext -eucjp
で EUC-JP 出力をしようとする(古いやり方).これをpdftotext -enc EUC-JP
に変更する.以下パッチやるきなしなし.どこでバージョンのカウントを間違えたのだろうか?...
diff --git a/perl/pdf.pl b/perl/pdf.pl
index 5d63763..2d12946 100644
--- a/perl/pdf.pl
+++ b/perl/pdf.pl
@@ -61,12 +61,13 @@ sub status() {
if (util::islang("ja")) {
if ($pdfconvver >= 1.00) {
@pdfconvopts = ('-q', '-raw', '-enc', 'EUC-JP');
} else {
@pdfconvopts = ('-q', '-raw', '-eucjp');
}
+ @pdfconvopts = ('-q', '-raw', '-enc', 'EUC-JP');
} else {
@pdfconvopts = ('-q', '-raw');
}
if (defined $pdfinfopath) {
my @cmd = ("$pdfinfopath");
my $result = "";
というか xlhtml
って今手に入るの? 問題.xlhtml
でHTMLに変換してそれをインデックスすることになっている.
python-excelerator付属のpy_xls2html
で代用する.PATHの通っているところにxlhtml
としてシンボリックリンクを作る(これだけでOK).
Default だと UTF-8 ではなく数値文字参照(&#xXXXX;
とか)を大量に含む HTML になって極めて感じ悪い.http://www.mhonarc.jp/のMHonArc の日本語化 (for v2.6.x)を行う.具体的には以下を rcfile
に書いておく.
<Include>
/usr/share/doc/mhonarc/examples/utf-8-encode.mrc
</Include>
<DefCharset>
iso-2022-jp
</DefCharset>
<DecodeHeads>
<IdxPgBegin>
に Namazu の form
を置いておくと便利かと思ったら,Namazu に適切にクエリが渡らない.これは MHonArc が UTF-8 で Namazu が EUC-JP だから.今どき EUC-JP て...
対策は以下のように別 script (ラッパー)でクエリを一旦受け取り,それを EUC-JP に変換して namazu を呼び出すというもの.
perl で書かれているものは手元では動かず,http://www.ne.jp/asahi/music/marinkyo/namazu/utf8.html.ja の下の方にある Ruby 版を利用することにした (真ん中あたりに書いてある iconv
版は,今どきの ruby には iconv
が付属しないので注意...String#encode
を使うことになる).ほぼ同じだが以下私版.
#!/usr/bin/env ruby
require 'cgi'
cgi = CGI.new
query_str = ""
cgi.params.each{|key, values|
values.each{|a_value|
query_str += key + "=" + CGI.escape(a_value.encode("EUC-JP")) + ";"
}
}
print "Location: https://myn.example.com/namazu/?"+query_str+"\n\n"
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'cgi'
s = CGI.new.params.inject([]) do |i, (key, values)|
i + values.map { |j| "#{key}=#{CGI.escape(j.encode('EUC-JP'))}" }
end.join(';')
print "Location: https://myn.example.com/namazu/?#{s}\n\n"
MHonArc では -add
オプションにより,追加されたファイルのみ処理するモードがある.ただし以下でコケる.
% mhonarc -rcfile mhonarc.rc -outdir output -seqnumfield x-mail-count archive -add
This is MHonArc v2.6.19+, Perl 5.028001 linux
Reading database ...
Can't locate output/.mhonarc.db in @INC (@INC contains: lib /usr/share/mhonarc /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/mhonarc/mhopt.pl line 401.
もうやるきなしなので,以下で @INC に .
を追加して MHonArc 実行.
% perl -I. `which mhonarc` -rcfile mhonarc.rc -outdir output -seqnumfield x-mail-count archive -add
Namazu で PDF が検索対象にならない (pdftotext オプション問題)同様pdfinfo
のオプションにも問題がある.手元の環境 pdfinfo version 0.71.0
だが,適切な option (EUC出力する...)をつけるためには 2.02
以上が要求される様子.以下やるきなしなしパッチ.
--- /usr/share/namazu/filter/pdf.pl.0 2020-10-20 12:37:23.047777984 +0900
+++ /usr/share/namazu/filter/pdf.pl 2020-10-20 12:32:43.196339697 +0900
@@ -82,20 +82,21 @@
);
if ($result =~ /^pdfinfo\s+version\s+([0-9]+\.[0-9]+)/) {
$pdfinfover = $1;
}
if (util::islang("ja")) {
if ($pdfinfover >= 2.02) {
@pdfinfoopts = ('-enc', 'EUC-JP');
} else {
@pdfinfoopts = ();
}
+ @pdfinfoopts = ('-enc', 'EUC-JP');
} else {
@pdfinfoopts = ();
}
}
return 'yes';
}
return 'no';
}
sub recursive() {
以下の nvidia のドライバが Linux 5.4 でコンパイルできない話.
まず以下のエラー.
The Module.symvers file is missing, or does not contain any
symbols exported from the kernel. This could cause the NVIDIA
kernel modules to be built against a configuration that does
not accurately reflect the actual target kernel.
The Module.symvers file check can be disabled by setting the
environment variable IGNORE_MISSING_MODULE_SYMVERS to 1.
これは modpost: add support for symbol namespaces で Module.symvers
に1つエントリ(namespace)が追加されたことによる.conftest.sh
で Module.symvers
の symbol をチェックするがその箇所はただの grep
なので影響なし.IGNORE_MISSING_MODULE_SYMVERS=1
にしても問題ないが conftest.sh
を修正する.
次,以下のエラー.
In file included from /var/lib/dkms/nvidia-current/418.74/build/nvidia/nv.c:14:
/var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-linux.h:1852:6: error: "NV_BUILD_MODULE_INSTANCES" is not defined, evaluates to 0 [-Werror=undef]
#if (NV_BUILD_MODULE_INSTANCES != 0)
^~~~~~~~~~~~~~~~~~~~~~~~~
これ,なに由来のエラーか不明.NV_BUILD_MODULE_INSTANCES = 0
で問題ないはずなので,Kbuild
ファイルで define してしまう.
次,以下のエラー.
/var/lib/dkms/nvidia-current/418.74/build/nvidia-drm/nvidia-drm-drv.c:657:44: error: ‘DRIVER_PRIME’ undeclared here (not in a function); did you mean ‘DRIVER_PCI_DMA’?
.driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
^~~~~~~~~~~~
DRIVER_PCI_DMA
これは drm/prime: Actually remove DRIVER_PRIME everywhereでDRIVER_PRIME
が削除されたことによる.削除する.
次,以下のエラー.
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c: In function ‘nv_drm_gem_prime_export’:
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:33: error: passing argument 1 of ‘drm_gem_prime_export’ from incomp
atible pointer type [-Werror=incompatible-pointer-types]
return drm_gem_prime_export(dev, gem, flags);
^~~
In file included from ./include/drm/drmP.h:75,
from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: expected ‘struct drm_gem_object *’ but argument is of type ‘struct drm_device *’
struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:38: warning: passing argument 2 of ‘drm_gem_prime_export’ makes int
eger from pointer without a cast [-Wint-conversion]
return drm_gem_prime_export(dev, gem, flags);
^~~
In file included from ./include/drm/drmP.h:75,
from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: expected ‘int’ but argument is of type ‘struct drm_gem_object *’
struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:12: error: too many arguments to function ‘drm_gem_prime_export’
return drm_gem_prime_export(dev, gem, flags);
^~~~~~~~~~~~~~~~~~~~
In file included from ./include/drm/drmP.h:75,
from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: declared here
struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
^~~~~~~~~~~~~~~~~~~~
これdrm/prime: Align gem_prime_export with obj_funcs.exportによりdrm_gem_prime_export
の引数が変更になった(3つの引数のうち1つ目が削除された)ことが原因.
以下まとめてパッチ.ただし5.3でコンパイルするためのパッチがあたっていることを想定.
diff --git a/Kbuild b/Kbuild
index 6a65185..ff3417c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -62,6 +62,7 @@ EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"418.74\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE
EXTRA_CFLAGS += $(call cc-option,-Werror=undef,)
EXTRA_CFLAGS += -DNV_SPECTRE_V2=$(NV_SPECTRE_V2)
+EXTRA_CFLAGS += -DNV_BUILD_MODULE_INSTANCES=0
#
# Detect SGI UV systems and apply system-specific optimizations.
diff --git a/conftest.sh b/conftest.sh
index d17ba21..087fda5 100644
--- a/conftest.sh
+++ b/conftest.sh
@@ -3708,7 +3708,7 @@ case "$6" in
TAB=' '
if [ -f "$OUTPUT/Module.symvers" ] && \
- grep -e "^[^${TAB}]*${TAB}[^${TAB}]*${TAB}vmlinux" \
+ grep -e "^[^${TAB}]*${TAB}[^${TAB}]*${TAB}[^${TAB}]*${TAB}vmlinux" \
"$OUTPUT/Module.symvers" >/dev/null 2>&1; then
exit 0
fi
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 6ec01f4..18cf167 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -654,7 +654,7 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
static struct drm_driver nv_drm_driver = {
- .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
+ .driver_features = DRIVER_GEM | DRIVER_RENDER,
.gem_free_object = nv_drm_gem_free,
diff --git a/Kbuild b/Kbuild
index 0665f50..992a48c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -61,6 +61,7 @@ EXTRA_CFLAGS += -I$(src)
EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wsign-compare -Wno-cast-qual -Wno-error
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"390.116\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE -Wno-sign-compare -Wno-format-extra-args
EXTRA_CFLAGS += $(call cc-option,-Werror=undef,)
+EXTRA_CFLAGS += -DNV_BUILD_MODULE_INSTANCES=0
#
# Detect SGI UV systems and apply system-specific optimizations.
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 90ce30b..d9f3961 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -634,7 +634,7 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
static struct drm_driver nv_drm_driver = {
- .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
+ .driver_features = DRIVER_GEM | DRIVER_RENDER,
.gem_free_object = nv_drm_gem_free,
diff --git a/nvidia-drm/nvidia-drm-gem.c b/nvidia-drm/nvidia-drm-gem.c
index 3d51196..addff14 100644
--- a/nvidia-drm/nvidia-drm-gem.c
+++ b/nvidia-drm/nvidia-drm-gem.c
@@ -46,10 +46,9 @@ void nv_drm_gem_free(struct drm_gem_object *gem)
nv_gem->ops->free(nv_gem);
}
-
-struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
- struct drm_gem_object *gem, int flags)
+struct dma_buf *nv_drm_gem_prime_export(struct drm_gem_object *gem, int flags)
{
+ struct drm_device *dev = gem->dev;
struct nv_drm_device *nv_dev = to_nv_device(dev);
struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem);
@@ -61,7 +60,7 @@ struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
return ERR_PTR(-EINVAL);
}
- return drm_gem_prime_export(dev, gem, flags);
+ return drm_gem_prime_export(gem, flags);
}
struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem)
diff --git a/nvidia-drm/nvidia-drm-gem.h b/nvidia-drm/nvidia-drm-gem.h
index c3cb875..c4da335 100644
--- a/nvidia-drm/nvidia-drm-gem.h
+++ b/nvidia-drm/nvidia-drm-gem.h
@@ -156,8 +156,7 @@ done:
void nv_drm_gem_free(struct drm_gem_object *gem);
-struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
- struct drm_gem_object *gem, int flags);
+struct dma_buf *nv_drm_gem_prime_export(struct drm_gem_object *gem, int flags);
static inline struct nv_drm_gem_object *nv_drm_gem_object_lookup(
struct drm_device *dev,
薄々気づいていたのだが,手元の Debian on WSL with VcXsrv で「半角/全角 漢字」キーのキーリピートがおかしい.日本語キーボードを無理やり英語キーボードとしてつかっているため,「半角/全角 漢字」キーは ` (Shiftで ~ )に割り当てられるのだが,一度押すだけで,位置文字 ` が入力された後に連続で ` が入力される.` を打ったあとに間髪入れずに他のキーを押すと問題ない...
これ,X の設定で解決できて,手元の環境ではxset -r 49
で直る (もとのキーリピートにするにはxset r 49
とする.しないけど).49は「半角/全角 漢字」キーのkeycode.xev
等で調べられる.
参考:
ScanSnap S1500 をずっと使っていたのだが,先日 ScanSnap iX1500 を購入.
Windows 10 で ScanSnap S1500 (USB接続のみ)を使う場合,何故か PC Hibernate/Resume 後に ScanSnap Manager (ドライバに近いところのソフトで,S1500 で取り込みボタンを押すと,プロファイルに従ってスキャン開始し,適切なソフトに取り込んだデータを送ってくれる) が ScanSnap S1500 を認識してくれない状態になってしまう (Device Manager で見た感じ ScanSnap S1500 自体は Windows 10 に認識はされている).仕方なく S1500 を使う時は再起動していた...
で,iX1500 だが,管理ソフトは Windows/Android 両方ある.
ScanSnap Cloud は iX1500 から直接 Google Drive 等に送るような使い方が想定されている様子(一旦設定してしまうと iX1500 単体でクラウドにデータを送ることができるようになる).ScanSnap Home は S1500 での ScanSnap Organizer のような位置づけで,スキャンした PDF を管理できるソフト (スキャン開始は PC からでも iX1500 のパネルからでも,どちらからでも可能).ScanSnap Home でもクラウドにデータが送れるが,これは一旦 PC に保存して,それを Google Download Backup and Sync 等の同期機能で Google Drive に送る感じ.
Could との連携やライセンスのこともあって,ScanSnap Account を作らされるが,これ,私の Android (英語で使用)だと国が United States になってしまい,Windows 10 (こちらも英語で利用)は Japan (日本)になってしまう.かつ,それらのアカウントは別扱いになっている様子で,かなり悩んだ...(オンラインゲームで使うサーバ毎にアカウントが別みたいな...)
あと,英語インタフェースで使っているのだが,説明書もそうだが,日本語版がオリジナルのようで,英単語のチョイスが極めて悪く,使い勝手が非常に悪い(それの逆の理由でOSは英語で使っている).
以下,ScanSnap Home メモ.
ということで,基本はクラウドに送る感じで利用予定.
書き忘れたが,当然 ScanSnap S1500 に比べて iX1500 の方が読み取り速度が早く,かつ OCR については,以前は Organizer に取り込んで OCR を待つ感じだったが,クラウドに送るともうその時点で OCR がかかっている.
ScanSnap Home で名刺を取り込むと OS が英語モードだと日本語のOCRをしてくれない...
Twitter はユーザー名(@以降の部分)変更が容易に可能ということを知る.Webではログインした状態で,以下のように辿ると変更可能.
表示名は以下のように Edit profile から変更.
なお,ユーザー名を変更すると変更前のリンク https://twitter.com/username
は無効になって,かつ @username のメンションもリンクされなくなる.
というのは,ちょっと中の人を担当していたアカウントのユーザー名変更をすることがあったのだが,いろいろ怖いので,ユーザー名を変更したあとに,古いユーザー名で再度ユーザー登録し,新ユーザー名への誘導 Tweet をしておいた(というのが無難な対応っぽい).
ちなみにメールアドレス1つに付きTwitterアカウントは1つしか作成できないので,Gmail のサブアドレス(@gmail.com の @ の前に +example
等任意の文字列追加)を利用する(Postfix では拡張メールアドレスとか address extension と呼ばれるもの,もしくは RFC 5233).
2017年11月から SoftBank の HTC U11 を利用しているのだが,主に酔っ払って落とすからなのだが,ガラスにかなりひびが入った状態になっていて,先日そのひび割れの箇所で指を若干切ったこともあって,修理を検討.指を切ったときはホテルだったので,ホテルで絆創膏をもらったぐらいには血が出た...
大昔に(へたった)バッテリー交換のことを考えると「あんしん保証パック」に入っておいたほうが良いとか友人に勧められていたこともあって,それを使って修理に出すことにした.My SoftBank から修理依頼.
https://www.softbank.jp/mobile/special/repair-smartphone/ から最適手続きのシミュレーションが可能で,選択肢は以下.
土曜日夜中に申し込んで月曜日に代替機着かつ修理の引取,という感じ.思っていたより早い.
代替機については時間指定ができない様子で,一方の引取りは時間指定可能だった.Web には代替機は引取りとは別便との記載があって,ちょっと代替機は引取りより早めに届くと良いなとおもって,引取りの時間指定は最終(19:00-21:00)にしていたのだが,代替機が佐川便で届いたのが 18:00 で,かつ引取りも佐川だったはずなので佐川の人に聞いたら,確かなにかあったようなと言っていたので,佐川車の中を確認してもらってその場で引き取ってもらった.
代替機は同機種(HTC U11)の色違いで,SIMカード差し替えてそのまま使えている.ただし以下.
ちょっと困ったのが『Google Authenticator』.これがないと AWS と Mailgun にログインできないことが本体引取り後...に気づいて,悩む.
AWS については AWS Multi-Factor Authentication (MFA) の削除が必要で,メールアドレスと電話番号が正しく登録されていれば自身で Web から削除可能.ただ,登録していた電話番号が古いもので,フォームから入力のうえ AWS のスタッフに助けてもらった.直ぐに米国から電話が掛かってきて,今からメール送るからそこに書かれているコードを読むように言われて,読んだら MFA を削除してくれて,ログイン試してみろと言われて,2FA なしでログインできるようになった(なんだか英語が相当聞きづらかったけど...).その後フォローアップメールが届いて,最新情報にアップデートするように書かれていた...
Mailgun については Paper Key があれば自身でなんとかできるらしいがそれを保存しておらず,サポートにメールで連絡.1日後ぐらいに verify.example.com (example.com は所持しているドメインを想定)の CNAME に mailgun.org を追加するよう指示があり,設定した旨伝えたら二要素認証 (2FA; Two-factor Authentication)を解除してくれた.
AWS/Mailgunともログインできる状態だとMFA/2FAを解除可能で,機種変更の際新旧デバイス両方利用できるようであれば,解除して新しい Authenticator を登録することが可能.
以下タイミングまとめ.
思っていたより早く修理された.代替機から修理済機への以降は同じ手順.費用は修理代金 30,240円(8%税込)で,会員割引が適用されて1,296円(8%税込み).
ちなみに Android 9 (pie) にアップデートされて帰ってきた.
手元の Debian on WSL with VcXsrv の gnome-terminal で ctrl-s すると固まる(ctrl-q で復帰).stty -a
によると以下のような感じで stop に割り当てられている.
% stty -a
speed 38400 baud; rows 32; columns 140; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
いつからこうなったのか不明.ターミナル内で Emacs を起動(emacs -nw
)する際に C-s
によるインクリメンタルサーチが出来ず非常に困る.以下で stop
を undef する(ついでに C-q の start
も undef).
% stty stop undef
% stty start undef
Windows から WSL の Debian を起動する際に現れる Windows のコンソールではこの問題は発生しない様子(stty -a
では stop/start が C-s/C-q に割り当てられているが).
Linux 5.4-rc1 がでたので,.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-54-features&num=1 参照.
+CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_ARCH_CPUIDLE_HALTPOLL=y
cpuidle-haltpoll: disable host side polling when kvm virtualized
KVM_GUEST
で select される.
+CONFIG_HALTPOLL_CPUIDLE=y
m
にしておく.
+CONFIG_HAVE_ASM_MODVERSIONS=y
+CONFIG_ASM_MODVERSIONS=y
kbuild: add CONFIG_ASM_MODVERSIONS
x86 で select される.
+CONFIG_NET_VENDOR_PENSANDO=y
ionic: Add basic framework for IONIC Network device driver
Pensando Systems の IONIC Network device driver.使わないのでn
にする.
+CONFIG_VIDEO_V4L2_I2C=y
media: v4l2-core: move i2c helpers out of v4l2-common.c
V4L2 の I2C 関連が v4l2-common.c
から v4l2-i2c.c
に分離された.y
のままにしておく.
+CONFIG_SND_INTEL_NHLT=m
ALSA: hda: move parts of NHLT code to new module
手元ではSND_HDA_INTEL [=m] && SOUND [=m] && !UML && SND [=m] && SND_PCI [=y] && ACPI [=y]
でm
になっていた.
+CONFIG_CRYPTO_ESSIV=m
dm crypt: switch to ESSIV crypto API template
crypto: essiv - create wrapper template for ESSIV generation
DM_CRYPT
がCRYPTO_ESSIV
をselect.Encrypted salt-sector initialization vector (ESSIV).
+CONFIG_CRYPTO_LIB_SHA256=y
crypto: sha256_generic - Switch to the generic lib/crypto/sha256.c lib code
CRYPTO_SHA256
がCRYPTO_LIB_SHA256
をselect.CRYPTO_SHA256
が手元では y になっていて,これは CRYPTO_SHA256_SSSE3 [=y] && CRYPTO [=y] && X86 [=y] && 64BIT [=y]
でselectされていた.
CRYPTO_SHA256_SSSE3=m
CRYPTO_SHA256=m
CONFIG_CRYPTO_LIB_SHA256=m
CONFIG_KEXEC_FILE=y
が CRYPTO_SHA256=y
に依存するので,KEXEC 関連まるごと n にする.
+CONFIG_CRYPTO_LIB_AES=y
crypto: aes-generic - drop key expansion routine in favor of library version
CRYPTO_AES=y
でselectされていた.CRYPTO_AES=m
にしてm
に.
+CONFIG_CRYPTO_LIB_DES=y
crypto: des - split off DES library from generic DES cipher driver
CRYPTO_DES=y
でselectされていた.CRYPTO_DES=m
にしてm
に.
-CONFIG_IWLWIFI_PCIE_RTPM=y
-CONFIG_CRYPTO_AES_X86_64=m
CONFIG_UNUSED_SYMBOLS=y
module: move CONFIG_UNUSED_SYMBOLS to the sub-menu of MODULES
lib/Kconfig.debug
から init/Kconfig
に移動した.ついでに CONFIG_UNUSED_SYMBOLS=n
する.CONFIG_TRIM_UNUSED_KSYMS=y
にして更に最適化を進めることも考えられるが,外部モジュールが compile できなくなるといやなので,ひとまず CONFIG_TRIM_UNUSED_KSYMS=n
のまま.
Linux 5.4 がでたので再確認.
+CONFIG_X86_INTEL_TSX_MODE_OFF=y
x86/cpu: Add a “tsx=” cmdline option with TSX disabled by default
x86/tsx: Add config options to set tsx=on|off|auto
TSX (Transactional Synchronization Extensions) および TSX Async Abort (TAA) vulnerability 関連.Default は TSX の機能自体を無効化するもの (未知の脆弱性があるかもしれないとのことで).
悪意のあるユーザが存在しないと仮定しても問題ないシステムなので,CONFIG_X86_INTEL_TSX_MODE_ON=y
にする.
-CONFIG_DIMLIB=y
net: ethernet: broadcom: have drivers select DIMLIB as needed
Generic Network Dynamic Interrupt Moderation 関連.手元では NET_VENDOR_BROADCOM
で select されていたが,必要に応じて select されるようになった.
随分前に開発が止まった qtranslate の代替として mqtranslate を利用したり,その開発も止まって qTranslate-X を利用したりしていたのだが,qTranslate-X も開発が止まっているらしい.
2019/9/1 9:53 / WordPress on Debian 10でも書いたとおりパッチが必要だったり,PHP 7.3.9-1~deb10u1 環境だと更に以下のワーニングも出る.WP-CLIを利用して気付いた.
PHP Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /somewhere/wp-content/plugins/qtranslate-x/qtranslate_frontend.php on line 497
case
文中の continue
を break
に置き換えれば済む話だが,qTranslate-X を引き継いで開発が進められている qTranslate-XT (eXTended) に移行することにした.ただし /wp-admin/
(WordPress の Web I/F) からだとプラグインが見つけられず,自前で/somewhere/wp-content/plugins/qtranslate-xt/
に配置(zipを展開するかgit clone
)する必要がある.
2013年頃から使っていた自転車のライト,CAT EYE HL-EL130 が壊れてしまった.ブラケットにカチッと固定する部分がプラスチックで,それがもうきっちり嵌らなくなったと言うかすぐに取れてしまう状態になっていて,走っているうちに落としてしまい点かなくなった.ちなみに CAT EYE 製造なのだがCBA (サイクルベースアサヒ)ブランドの同等品.
ということで,明るめ・充電式・そこまで高くない CAT EYE VOLT200 HL-EL151RC を購入.明るくなってよいのだが,点滅モードも明るいままなので,結構チカチカうざい.あと点滅が少し遅い気がする.ちなみにブラケットは共通なので前のものをそのまま利用(新しいライトに付属しているものは保存).
Google Search Console から以下のようなメールが届いた.
Google has started validating your fix of Breadcrumbs issues on your site. Specifically, we are checking for ‘Missing field “itemListElement”’, which currently affects 143 pages.
WordPress で Breadcrumb NavXTというプラグインを利用しているサイトに関する Validation Report で,古い Breadcrumb NavXT の Default のテンプレートのままだったのが原因.その Default はたぶん以下.
<span typeof="v:Breadcrumb"><a rel="v:url" property="v:title" title="Go to %title%." href="%link%" class="%type%">%htitle%</a></span>
これ,本来は以下のようになっているべき(class.bcn_breadcrumb.php
のget_default_template
という関数で作られる様子).
<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to %title%." href="%link%" class="%type%" ><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>
ただ,このテンプレートを一括設定できる箇所がない.Settings → Breadcrumb NavXT でジャストなものを見つけられず,Home へのリンク向け等特別な場合のテンプレートは設定可能な様子で,それらも古い Default になっていて,さらに全てプラグインの Default に設定することも不可の様子.
ということで,一旦 Breadcrumb NavXT を Deactivate して,Delete して,再度インストールしたらプラグインの Default に設定された.これでしばらく様子見.
これで直らなかったら mysql に保存されている Breadcrumb NavXT 関連の設定を削除するなどを考えていたが,アンインストールすれば設定も削除される様子.ちなみに WordPress の options のテーブルの option_name = bcn_options
というレコードに保存されている(uninstall.php
で削除される).
以下の nvidia のドライバが Linux 5.3 でコンパイルできない話.
具体的には以下のエラー.
In file included from /var/lib/dkms/nvidia-current/418.74/build/nvidia/nv_uvm_interface.c:21:
/var/lib/dkms/nvidia-current/418.74/build/nvidia/nv_uvm_interface.c: In function ‘nvUvmInterfaceDeRegisterUvmOps’:
/var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-linux.h:733:21: error: void value not ignored as it ought to be
int __ret = on_each_cpu(func, info, 1); \
^~~~~~~~~~~
/var/lib/dkms/nvidia-current/418.74/build/nvidia/nv_uvm_interface.c:991:5: note: in expansion of macro ‘NV_ON_EACH_CPU’
NV_ON_EACH_CPU(flush_top_half, NULL);
^~~~~~~~~~~~~~
これは smp: Remove smp_call_function() and on_each_cpu() return values で on_each_cpu
が値を返さなくなったということなので,マクロでダミーの正常時の戻り値を作ってしまえばOK.以下パッチ.nvidia-legacy-390xx-kernel-dkms
も同様.
--- a/common/inc/nv-linux.h
+++ b/common/inc/nv-linux.h
@@ -730,8 +730,8 @@ static inline void nv_vunmap(NvUPtr vaddr, NvU32 page_count)
#elif (NV_ON_EACH_CPU_ARGUMENT_COUNT == 3)
#define NV_ON_EACH_CPU(func, info) \
({ \
- int __ret = on_each_cpu(func, info, 1); \
- __ret; \
+ on_each_cpu(func, info, 1); \
+ 0; \
})
#else
#error "NV_ON_EACH_CPU_ARGUMENT_COUNT value unrecognized!"
ヤマト運輸(クロネコヤマト)のインターネットからの申込みによる当日再配達受付時間(期限),なんとなく18:00だと思っていたが,17:40だった.http://www.kuronekoyamato.co.jp/ytc/info/info_180903.html によるともともとは18:40までだったところ,2018年9月に17:40になった模様.仕方なくドライバーに電話(この場合19:00まで).
インターネットで再配達依頼しようとしたら「以降在宅」という選択肢があったので,18:00までに帰宅できるから帰ってからでいいやと思って,帰宅後インターネットから再配達依頼しようとしたら,そもそも「当日」が選べなくて凹んだ...
というか宅配ボックス使ってくれたら良かったのに(ということで時間指定していなかったのだが),入らなかなったのか空きがなかったのだろうか...宅配ボックス頼みもアレ.
MegaRAID SAS の状況を monitoring する package である megaclisas-status
を導入.http://hwraid.le-vert.net/wiki/DebianPackages のとおり /etc/apt/sources.list
を修正して,https://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key を apt-key add
して,megaclisas-status
を入れるだけ.あとは sudo megaclisas-status
で status が確認できる.
/etc/init.d/megaclisas-statusd
自体が daemon になっていて,
MAILTO=root # Where to report problems
PERIOD=600 # Seconds between each check (default 10 minutes)
REMIND=7200 # Seconds between each reminder (default 2 hours)
となっていて,10分毎にチェック,non-optimal RAID status になると2時間おきに root
宛に mail
コマンドでリマインドメール送付,となっている.ただ,mail
が mailutils
由来の mail
だと,root@hostname にメールを送ろうとして,プライベートネットワークで postfix
を Internet with smarthost
の設定(外部のmail serverに全転送)で運用しているとメールが消える.ということで mailutils
のかわりに bsd-mailx
を install して,その mail
コマンドを利用するようにする.
/etc/init.d/megaclisas-statusd
が /usr/sbin/sendmail
を叩いてくれたらいいのに...
OpenVPN が以下のエラーを吐いて起動しない問題発生.
Sep 1 00:00:30 XXX ovpn-vpn_server[XXXX]: WARNING: POTENTIALLY DANGEROUS OPTION --verify-client-cert none|optional (or --client-cert-not-required) may accept clients which do not present a certificate
Sep 1 00:00:30 XXX ovpn-vpn_server[XXXX]: OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Sep 1 00:00:30 XXX ovpn-vpn_server[XXXX]: library versions: OpenSSL 1.1.1c 28 May 2019, LZO 2.10
Sep 1 00:00:30 XXX ovpn-vpn_server[XXXX]: PLUGIN_INIT: POST openvpn-plugin-auth-pam.so '[openvpn-plugin-auth-pam.so] [openvpn]' intercepted=PLUGIN_AUTH_USER_PASS_VERIFY
Sep 1 00:00:30 XXX ovpn-vpn_server[XXXX]: OpenSSL: error:1408518A:SSL routines:ssl3_ctx_ctrl:dh key too small
Sep 1 00:00:30 XXX ovpn-vpn_server[XXXX]: SSL_CTX_set_tmp_dh
Sep 1 00:00:30 XXX ovpn-vpn_server[XXXX]: Exiting due to fatal error
dh key too small
ということで,DH 鍵交換(Diffie-Hellman key exchange)のビット数が少なく落ちてしまっている様子.1024ビットで使用していた.以下の通り2048ビットで生成したパラメタファイルを生成し,
% sudo openssl dhparam -out /etc/openvpn/dh2048.pem 2048
/etc/openvpn/hoge.conf
等設定ファイルで dh1024.pem
を使っている場合は,以下の通り dh2048.pem
に変更.
-dh dh1024.pem
+dh dh2048.pem
キーボードの設定は様々なレイヤがあってややこしいのだが,今回は X server というか Windows 版 X server である VcXsrv + WSL 環境での話.もっとハードウェアに近いところでの変更は当然 Windows 任せになるので(udev 使えない),X 上でキーマップを変更する.具体的には日本語キーボードをむりやり英語配列として使う場合に効かなくなる以下のいわゆる dead keys をなんとかしたいということ.
\
,Shift の場合はバー|
).日本語キーボードの]
がこれの代替になるが,もとのキーも使いたい.\
,Shift の場合はバー_
)._
は日本語キーボードで Shift + -
がこれの代替になるが,もとのキーも使いたい.xev
でまず keycode を調べる.よりハードウェアに近いレイヤに依存するので環境によっていろいろ変わる.手元(Windows を英語キーボードモードにした状態で VcXsrv を起動) では以下だった.
あとは以下実行するだけ.
% xmodmap -e "keycode 133 = backslash bar"
% xmodmap -e 'keycode 211 = backslash underscore'
hdparm -t /dev/sda
で 75.84 MB/sec).古くて遅いシステムは悪.btrfs
なのでファイルシステムをダンプして移植するというのも可能だが,それも失敗やら手戻りが怖いのでrsync
).dist-upgrade
やらをしていたが https://www.debian.org/releases/stable/amd64/release-notes/ch-upgrading.ja.html#minimal-upgradeによるとapt-get upgrade
で最小限アップグレードをして,その後apt full-upgrade
でシステムアップグレードするのが良いらしい.Debian 10 に上げた機会に MediaWiki も 1.30 から 1.33 に上げる.以下メモ.
MediaWiki は git clone しているので,git fetch, git checkout -b REL1_33_local REL1_33 して REL1_33 に対して設定を加えていく.
extensions/
以下の各 extension も REL1_33 に上げる.
composer.json
がある vendor/
,extensions/Elastica/
,extensions/CirrusSearch/
に関しては各 directory でcomposer update --no-dev
して依存解決しなければ動かなかった(他は今回の場合そのままで問題なかった).
maintanaice/
で php update.php
実行.
LocalSetting.php
を調整.require_once "$IP/extensions/XXX/XXX.php";
を wfLoadExtension( 'XXX' );
に修正する必要があるものがちらほら.
https://www.mediawiki.org/wiki/Extension:CirrusSearch によると
MediaWiki 1.33.x requires ElasticSearch 6.5.x.
とのことだが 6.x で OK.6.8 で動作確認.
ElasticSearch の Index 生成は https://phabricator.wikimedia.org/diffusion/ECIR/browse/master/README のとおり以下実行.以前にも書いたがElasticsearchが保持するデータは/var/lib/elasticsearch/
にある.
cd extensions/CirrusSearch/maintenance/updateSearchIndexConfig.php
php updateSearchIndexConfig.php
php forceSearchIndex.php --skipLinks --indexOnSkip
php forceSearchIndex.php --skipParse
Debian を stretch (Debian 9) から buster (Debian 10)にあげたら apache が以下のようなWarningを吐くようになった.
[Sat Aug 31 20:XX:XX.XXXXXX 2019] [php7:warn] [pid 23XX] [client XXX.XX.XXX.XX:XXXXXX] PHP Warning: Parameter 2 to qtranxf_postsFilter() expected to be a reference, value given in /var/www/wp-includes/class-wp-hook.php on line 286
これは qtranslate-x
の問題で,https://wordpress.org/support/topic/problem-with-php-7-1-2/ によると以下のように &$query
の &
を取り除けば良いらしい.
diff --git a/wp-content/plugins/qtranslate-x/qtranslate_frontend.php b/wp-content/plugins/qtranslate-x/qtranslate_frontend.php
index 64df38f9..461ce94e 100644
--- a/wp-content/plugins/qtranslate-x/qtranslate_frontend.php
+++ b/wp-content/plugins/qtranslate-x/qtranslate_frontend.php
@@ -520,7 +520,7 @@ function qtranxf_translate_post($post,$lang) {
}
}
-function qtranxf_postsFilter($posts,&$query) {//WP_Query
+function qtranxf_postsFilter($posts,$query) {//WP_Query
global $q_config;
//qtranxf_dbg_log('qtranxf_postsFilter: $posts: ',$posts);
//$post->post_content = qtranxf_useCurrentLanguageIfNotFoundShowAvailable($post->post_content);
@@ -543,7 +543,7 @@ function qtranxf_postsFilter($posts,&$query) {//WP_Query
add_filter('the_posts', 'qtranxf_postsFilter', 5, 2);
/** allow all filters within WP_Query - many other add_filters may not be needed now? */
-function qtranxf_pre_get_posts( &$query ) {//WP_Query
+function qtranxf_pre_get_posts( $query ) {//WP_Query
//qtranxf_dbg_log('qtranxf_pre_get_posts: $query: ',$query);
//'post_type'
if(isset($query->query_vars['post_type'])){
先月オーランドに行ったメモ.
RStudio Desktop (Free)はDebian 9版までしか現状なくて,Debian 10 (buster)では以下の様に libssl.so.1.0.2
が存在せず起動できない.
% rstudio
rstudio: error while loading shared libraries: libssl.so.1.0.2: cannot open shared object file: No such file or directory
libssl.so.1.0.2
は package libssl1.0.2
(stretch でのみ存在)で提供されていて,これを入れると解決する.
% wget http://security.debian.org/debian-security/pool/updates/main/o/openssl1.0/libssl1.0.2_1.0.2s-1~deb9u1_amd64.deb
% sudo dpkg -i libssl1.0.2_1.0.2s-1~deb9u1_amd64.deb
Wanderlust で複数メッセージを * でマークして,m f でまとめて転送しようとすると,以下の様に怒られて1件目しか draft バッファに入ってくれない.
wl-summary-redisplay-internal: ‘recenter’ing a window that does not display current-buffer.
wl-summary-redisplay-internal
の以下の箇所でコケているっぽい.
(when wl-summary-recenter
(recenter (/ (- (window-height) 2) 2))
(if (not wl-summary-indent-length-limit)
(wl-horizontal-recenter)))
あまり深追いせずに ~/.wl に以下を書いておく.
(setq wl-summary-recenter nil)
Info による変数の説明は以下の通り.
`wl-summary-recenter'
初期設定は `t'。Non-nil ならば表示したときに表示中のメッセージのサ
マリ行をウィンドウの中央付近に移動します。
今まで気にしたこと無いし,nil にしたところで挙動が変わらないような気もする.
WSL (Windows Subsystem for Linux)(Debian 9)導入のメモ.様々なことができるようになるつつあり便利なので,手元以外の他の計算機でも導入したので,そのメモ.まず WSL を有効にする.https://docs.microsoft.com/en-us/windows/wsl/install-win10 参照.以下を管理者権限の PowerShell で実行.再起動.
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
あとは,Store から Debian を検索して Install/Launch.以下の様な感じで Shell が立ち上がって終了.
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: myn
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
myn@example:~$ id
uid=1000(myn) gid=1000(myn) groups=1000(myn),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)
まず gid (primary group)が username で感じ悪いと言うか落ち着かないので,100(users) に変更する.
myn@example:~$ sudo usermod -gusers myn
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for myn:
上記,usermod -Gusers myn
だと groups=100(users) のみになって,sudo
group から抜けてしまい,sudo
できなくなるので注意(一回間違えてやってしまい,一旦 Debian を削除して,再度 Install した).
一旦窓を閉じて再度 Debian を起動し以下確認.ついでにいちいち sudo で password 入力するのが面倒なのでvisudo
でNOPASSWD
にする.
myn@example:~$ id
uid=1000(myn) gid=100(users) groups=100(users),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)
myn@example:~$ sudo sh -c 'EDITOR=vi visudo'
-%sudo ALL=(ALL:ALL) ALL
+%sudo ALL=(ALL:ALL) NOPASSWD: ALL
Default の umask が 000 で落ち着かないので,umask 022
する...
ひとまず package を upgrade して zsh
と git
を入れる./usr/bin/zsh
に切り替えて窓立ち上げ直し.
myn@example:~$ sudo apt update
myn@example:~$ sudo apt upgrade
myn@example:~$ sudo apt install zsh git
myn@example:~$ chsh
Password:
Changing the login shell for myn
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]: /usr/bin/zsh
おもむろに sid に上げる.
myn@example:~$ echo deb http://deb.debian.org/debian unstable main | sudo tee /etc/apt/sources.list
myn@example:~$ sudo apt update
myn@example:~$ sudo apt dist-upgrade
使用している zsh
が混乱した状態になるので,窓立ち上げ直し.ここから git
で設定ファイル等を他から持ってくるのだが,ssh
が必要になるので,key-pairs を copy してくる.
% rsync -avz remote:.ssh/ .ssh/
myn@remote's password:
% ssh-agent screen
% ssh-add
あとは自身管理で git に入れている,必要 package を install したり各種設定をする謹製 script を実行.時間を喰うので,その間に Windows 用 Xserver である VcXsrv (現時点では vcxsrv-64.1.20.1.4.installer.exe
が最新) を install.
他メモ.
\\wsl$\Debian\
でアクセス.Linux から % explorer.exe .
とかすると,カレントディレクトリでエクスプローラーが開く.Linux 5.3-rc1 がでたので,.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-53-features&num=1 参照.
+CONFIG_CC_CAN_LINK=y
+CONFIG_CPU_SUP_ZHAOXIN=y
x86/cpu: Create Zhaoxin processors architecture support file
Zhaoxinサポート.不要なのでn
に.
+CONFIG_HAVE_KVM_NO_POLL=y
KVM: polling: add architecture backend to disable polling
kvm: x86: add host poll control msrs
KVM
でselectされる.
+CONFIG_FW_LOADER_PAGED_BUF=y
firmware: Add support for loading compressed files
FW_LOADER_USER_HELPER
でselectされる.compressed firmware supportは CONFIG_FW_LOADER_COMPRESS
で有効になるが,ひとまず無効のまま.
+CONFIG_NET_VENDOR_GOOGLE=y
gve: Add basic driver framework for Compute Engine Virtual NIC
Compute Engine Virtual NIC のドライバ関連(gve).n
にしておく.
+CONFIG_SERIAL_MCTRL_GPIO=y
tty/serial/8250: use mctrl_gpio helpers
GPIOLIB
でselectされる.
+CONFIG_POWER_SUPPLY_HWMON=y
power: supply: Add HWMON compatibility layer
必要かどうかわからないがy
のままにしておく.
+CONFIG_WATCHDOG_OPEN_TIMEOUT=0
watchdog: introduce CONFIG_WATCHDOG_OPEN_TIMEOUT
default
は0
.
+CONFIG_DRM_VRAM_HELPER=m
drm: Add |struct drm_gem_vram_object| and helpers
手元では以下でm
にselectされている.DRM_BOCHS [=m] && HAS_IOMEM [=y] && DRM [=m] && PCI [=y] && MMU [=y]
KVM上で動かすことも想定されるので,このままで.
+CONFIG_INTEL_RAPL_CORE=m
intel_rapl: abstract RAPL common code
INTEL_RAPL [=m] && POWERCAP [=y] && X86 [=y] && IOSF_MBI [=y]
でm
に.
+CONFIG_PROC_PID_ARCH_STATUS=y
X86 [=y] && PROC_FS [=y]
でy
に.
+CONFIG_DIMLIB=y
linux/dim: Move implementation to .c files
手元でNET_VENDOR_BROADCOM
でselectされていた.
+CONFIG_HAVE_GENERIC_VDSO=y
+CONFIG_GENERIC_GETTIMEOFDAY=y
lib/vdso: Provide generic VDSO implementation
VDSO implementation of gettimeofday().X86
でy
に.
-CONFIG_HAVE_GENERIC_GUP=y
+CONFIG_HAVE_FAST_GUP=y
-CONFIG_ARCH_HAS_ZONE_DEVICE=y
+CONFIG_ARCH_HAS_PTE_DEVMAP=y
mm: introduce ARCH_HAS_PTE_DEVMAP
CONFIG_ARCH_HAS_PTE_DEVMAP
にrenameされた.X86_64
でselectされる.
-CONFIG_ARCH_HAS_HMM_MIRROR=y
-CONFIG_ARM_GIC_MAX_NR=1
irqchip/gic: Add dependency for ARM_GIC_MAX_NR
ARM_GIC=n
(ARM Generic Interrupt Controllers)なので値が定義されなくなった.
-CONFIG_CIFS_ACL=y
-CONFIG_IO_DELAY_TYPE_0X80=0
-CONFIG_IO_DELAY_TYPE_0XED=1
-CONFIG_IO_DELAY_TYPE_UDELAY=2
-CONFIG_IO_DELAY_TYPE_NONE=3
-CONFIG_DEFAULT_IO_DELAY_TYPE=0
x86/io_delay: Define IO_DELAY macros in C instead of Kconfig
+CONFIG_DRM_AMD_DC_DSC_SUPPORT=y
drm/amd/display: enable DSC support by default
DSC (VESA Display Stream Compression) support.default
がy
になった.
-CONFIG_DRM_AMD_DC_DCN1_01=y
+CONFIG_DRM_AMD_DC_DCN2_0=y
drm/amd/display: Hook DCN2 into amdgpu_dm and expose as config (v2)
+CONFIG_DRM_I915_FORCE_PROBE="*"
drm/i915: add force_probe module parameter to replace alpha_support
+CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250
+CONFIG_DRM_I915_SPIN_REQUEST=5
drm/i915: Expose the busyspin durations for i915_wait_request
-CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_CRYPTO_LIB_ARC4=m
crypto: arc4 - refactor arc4 core code into separate library
MacではUnicode正規化形式としてNFD (Normalization Form Canonical Decompression; 正規化形式D)が利用されていて,Macユーザから日本語ファイル名のファイルを含むzipファイルが送られてくる際,そのファイル名がNFDになっていて Windows/Linux ユーザからすると感じが悪い.具体的には濁点(U+3099)・半濁点(U+309A)が文字として分離されている状態.
Windows ではエクスプローラーでひとまず表示はされる.手元の Linux の場合もそれっぽくは表示されるが ÿ という謎の文字が後に付加される...
そもそもファイル名がUTF-8でzipに含まれるので,Windows (Shift_JISを想定)では激しくファイル名が文字化けする.一方 Linux の unzip は UTF-8 を想定するので正しいファイル名で復号される(Windows 由来の Shift_JIS ファイル名が含まれるzipをLinuxで解凍する際は自動文字コード変換をする unar 等を使う).
いろいろやり方はあるが以下の Ruby script で濁点と半濁点だけなんとかする(あ゛などは想定外).
print STDIN.read.split("").inject([]){|r,i|
if [0x3099,0x309a].include?(j=i.ord)
i=(r.pop.ord + j - 0x3098).chr('UTF-8')
end
r<< i
}*""
convmv
(Perl script)というコマンドが利用可能な場合は以下でまるごと置換可能.
% convmv * -f UTF-8 -t UTF-8 --nfc --notest
なお,Mac 環境から rsync する際は --iconv=UTF8-MAC,UTF-8
optionを付けると良いらしい.NFD/NFC変換がiconv
でできないか手元(Linux)で試してみたが,以下のとおりサポートされていなかった.
iconv: conversion to `UTF-8-MAC' is not supported
参考:
Ruby で外部ライブラリを利用するならruby-unfを利用する.以下にパイプで送るとか.require "unf"
で String
class に to_nfc
や to_nfd
といった instance method が追加される.
ruby -e 'require "unf"; print STDIN.read.to_nfc'
なお ÿ が表示されてしまうのは screen
のバグならしい.ただ,NFCと同様に表示されると,それはそれでNFDが見つけられなくてちょっと困るが...そもそも Mac の screen ユーザにとってはこれ死活問題かもしれない.screen
に対するパッチ等,以下参照.
WSL で Debian GNU/Linux を使っている(Windows 10 May 2019 Update でかなり使えるようになったのでもう VMWare いらないかも...)のだが,sid に upgrade したらmozc_tool
が以下でコケるようになった.
% /usr/lib/mozc/mozc_tool --mode=config_dialog
/usr/lib/mozc/mozc_tool: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
% ldd /usr/lib/mozc/mozc_tool | grep 'not found' | uniq
libQt5Core.so.5 => not found
% LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3 /usr/lib/mozc/mozc_tool --mode=config_dialog
ERROR: ld.so: object '/usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
/usr/lib/mozc/mozc_tool: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
package libqt5core5a
に /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3
は含まれていて,確かに存在するのだが,うまく読み込んでもらえない.解決法は以下.
sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3
ちなみに file で違いが確認できるらしい.for GNU/Linux 3.17.0
となっているのが問題ならしい.
% sudo apt reinstall libqt5core5a
% file /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3 > 0
% sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3
% file /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3 > 1
% wdiff 0 1
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=70947cf4ce539861badd2c95e0130074456c9bee, [-for GNU/Linux 3.17.0,-] stripped
% uname -r
4.4.0-18362-Microsoft
手元のWSL環境,Xserver には VcXsrv (multiple windows)を利用.日本語入力は基本的に Emacs のみで OK なので,それ用に emacs-mozc
と設定用の mozc-utils-gui
を install.いわゆる ibus の mozc を動かすのは断念.Windows の Google 日本語入力と WSL 上の Mozc の両方が動いている謎環境になっている.
参考:
ibus
は断念したのだが,fcitx
は動作を確認.Toggle Input Method などのキーバインドの変更はfcitx-configtool
で行う.
WSL2 + VcXsrv + fcitx
だと,特定の GUI ソフトとの相性が悪く,具体的には inkscape
が Windows サイズを適切に定められずに高速で窓のリサイズを繰り返し,最終的には VcXsrv を道連れに落ちてしまう.Emacs 上で日本語を書いて貼り付けるのが現状では無難げ.
Debian GNU/Linux stretch (backports) の NVIDIA のドライバ,古いデバイスと新しいデバイスの混在環境(計算機としては別) で以下を利用していたのだが,418.56 から GeForce GT 430 のサポートがなくなった様子.
ii nvidia-kernel-dkms 418.56-2~bpo9+1 amd64 NVIDIA binary kernel module DKMS source
ii nvidia-legacy-340xx-kernel-dkms 340.107-2~bpo9+1 amd64 NVIDIA binary kernel module DKMS source (340xx legacy version)
nvidia-current のドライバを modprobe すると以下のように怒られる.
NVRM: The NVIDIA GeForce GT 430 GPU installed in this system is
NVRM: supported through the NVIDIA 390.xx Legacy drivers. Please
NVRM: visit http://www.nvidia.com/object/unix.html for more
NVRM: information. The 418.74 NVIDIA driver will ignore
NVRM: this GPU. Continuing probe...
ということで nvidia-legacy-340xx-kernel-dkms を purge して nvidia-legacy-390xx-kernel-dkms 390.116-1~bpo9+1 を install.結構コードが 418.56 と似たような感じになっていて,5.1.15 向け patch は以下のような感じ.nvidia-kernel-dkms 410.104-1~bpo9+1 の Linux 5.1 向け patch とほぼ同じ (行数が若干ずれる程度).
diff --git a/common/inc/nv-list-helpers.h b/common/inc/nv-list-helpers.h
index 0aed851..81c2d4e 100644
--- a/common/inc/nv-list-helpers.h
+++ b/common/inc/nv-list-helpers.h
@@ -91,10 +91,12 @@
list_entry((pos)->member.next, typeof(*(pos)), member)
#endif
+/*
static inline int list_is_first(const struct list_head *list,
const struct list_head *head)
{
return list->prev == head;
}
+*/
#endif // __NV_LIST_HELPERS_H__
diff --git a/nvidia-drm/nvidia-drm-connector.c b/nvidia-drm/nvidia-drm-connector.c
index 24631c0..e64b9fe 100644
--- a/nvidia-drm/nvidia-drm-connector.c
+++ b/nvidia-drm/nvidia-drm-connector.c
@@ -30,7 +30,7 @@
#include "nvidia-drm-utils.h"
#include "nvidia-drm-encoder.h"
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 1c2db68..90ce30b 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -41,7 +41,7 @@
#include <drm/drmP.h>
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#if defined(NV_DRM_DRM_GEM_H_PRESENT)
#include <drm/drm_gem.h>
diff --git a/nvidia-drm/nvidia-drm-encoder.c b/nvidia-drm/nvidia-drm-encoder.c
index f66bbd7..0e5e2a8 100644
--- a/nvidia-drm/nvidia-drm-encoder.c
+++ b/nvidia-drm/nvidia-drm-encoder.c
@@ -31,7 +31,7 @@
#include "nvidia-drm-crtc.h"
#include "nvidia-drm-helper.h"
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
diff --git a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
index 8636eff..01c6ce4 100644
--- a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
+++ b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
@@ -222,7 +222,7 @@ done:
/* XXX Move these vma operations to os layer */
-static int __nv_drm_vma_fault(struct vm_area_struct *vma,
+static vm_fault_t __nv_drm_vma_fault(struct vm_area_struct *vma,
struct vm_fault *vmf)
{
unsigned long address = nv_page_fault_va(vmf);
@@ -268,7 +268,7 @@ static int __nv_drm_vma_fault(struct vm_area_struct *vma,
*/
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
-static int nv_drm_vma_fault(struct vm_fault *vmf)
+static vm_fault_t nv_drm_vma_fault(struct vm_fault *vmf)
{
return __nv_drm_vma_fault(vmf->vma, vmf);
}
diff --git a/nvidia-uvm/uvm8.c b/nvidia-uvm/uvm8.c
index e00923d..7278415 100644
--- a/nvidia-uvm/uvm8.c
+++ b/nvidia-uvm/uvm8.c
@@ -166,13 +166,13 @@ static void uvm_destroy_vma_semaphore_pool(struct vm_area_struct *vma)
// If a fault handler is not set, paths like handle_pte_fault in older kernels
// assume the memory is anonymous. That would make debugging this failure harder
// so we force it to fail instead.
-static int uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
{
UVM_DBG_PRINT_RL("Fault to address 0x%lx in disabled vma\n", nv_page_fault_va(vmf));
return VM_FAULT_SIGBUS;
}
-static int uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
{
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
return uvm_vm_fault_sigbus(vmf->vma, vmf);
@@ -390,7 +390,7 @@ static void uvm_vm_close_managed(struct vm_area_struct *vma)
uvm_record_unlock_mmap_sem_write(¤t->mm->mmap_sem);
}
-static int uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
uvm_va_space_t *va_space = uvm_va_space_get(vma->vm_file);
uvm_va_block_t *va_block;
@@ -507,7 +507,7 @@ convert_error:
}
}
-static int uvm_vm_fault_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_wrapper(struct vm_fault *vmf)
{
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
return uvm_vm_fault(vmf->vma, vmf);
手元の Postfix で大きめのメールが弾かれるので設定./etc/postfix/main.cf
に message_size_limit = 30720000
などと書いて postfix を restart するだけ.
Default は http://www.postfix.org/postconf.5.html のとおり 10240000 (10MByte).
ちなみに,Gmail/Outlook.com のサイズ制限は以下.
ほぼ markdown に移行したのだが,一部 RD を使う場面があって,Emacs の rd-mode
を使っているのだが,M-RET (箇条書きItem (*
)追加)が以下でコケる.
if: Symbol’s function definition is void: insert-string
手元の Emacs 24.5.1 で f1-f insert-string
で確認したところ以下とのことでinsert
を使わなければならないらしい.
This function is obsolete since 22.1;
use `insert' instead.
なお insert-string
は以下で定義されている(integerであればstringに変換のうえinsertする).
(defun insert-string (&rest args)
"Mocklisp-compatibility insert function.
Like the function `insert' except that any argument that is a number
is converted into a string by expressing it in decimal."
(declare (obsolete insert "22.1"))
(dolist (el args)
(insert (if (integerp el) (number-to-string el) el))))
github では https://github.com/uwabami/rdtool/commit/9879b190716b43ff5801782ddf2de65b0a5893ef で修正されているようだが Debian Package はまだのようで,ひとまず ~/.emacs
に以下を書いておく.
(defun rd-intelligent-newline ()
(interactive)
(let (item)
(setq item
(save-excursion (rd-search-last-listitem) )
)
(end-of-line)
(newline)
(if item (insert item) )
)
)
Linux 5.2 の準備のため,.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.x86_64.
+CONFIG_NET_VENDOR_XILINX=y
net: ll_temac: Allow use on x86 platforms
使わないので n
に.
+CONFIG_DRM_GEM_SHMEM_HELPER=y
drm: Add library for shmem backed GEM objects
Selected by [m]:
- DRM_CIRRUS_QEMU [=m] && HAS_IOMEM [=y] && DRM [=m] && PCI [=y] && MMU [=y]
+CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
media: sound/usb: Use Media Controller API to share media resources
+CONFIG_NVMEM_SYSFS=y
nvmem: core: add NVMEM_SYSFS Kconfig
y
にしておく.
+CONFIG_INIT_STACK_NONE=y
security: Create “kernel hardening” config area
NONE 以外の Option は CONFIG_GCC_PLUGINS=y
に依存する.apt install gcc-6-plugin-dev
すれば CONFIG_GCC_PLUGINS=y
になる.CONFIG_GCC_PLUGIN_STRUCTLEAK_USER=y
(weak)ぐらいにしておいても良いかも知れないが,もろもろ考慮して CONFIG_INIT_STACK_NONE=y
のままにしておく.
+CONFIG_CRYPTO_ECC=m
+CONFIG_IRQ_POLL=y
scsi: mpt3sas: Irq poll to avoid CPU hard lockups
mpt3sas が IRQ poll を利用するようになった.
+CONFIG_ARCH_STACKWALK=y
stacktrace: Provide common infrastructure
x86/stacktrace: Use common infrastructure
+CONFIG_DEBUG_MISC=y
init: introduce DEBUG_MISC option
DEBUG_KERNEL
の一部が DEBUG_MISC
に置き換えられる.
+CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
x86/mm/cpa: Add set_direct_map_*() functions
x86
で y
になる.
+CONFIG_CONTIG_ALLOC=y
mm: simplify MEMORY_ISOLATION && COMPACTION || CMA into CONTIG_ALLOC
+CONFIG_ARCH_HAS_HMM_MIRROR=y
+CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
netfilter: x_tables: merge ip and ipv6 masquerade modules
手元では IP_NF_TARGET_MASQUERADE=m
で select されていた.
-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING
x86 のみで CONFIG_OPTIMIZE_INLINING
を enable 可能だったが,他の architecture でも enable 可能になった.
ついでに CONFIG_OPTIMIZE_INLINING=y
にした.
-CONFIG_ANON_INODES=y
Make anon_inodes unconditional
無条件にanon_inodes.o
が組み込まれるようになった.
-CONFIG_GENERIC_HWEIGHT=y
x86/kconfig: Disable CONFIG_GENERIC_HWEIGHT and remove __HAVE_ARCH_SW_HWEIGHT
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
locking/rwsem: Remove rwsem-spinlock.c & use rwsem-xadd.c for all archs
無条件にrwsem-xadd.c
が使われるようになった.
-CONFIG_X86_DEV_DMA_OPS=y
-CONFIG_HAVE_RCU_TABLE_INVALIDATE=y
asm-generic/tlb, arch: Invert CONFIG_HAVE_RCU_TABLE_INVALIDATE
CONFIG_HAVE_RCU_TABLE_NO_INVALIDATE
が導入されて n
になった.
-CONFIG_ARCH_DISCARD_MEMBLOCK=y
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
-CONFIG_NF_NAT_NEEDED=y
netfilter: replace NF_NAT_NEEDED with IS_ENABLED(CONFIG_NF_NAT)
-CONFIG_CHASH=m
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
video: backlight: Remove useless BACKLIGHT_LCD_SUPPORT kernel symbol
-CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
-CONFIG_TRACING_EVENTS_GPIO=y
nvidia-kernel-dkms 418.74-1 と nvidia-legacy-390xx-kernel-dkms 390.116-1 で,以下の箇所で compile に失敗する(Linux 5.2.0).mm: introduce put_user_page*(), placeholder versions
/var/lib/dkms/nvidia-current/418.74/build/nvidia-uvm/uvm8_tools.c:209:13: error: conflicting types for ‘put_user_pages’
static void put_user_pages(struct page **pages, NvU64 page_count)
^~~~~~~~~~~~~~
In file included from /var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-pgprot.h:17,
from /var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-linux.h:20,
from /var/lib/dkms/nvidia-current/418.74/build/nvidia-uvm/uvm_linux.h:41,
from /var/lib/dkms/nvidia-current/418.74/build/nvidia-uvm/uvm_common.h:48,
from /var/lib/dkms/nvidia-current/418.74/build/nvidia-uvm/uvm8_tools.c:23:
./include/linux/mm.h:1075:6: note: previous declaration of ‘put_user_pages’ was here
void put_user_pages(struct page **pages, unsigned long npages);
^~~~~~~~~~~~~~
./include/linux/mm.h
に導入されたput_user_pages
はNVIDIAのドライバのそれと全く同じなので,以下のようにNVIDIA側でcomment outしてしまう.これでcompileできる.
--- a/nvidia-uvm/uvm8_tools.c
+++ b/nvidia-uvm/uvm8_tools.c
@@ -204,12 +204,14 @@ static bool tracker_is_counter(uvm_tools_event_tracker_t *event_tracker)
return event_tracker != NULL && !event_tracker->is_queue;
}
+/*
static void put_user_pages(struct page **pages, NvU64 page_count)
{
NvU64 i;
for (i = 0; i < page_count; i++)
put_page(pages[i]);
}
+*/
static void unmap_user_pages(struct page **pages, void *addr, NvU64 size)
{
Intel Rapid Storage Technology の RAID1 (mirror) で運用していたボリューム(HDD 2台で構成)の片方の HDD が頻繁に以下で反応しなくなって,使い物にならないので,別途買っていたHDDでリプレースしようとして失敗.
May 7 19:11:22 hoge kernel: [1666250.655691] ata2: link is slow to respond, please be patient (ready=0)
May 7 19:11:27 hoge kernel: [1666255.359669] ata2: COMRESET failed (errno=-16)
May 7 19:11:30 hoge kernel: [1666258.195679] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
May 7 19:11:30 hoge kernel: [1666258.197435] ata2.00: configured for UDMA/133
http://blog.e-photographer.net/raid-degraded?lang=ja の記事を参考にしつつやっていたつもりなのだが,途中で失敗.以下失敗手順.
この手順でなにが起こったかというと /dev/md126 の先頭 4096 byte が初期化されてしまい(sudo dd if=/dev/md126 | less
等でざっと見の結果),実は LUKS でまるごと /dev/md126 を encrypted volume として利用していたので,つまり LUKS ヘッダが壊れてしまった.
cryptsetup luksOpen
できず,そもそもcryptsetup luksDump
もできず(ヘッダが存在しないので),実はどこかにヘッダのバックアップがあったりしないかとman cryptsetup
を確認すると,以下のように書かれており,どうやらダメっぽいことに気づく.
LUKS header: If the header of a LUKS volume gets damaged, all data is permanently lost unless you have a header-backup. If a key-slot is damaged, it can only be restored from a header-backup or if another active key-slot with known passphrase is undamaged. Damaging the LUKS header is something people manage to do with surprising frequency. This risk is the result of a trade-off between security and safety, as LUKS is designed for fast and secure wiping by just overwriting header and key-slot area.
他の計算機で LUKS header のバックアップを sudo cryptsetup luksHeaderBackup /dev/md126 --header-backup-file backup_file
でとってみたところ 2,068,480 byte (4096x505) あって,その先頭 4,096 byte (UUIDやCipher mode,MK digest/salt)を移植してみたが当然だめだった(偽情報だが luksDump は可能になるが,やはり luksOpen でパスフレーズが合うはずがない).
参考:
5.1が出たので.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.
+CONFIG_IO_URING=y
新しく導入されたio_uring.y にしておく.
+CONFIG_UNIX_SCM=y
net: split out functions related to registering inflight socket files
io_uring
に関連.ちなみに手元ではCONFIG_UNIX
はy
にしている(diskless用).
+CONFIG_EFI_EARLYCON=y
+CONFIG_ARCH_USE_MEMREMAP_PROT=y
-CONFIG_EARLY_PRINTK_EFI=y
x86: Make ARCH_USE_MEMREMAP_PROT a generic Kconfig symbol
efi/x86: Convert x86 EFI earlyprintk into generic earlycon implementation
ARCH_USE_MEMREMAP_PROT
が arch/x86/Kconfig
(depends on AMD_MEM_ENCRYPT
) から arch/Kconfig
に移動.early_printk.o
が earlycon.o
になって,より Generic に.
+CONFIG_LSM="yama,loadpin,safesetid,integrity"
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
LSM: Introduce CONFIG_LSM
LoadPin: Initialize as ordered LSM
apparmor: Remove SECURITY_APPARMOR_BOOTPARAM_VALUE
LSM (Linux Security Modules) が List されるようになった.CONFIG_DEFAULT_SECURITY_DAC=y
としているので,上記のようなリストになる.Debian の Default の CONFIG_DEFAULT_SECURITY_APPARMOR=y
にして,CONFIG_LSM="yama,loadpin,safesetid,integrity,apparmor,selinux,smack,tomoyo"
にした
+CONFIG_NF_NAT_MASQUERADE=y
-CONFIG_NF_NAT_IPV4=m
-CONFIG_NF_NAT_MASQUERADE_IPV4=y
netfilter: nat: merge ipv4 and ipv6 masquerade functionality
netfilter: nf_tables: merge ipv4 and ipv6 nat chain types
マージされた.
+CONFIG_CC_HAS_WARN_MAYBE_UNINITIALIZED=y
kbuild: compute false-positive -Wmaybe-uninitialized cases in Kconfig
自動設定.
-CONFIG_IA32_AOUT=y
X86_32
からselectされなくなった.
-CONFIG_MAY_USE_DEVLINK=y
net: devlink: turn devlink into a built-in
削除された.
+CONFIG_IPVLAN_L3S=y
ipvlan: decouple l3s mode dependencies from other modes
IPVLAN
の NETFILTER
依存の部分が切り出された.
+CONFIG_LDISC_AUTOLOAD=y
tty: ldisc: add sysctl to prevent autoloading of ldiscs
y
にしておく.
+CONFIG_USB_AUTOSUSPEND_DELAY=2
usb: core: make default autosuspend delay configurable
これがdefaultなので,そのまましておく.
+CONFIG_VALIDATE_FS_PARSER=y
vfs: Add configuration parser helpers
y
にしておく.
+CONFIG_UBSAN_ALIGNMENT=y
lib/ubsan: default UBSAN_ALIGNMENT to not set
X86
でHAVE_EFFICIENT_UNALIGNED_ACCESS
がselectされ,その状態だと UBSAN_NO_ALIGNMENT=y
にできるがCONFIG_UBSAN=n
なので関係なくって,とりあえずそのまま.
案の定 nvidia-kernel-dkms (410.104-1~bpo9+1) と nvidia-legacy-340xx-kernel-dkms (340.107-2~bpo9+1) が compile できない.broadcom-sta-dkms は今回試さず.エラーは以下のようなもの(抜粋).
/var/lib/dkms/nvidia-current/410.104/build/common/inc/nv-list-helpers.h:94:19: error: redefinition of ‘list_is_first’
static inline int list_is_first(const struct list_head *list,
^~~~~~~~~~~~~
In file included from /var/lib/dkms/nvidia-current/410.104/build/common/inc/nv-kthread-q.h:28:0,
from /var/lib/dkms/nvidia-current/410.104/build/nvidia/nv-kthread-q.c:24:
./include/linux/list.h:214:19: note: previous definition of ‘list_is_first’ was here
static inline int list_is_first(const struct list_head *list,
^~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/410.104/build/nvidia-uvm/uvm8.c:187:14: error: initialization from incompatible pointer type [-Werror=incompatible-po
inter-types]
.fault = uvm_vm_fault_sigbus_wrapper
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/410.104/build/nvidia-drm/nvidia-drm-encoder.c:293:5: error: implicit declaration of function ‘drm_kms_helper_hotplug_event’ [-Werror=implicit-function-declaration]
drm_kms_helper_hotplug_event(dev);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
list_is_first
については mm, compaction: use free lists to quickly locate a migration source で list_is_first
が drivers/gpu/drm/i915/i915_utils.h
から include/linux/list.h
に移動したことによるもの./usr/src/nvidia-current/410.104/build/common/inc/nv-list-helpers.h
でも全く同じコードなので,/usr/src/nvidia-current/410.104/build/common/inc/nv-list-helpers.h
から削除してしまう.
vm_operations_struct
の .fault
が incompatible pointer type
の件については,mm: change return type to vm_fault_t で返り値がvm_fault_t
に変更になったため.返り値をvm_fault_t
にする.
最後のimplicit declaration of function
については drm: Split out drm_probe_helper.h で drm probe helper が drm_crtc_helper.h
から drm_probe_helper.h
に分離されたことによるもの.drm_crtc_helper.h
ではなく drm_probe_helper.h
を include
するようにする.
以下 nvidia-kernel-dkms (410.104-1~bpo9+1) 向け patch.
diff --git a/common/inc/nv-list-helpers.h b/common/inc/nv-list-helpers.h
index 0aed851..81c2d4e 100644
--- a/common/inc/nv-list-helpers.h
+++ b/common/inc/nv-list-helpers.h
@@ -91,10 +91,12 @@
list_entry((pos)->member.next, typeof(*(pos)), member)
#endif
+/*
static inline int list_is_first(const struct list_head *list,
const struct list_head *head)
{
return list->prev == head;
}
+*/
#endif // __NV_LIST_HELPERS_H__
diff --git a/nvidia-drm/nvidia-drm-connector.c b/nvidia-drm/nvidia-drm-connector.c
index 4dd12d1..723d35f 100644
--- a/nvidia-drm/nvidia-drm-connector.c
+++ b/nvidia-drm/nvidia-drm-connector.c
@@ -30,7 +30,7 @@
#include "nvidia-drm-utils.h"
#include "nvidia-drm-encoder.h"
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 49f099f..ca714c2 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -41,7 +41,7 @@
#include <drm/drmP.h>
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#if defined(NV_DRM_DRM_GEM_H_PRESENT)
#include <drm/drm_gem.h>
diff --git a/nvidia-drm/nvidia-drm-encoder.c b/nvidia-drm/nvidia-drm-encoder.c
index f66bbd7..0e5e2a8 100644
--- a/nvidia-drm/nvidia-drm-encoder.c
+++ b/nvidia-drm/nvidia-drm-encoder.c
@@ -31,7 +31,7 @@
#include "nvidia-drm-crtc.h"
#include "nvidia-drm-helper.h"
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
diff --git a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
index 998fcc2..1f2d974 100644
--- a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
+++ b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
@@ -330,7 +330,7 @@ done:
/* XXX Move these vma operations to os layer */
-static int __nv_drm_vma_fault(struct vm_area_struct *vma,
+static vm_fault_t __nv_drm_vma_fault(struct vm_area_struct *vma,
struct vm_fault *vmf)
{
unsigned long address = nv_page_fault_va(vmf);
@@ -377,7 +377,7 @@ static int __nv_drm_vma_fault(struct vm_area_struct *vma,
*/
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
-static int nv_drm_vma_fault(struct vm_fault *vmf)
+static vm_fault_t nv_drm_vma_fault(struct vm_fault *vmf)
{
return __nv_drm_vma_fault(vmf->vma, vmf);
}
diff --git a/nvidia-uvm/uvm8.c b/nvidia-uvm/uvm8.c
index 70ed244..9f3d107 100644
--- a/nvidia-uvm/uvm8.c
+++ b/nvidia-uvm/uvm8.c
@@ -166,13 +166,13 @@ static void uvm_destroy_vma_semaphore_pool(struct vm_area_struct *vma)
// If a fault handler is not set, paths like handle_pte_fault in older kernels
// assume the memory is anonymous. That would make debugging this failure harder
// so we force it to fail instead.
-static int uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
{
UVM_DBG_PRINT_RL("Fault to address 0x%lx in disabled vma\n", nv_page_fault_va(vmf));
return VM_FAULT_SIGBUS;
}
-static int uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
{
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
return uvm_vm_fault_sigbus(vmf->vma, vmf);
@@ -390,7 +390,7 @@ static void uvm_vm_close_managed(struct vm_area_struct *vma)
uvm_record_unlock_mmap_sem_write(¤t->mm->mmap_sem);
}
-static int uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
uvm_va_space_t *va_space = uvm_va_space_get(vma->vm_file);
uvm_va_block_t *va_block;
@@ -507,7 +507,7 @@ convert_error:
}
}
-static int uvm_vm_fault_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_wrapper(struct vm_fault *vmf)
{
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
return uvm_vm_fault(vmf->vma, vmf);
以下 nvidia-legacy-340xx-kernel-dkms (340.107-2~bpo9+1) 向け patch.Linux 5.0 向け patchがあたっていることが前提.
diff --git a/uvm/nvidia_uvm_lite.c b/uvm/nvidia_uvm_lite.c
index 9f1a479..7d6a99a 100644
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -828,7 +828,7 @@ done:
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
-int _fault(struct vm_fault *vmf)
+vm_fault_t _fault(struct vm_fault *vmf)
#else
int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
#endif
@@ -884,7 +884,7 @@ static struct vm_operations_struct uvmlite_vma_ops =
//
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
-int _sigbus_fault(struct vm_fault *vmf)
+vm_fault_t _sigbus_fault(struct vm_fault *vmf)
#else
int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
#endif
ともに Linux 5.1 より前の version で動かすことは考えていない.
nvidia-kernel-418.56 では list_is_first
が存在するかのチェックが行われるので,コメントアウト不要.
RDPで接続している先の TermService (RDPサーバ; termsrv.dll)を(いろいろあって再起動したい時の)再起動するやり方メモ.Administrator Command Prompt で以下.
> tasklist /svc /fi "imagename eq svchost.exe" | findstr TermService
> taskkill /f /pid PID
1行目で TermService の PID を調べて,2行目で kill する(RDP接続は一旦切られる).その後自動で起動する.
参考:
Debian の場合 /usr/share/ca-certificates/ に *.crt
として配置して dpkg-reconfigure ca-certificates
する.
wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt
sudo cp lets-encrypt-x3-cross-signed.pem.txt /usr/share/ca-certificates/lets-encrypt-x3-cross-signed.crt
sudo dpkg-reconfigure ca-certificates
Debian が信じてくれないのはどうやら Apache の設定の問題だった様子.以下のように cert.pem
(証明書) の箇所を fullchain.pem
(証明書と中間証明書を連結したファイル)に変更したら curl 等でも正しくアクセスできるようになった.上記のように lets-encrypt-x3-cross-signed.pem
(中間証明書)を install するのは宜しくない.
-SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
+SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
参考:
通常以下の手続で Samba NT4 Domain に参加可能なのだがなぜだかうまく行かない.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters
に以下の2つを追加
DWORD DomainCompatibilityMode = 1
DWORD DNSNameResolutionRequired = 0
% sudo smbldap-useradd -W NEWPC
症状は「ドメインに参加できなくなってしまいました」と同じ.日本語で調べていても埒が明かなくて,本家を見てみるとそもそも Windows 10 で NT4 は...みたいなことが書かれていて,Active Directory (AD) にアップグレードせよと書かれている.
Setting up Samba as an Active Directory Domain Controller を参照しつつ AD DC に移行することも考えたが,いろいろ調べたところ,Unable to join domain with new windows 10 computers - build 1803によると単に Windows Version 1803 のバグらしい.1809 に更新すると直る.ただしいろいろ試行錯誤していて,以下の状態でドメイン参加できている(どれが効いているか不要なのか不明).
Windows の機能の有効化または無効化で「SMB 1.0/CIFS クライアント」を有効化
なんとなく IPv6 (TCP/IPv6) を Disable (イーサネットのプロパティ)
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters
DWORD NT4Emulator = 1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters
DWORD AllowSingleLabelDnsDomain =
5.0が出たので.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.汎用指向の環境.Btrfs だと swap file が使えなかった(禁止されていた)のだが,Btrfs: support swap filesにより復活.
+CONFIG_CRYPTO_ADIANTUM=m
Adiantumが含まれるようになったのでm
にしてみた.依存する CONFIG_CRYPTO_NHPOLY1305
,CONFIG_CRYPTO_POLY1305
,CONFIG_CRYPTO_CHACHA20
もm
になる.
-CONFIG_XXHASH=m
+CONFIG_XXHASH=y
ksm: replace jhash2 with xxhash
KSM (Kernel Samepage Merging) が checksum の計算を jhash2 から xxhash に変更(xxhashの方が早いため).CONFIG_KSM=y
なのでy
になった.echo 1 > /sys/kernel/mm/ksm/run
しておくと同一ページがマージされる(KVM使用時に有効).
+CONFIG_CC_HAS_ASM_GOTO=y
jump_label: move ‘asm goto’ support test to Kconfig
自動判定.CONFIG_JUMP_LABEL
がこれに依存する.
-CONFIG_AUDIT_WATCH=y
-CONFIG_AUDIT_TREE=y
audit: remove WATCH and TREE config options
削除された.
+CONFIG_HAVE_MOVE_PMD=y
mm: speed up mremap by 20x on large regions
X86
でselectされる.
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_CFQ_GROUP_IOSCHED=y
-CONFIG_DEFAULT_CFQ=y
-CONFIG_DEFAULT_IOSCHED="cfq"
block: remove legacy IO schedulers
削除された.
+CONFIG_SKB_EXTENSIONS=y
sk_buff: add skb extension infrastructure
net: convert bridge_nf to use skb extension infrastructure
CONFIG_XFRM
, CONFIG_BRIDGE_NETFILTER
等でselectされる.
-CONFIG_NF_NAT_PROTO_SCTP=y
netfilter: nat: remove nf_nat_l4proto struct
netfilter: nat: remove l4proto->manip_pkt
nf_nat_proto_udp.c が nf_nat_proto.c に rename されて,他の機能もここに統合.
+CONFIG_HAVE_EISA=y
+CONFIG_HAVE_PCI=y
PCI: consolidate PCI config entry in drivers/pci
X86
でselectされる.
+CONFIG_RAID6_PQ_BENCHMARK=y
lib/raid6: add option to skip algo benchmarking
BTRFSの起動時の RAID benchmark をskip可能(250msの起動時間短縮)とするために追加された.BTRFSのRAIDを利用していないけど y にしておく.
-CONFIG_DMA_DIRECT_OPS=y
dma-mapping: always build the direct mapping code
CONFIG_HAS_DMA=y
で常にdirect.o
がbuildされるようになった(そのため削除).
-CONFIG_ARCH_HAS_SG_CHAIN=y
arch: switch the default on ARCH_HAS_SG_CHAIN
CONFIG_ARCH_NO_SG_CHAIN=n
に置き換えられた.
+CONFIG_CC_HAS_KASAN_GENERIC=y
kasan: add CONFIG_KASAN_GENERIC and CONFIG_KASAN_SW_TAGS
KASAN (kernel address sanitizer infrastructure) 関連.コンパイラが -fsanitize=kernel-address
をサポートしていたら y になる.
+CONFIG_KASAN_STACK=1
kasan: turn off asan-stack for clang-8 and earlier
KASAN (kernel address sanitizer infrastructure) 関連.CONFIG_CC_IS_GCC=y
なら 1 になる.
いずれにせよ CONFIG_KASAN=n
としている.
+CONFIG_DYNAMIC_EVENTS=y
tracing: Add unified dynamic event framework
CONFIG_UPROBE_EVENTS
, CONFIG_KPROBE_EVENTS
で select される.
案の定 nvidia-kernel-dkms (390.87-8~deb9u1) と nvidia-legacy-340xx-kernel-dkms (340.107-2~bpo9+1) が compile できない.broadcom-sta-dkms は今回試さず.エラーは以下のようなもの(抜粋).
/var/lib/dkms/nvidia-current/390.87/build/nvidia/os-interface.c:434:5: error: implicit declaration of function ‘do_gettimeofday’ [-Werror=implicit-function-declaration]
do_gettimeofday(&tm);
^~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/390.87/build/nvidia-drm/nvidia-drm-gem.h:82:5: error: implicit declaration of function ‘drm_gem_object_unreference_unlocked’ [-Werror=implicit-function-declaration]
drm_gem_object_unreference_unlocked(&nv_gem->base);
do_gettimeofday
が削除されたのと,do_gettimeofday
は適当に関数を用意して,DRMについては以下のとおり置換で対応.
-drm_gem_object_unreference_unlocked(object);
+drm_gem_object_put_unlocked(object);
-drm_gem_object_unreference(object);
+drm_gem_object_put(object);
-drm_framebuffer_reference(object);
+drm_framebuffer_get(object);
-drm_framebuffer_unreference(object);
+drm_framebuffer_put(object);
-drm_dev_unref(object);
+drm_dev_put(object);
以下 nvidia-kernel-dkms (390.87-8~deb9u1) の patch.conftest.sh
で NV_DRM_DEV_UNREF_PRESENT
が define されなくなるので,逆に else の方を修正(drm_dev_free
は更に古い I/F).とりあえず stable の package ベースでやり過ごすためだけのパッチ.
--- a/common/inc/nv-linux.h
+++ b/common/inc/nv-linux.h
@@ -1893,4 +1893,13 @@ static inline NvU64 nv_expand_nvlink_addr(NvU64 addr47)
#include <linux/backlight.h>
#endif
+static inline void do_gettimeofday(struct timeval *tv)
+{
+ struct timespec64 now;
+
+ ktime_get_real_ts64(&now);
+ tv->tv_sec = now.tv_sec;
+ tv->tv_usec = now.tv_nsec/1000;
+}
+
#endif /* _NV_LINUX_H_ */
diff --git a/nvidia-drm/nvidia-drm-gem.h b/nvidia-drm/nvidia-drm-gem.h
index f5964e2..a9f057d 100644
--- a/nvidia-drm/nvidia-drm-gem.h
+++ b/nvidia-drm/nvidia-drm-gem.h
@@ -79,7 +79,7 @@ static inline int nv_drm_gem_handle_create_drop_reference(
/* drop reference from allocate - handle holds it now */
- drm_gem_object_unreference_unlocked(&nv_gem->base);
+ drm_gem_object_put_unlocked(&nv_gem->base);
return ret;
}
@@ -153,13 +153,13 @@ static inline struct nv_drm_gem_object *nv_drm_gem_object_lookup(
static inline void
nv_drm_gem_object_unreference_unlocked(struct nv_drm_gem_object *nv_gem)
{
- drm_gem_object_unreference_unlocked(&nv_gem->base);
+ drm_gem_object_put_unlocked(&nv_gem->base);
}
static inline void
nv_drm_gem_object_unreference(struct nv_drm_gem_object *nv_gem)
{
- drm_gem_object_unreference(&nv_gem->base);
+ drm_gem_object_put(&nv_gem->base);
}
static inline int nv_drm_gem_handle_create(struct drm_file *filp,
diff --git a/nvidia-drm/nvidia-drm-helper.c b/nvidia-drm/nvidia-drm-helper.c
index 4ccf819..429f346 100644
--- a/nvidia-drm/nvidia-drm-helper.c
+++ b/nvidia-drm/nvidia-drm-helper.c
@@ -149,12 +149,12 @@ void nv_drm_atomic_clean_old_fb(struct drm_device *dev,
if (ret == 0) {
struct drm_framebuffer *new_fb = plane->state->fb;
if (new_fb)
- drm_framebuffer_reference(new_fb);
+ drm_framebuffer_get(new_fb);
plane->fb = new_fb;
plane->crtc = plane->state->crtc;
if (plane->old_fb)
- drm_framebuffer_unreference(plane->old_fb);
+ drm_framebuffer_put(plane->old_fb);
}
plane->old_fb = NULL;
}
diff --git a/nvidia-drm/nvidia-drm-helper.h b/nvidia-drm/nvidia-drm-helper.h
index ab61c7e..e002d7c 100644
--- a/nvidia-drm/nvidia-drm-helper.h
+++ b/nvidia-drm/nvidia-drm-helper.h
@@ -39,7 +39,7 @@ static inline void nv_drm_dev_free(struct drm_device *dev)
#if defined(NV_DRM_DEV_UNREF_PRESENT)
drm_dev_unref(dev);
#else
- drm_dev_free(dev);
+ drm_dev_put(dev);
#endif
}
diff --git a/nvidia-drm/nvidia-drm-linux.c b/nvidia-drm/nvidia-drm-linux.c
index 333bfe1..d3614b9 100644
--- a/nvidia-drm/nvidia-drm-linux.c
+++ b/nvidia-drm/nvidia-drm-linux.c
@@ -156,6 +156,15 @@ void nv_drm_vunmap(void *address)
vunmap(address);
}
+static inline void do_gettimeofday(struct timeval *tv)
+{
+ struct timespec64 now;
+
+ ktime_get_real_ts64(&now);
+ tv->tv_sec = now.tv_sec;
+ tv->tv_usec = now.tv_nsec/1000;
+}
+
uint64_t nv_drm_get_time_usec(void)
{
struct timeval tv;
diff --git a/nvidia-modeset/nvidia-modeset-linux.c b/nvidia-modeset/nvidia-modeset-linux.c
index 6f51178..07c207e 100644
--- a/nvidia-modeset/nvidia-modeset-linux.c
+++ b/nvidia-modeset/nvidia-modeset-linux.c
@@ -208,6 +208,15 @@ void NVKMS_API_CALL nvkms_usleep(NvU64 usec)
}
}
+static inline void do_gettimeofday(struct timeval *tv)
+{
+ struct timespec64 now;
+
+ ktime_get_real_ts64(&now);
+ tv->tv_sec = now.tv_sec;
+ tv->tv_usec = now.tv_nsec/1000;
+}
+
NvU64 NVKMS_API_CALL nvkms_get_usec(void)
{
struct timeval tv;
以下 nvidia-legacy-340xx-kernel-dkms (340.107-2~bpo9+1) 向け patch.
--- a/nv-drm.c
+++ b/nv-drm.c
@@ -252,7 +252,7 @@ RM_STATUS NV_API_CALL nv_alloc_os_descriptor_handle(
goto done;
}
- drm_gem_object_unreference_unlocked(&nv_obj->base);
+ drm_gem_object_put_unlocked(&nv_obj->base);
status = RM_OK;
diff --git a/os-interface.c b/os-interface.c
index 7e3d362..f1ca725 100644
--- a/os-interface.c
+++ b/os-interface.c
@@ -433,6 +433,15 @@ void NV_API_CALL os_free_mem(void *address)
*
*****************************************************************************/
+static inline void do_gettimeofday(struct timeval *tv)
+{
+ struct timespec64 now;
+
+ ktime_get_real_ts64(&now);
+ tv->tv_sec = now.tv_sec;
+ tv->tv_usec = now.tv_nsec/1000;
+}
+
RM_STATUS NV_API_CALL os_get_current_time(
NvU32 *seconds,
NvU32 *useconds
diff --git a/uvm/nvidia_uvm_lite.c b/uvm/nvidia_uvm_lite.c
index 19e3b36..9f1a479 100644
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -2008,6 +2008,15 @@ void umvlite_destroy_per_process_gpu_resources(UvmGpuUuid *gpuUuidStruct)
// Function to check for ECC errors and returns true if an ECC DBE error
// has happened.
//
+static inline void do_gettimeofday(struct timeval *tv)
+{
+ struct timespec64 now;
+
+ ktime_get_real_ts64(&now);
+ tv->tv_sec = now.tv_sec;
+ tv->tv_usec = now.tv_nsec/1000;
+}
+
static RM_STATUS _check_ecc_errors(UvmGpuMigrationTracking *pMigTracker,
NvBool *pIsEccErrorSet)
{
ともに Linux 5.0 より前の version で動かすことは考えていない.
少し前に仕事でハワイに行った際のメモ.全然観光とかしてない.
お名前.com 共用サーバーSDで再び curl が動かなくなった.
最もシンプルに curl https://www.yahoo.co.jp/
を CGI から実行すると以下のように怒られる.
curl: (48) An unknown option was passed in to libcurl
原因は curl と libcurl の version が揃っていないこと.CGIから curl --version
すると確かに以下のように curl は 7.54.1 で libcurl は 7.32.0.
curl 7.54.1 (i386-pc-solaris2.10) libcurl/7.32.0 OpenSSL/1.0.2n zlib/1.2.3 libidn/1.26
Release-Date: 2017-06-14
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
具体的なファイルをみてみても,ldd /usr/local/bin/curl
が以下で,
libcurl.so.4 => /usr/local/lib/amd64/libcurl.so.4
libssl.so.1.0.0 => /usr/local/lib/amd64/libssl.so.1.0.0
libcrypto.so.1.0.0 => /usr/local/lib/amd64/libcrypto.so.1.0.0
libldap-2.4.so.2 => /usr/local/lib/amd64/libldap-2.4.so.2
liblber-2.4.so.2 => /usr/local/lib/amd64/liblber-2.4.so.2
libresolv.so.2 => /lib/64/libresolv.so.2
libgen.so.1 => /lib/64/libgen.so.1
libnsl.so.1 => /lib/64/libnsl.so.1
libsocket.so.1 => /lib/64/libsocket.so.1
libz.so => /usr/lib/64/libz.so
librt.so.1 => /lib/64/librt.so.1
libc.so.1 => /lib/64/libc.so.1
libidn.so.11 => /usr/local/lib/64/libidn.so.11
libgcc_s.so.1 => /usr/sfw/lib/64/libgcc_s.so.1
libdl.so.1 => /lib/64/libdl.so.1
libmp.so.2 => /lib/64/libmp.so.2
libmd.so.1 => /lib/64/libmd.so.1
libscf.so.1 => /lib/64/libscf.so.1
libaio.so.1 => /lib/64/libaio.so.1
libiconv.so.2 => /usr/local/lib/64/libiconv.so.2
libdoor.so.1 => /lib/64/libdoor.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libm.so.2 => /lib/64/libm.so.2
libcurl.so.4 関連は以下のような感じ.Symlink 先が最近変更になったらしい...
-rwxr-xr-x 1 root root 202504 Jun 26 2017 /usr/local/bin/curl
-rw-r--r-- 1 root root 770226 Jan 27 2014 /usr/local/lib/amd64/libcurl.a
-rwxr-xr-x 1 root root 1164 Jan 27 2014 /usr/local/lib/amd64/libcurl.la
lrwxrwxrwx 1 root root 16 Nov 14 14:20 /usr/local/lib/amd64/libcurl.so -> libcurl.so.4.3.0
lrwxrwxrwx 1 root root 16 Nov 14 14:20 /usr/local/lib/amd64/libcurl.so.4 -> libcurl.so.4.3.0
-rwxr-xr-x 1 root root 505336 Jan 27 2014 /usr/local/lib/amd64/libcurl.so.4.3.0
-rwxr-xr-x 1 root root 565344 Jun 26 2017 /usr/local/lib/amd64/libcurl.so.4.4.0
ということで LD_PRELOAD=/usr/local/lib/amd64/libcurl.so.4.4.0 curl
で curl を起動すると正しく動く.以下 LD_PRELOAD=/usr/local/lib/amd64/libcurl.so.4.4.0 curl --verion
の結果.
curl 7.54.1 (i386-pc-solaris2.10) libcurl/7.54.1 OpenSSL/1.0.2n zlib/1.2.3
Release-Date: 2017-06-14
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy
あと,お名前.com 共用サーバーSDに SSH でログインすると時間が結構ずれてる(WEB サーバは問題なさそう).
参考:
今見てみたらcurl
だけで動くようになっていた.逆にLD_PRELOAD=/usr/local/lib/amd64/libcurl.so.4.4.0 curl
だとコケる.
ld.so.1: curl: fatal: /usr/local/lib/amd64/libcurl.so.4.4.0: open failed: No such file or directory
ldd /usr/local/bin/curl
.
libcurl.so.4 => /usr/local/lib/amd64/libcurl.so.4
libnsl.so.1 => /lib/64/libnsl.so.1
libsocket.so.1 => /lib/64/libsocket.so.1
libssl.so.1.0.0 => /usr/local/lib/amd64/libssl.so.1.0.0
libcrypto.so.1.0.0 => /usr/local/lib/amd64/libcrypto.so.1.0.0
libz.so.1 => /usr/lib/64/libz.so.1
librt.so.1 => /lib/64/librt.so.1
libc.so.1 => /lib/64/libc.so.1
libgcc_s.so.1 => /usr/local/lib/amd64/libgcc_s.so.1
libmp.so.2 => /lib/64/libmp.so.2
libmd.so.1 => /lib/64/libmd.so.1
libscf.so.1 => /lib/64/libscf.so.1
libdl.so.1 => /lib/64/libdl.so.1
libaio.so.1 => /lib/64/libaio.so.1
libdoor.so.1 => /lib/64/libdoor.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libgen.so.1 => /lib/64/libgen.so.1
libm.so.2 => /lib/64/libm.so.2
libcurl.so.4 関連.
-rwxr-xr-x 1 root root 223032 Nov 30 09:51 /usr/local/bin/curl
-rw-r--r-- 1 root root 943778 Nov 30 09:51 /usr/local/lib/amd64/libcurl.a
-rwxr-xr-x 1 root root 1019 Nov 30 09:51 /usr/local/lib/amd64/libcurl.la
lrwxrwxrwx 1 root root 16 Jan 28 13:58 /usr/local/lib/amd64/libcurl.so -> libcurl.so.4.5.0
lrwxrwxrwx 1 root root 16 Jan 28 13:58 /usr/local/lib/amd64/libcurl.so.4 -> libcurl.so.4.5.0
-rwxr-xr-x 1 root root 572608 Nov 30 09:51 /usr/local/lib/amd64/libcurl.so.4.5.0
curl --verion
.
curl 7.62.0 (x86_64-pc-solaris2.10) libcurl/7.62.0 OpenSSL/1.0.2n zlib/1.2.3
Release-Date: 2018-10-31
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy
いつのまにか i386-pc-solaris2.10 から x86_64-pc-solaris2.10 に変更になってる...
aptitude
でGoogle Chrome (google-chrome-stable)が Upgrade できない問題発生.
E: Repository 'http://dl.google.com/linux/chrome/deb stable Release' changed its 'Origin' value from 'Google, Inc.' to 'Google LLC'
E: Failed to download some files
W: Failed to fetch http://dl.google.com/linux/chrome/deb/dists/stable/Release:
E: Some index files failed to download. They have been ignored, or old ones used instead.
https://stackoverflow.com/questions/50942353/e-repository-http-dl-google-com-linux-chrome-remote-desktop-deb-stable-relea/50942354によるとsudo apt update
で名前の変更を許可すれば良いだけの話らしい.
4.20-rc1が出たので.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.汎用指向の環境.Linux 5.0 になるのは来年らしい.
+CONFIG_ARCH_CLOCKSOURCE_INIT=y
x86/time: Implement clocksource_arch_init()
X86
でselectされる.
-CONFIG_NO_BOOTMEM=y
すべてのアーキテクチャで NO_BOOTMEM がselectされるので,削除したとのこと.
-CONFIG_HAVE_MEMBLOCK=y
mm: remove CONFIG_HAVE_MEMBLOCK
すべてのアーキテクチャで HAVE_MEMBLOCK がselectされるので,削除したとのこと.
+CONFIG_CPU_SUP_HYGON=y
x86/cpu: Create Hygon Dhyana architecture support file
CONFIG_PROCESSOR_SELECT=y
にして CONFIG_CPU_SUP_HYGON=n ついでに CONFIG_CPU_SUP_CENTAUR=n する(IntelとAMDのみサポート,の設定になる).
+CONFIG_ACPI_ADXL=y
EDAC, skx_edac: Add address translation for non-volatile DIMMs
ACPI/ADXL: Add address translation interface using an ACPI DSM
CONFIG_EDAC_SKX=m
で select されてた.このままで.
+CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
x86: ptrace: Add function argument access API
X86
でselectされる.
+CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
jump_label: Implement generic support for relative references
x86/jump_table: Use relative references
X86
でselectされる.
+CONFIG_HAVE_ARCH_STACKLEAK=y
x86/entry: Add STACKLEAK erasing the kernel stack at the end of syscalls
X86
でselectされる.
+CONFIG_BLK_PM=y
block: Move power management code into a new source file
config BLK_PM
def_bool BLOCK && PM
-CONFIG_MAC80211_RC_MINSTREL_HT=y
mac80211: minstrel: merge with minstrel_ht, always enable VHT support
+CONFIG_DRM_AMD_DC_DCN1_01=y
drm/amd/display: Add DC config flag for Raven2 (v2)
CONFIG_DRM_AMD_DC_DCN1_0 同様 CONFIG_DRM_AMD_DC で select される.
-CONFIG_CRYPTO_MCRYPTD=m
-CONFIG_CRYPTO_SHA1_MB=m
crypto: x86 - remove SHA multibuffer routines and mcryptd
壊れていてメンテナンス困難ということで一旦削除とのこと.
-CONFIG_RADIX_TREE_MULTIORDER=y
+CONFIG_XARRAY_MULTI=y
radix tree: Remove multiorder support
xarray: Add documentation
Xarray に移行.
broadcom-sta-dkms (6.30.223.271-9.1)は以下で compile できない.
Assembler messages:
Error: can't open arch/x86/kernel/macros.s for reading: No such file or directory
arch/x86/kernel/macros.s
を /usr/src/linux-headers-4.20.0-hoge-01/arch/x86/kernel/
に配置してあげると compile できる.
nvidia-kernel-dkms (390.87-2) は conftest の段階で以下の error.これ以上はひとまず追わず.
#error INIT_WORK() conftest failed!
#error kmem_cache_create() conftest failed!
#error on_each_cpu() conftest failed!
#error smp_call_function() conftest failed!
#error acpi_walk_namespace() conftest failed!
#error pci_dma_mapping_error() conftest failed!
#error wait_on_bit_lock() conftest failed!
#error radix_tree_replace_slot() conftest failed!
まず上記 conftest の失敗は arch/x86/kernel/macros.s
を見に行くことが原因.nvidia-legacy についても同様.以下で解決.Version は nvidia-kernel-dkms (390.87-3) と nvidia-legacy-340xx-kernel-dkms 340.107-3.
# cd /usr/src/nvidia-current-390.87
# ln -s /usr/src/linux-headers-4.20.0-rcX-hogege-01/arch .
# cd /usr/src/nvidia-legacy-340xx-340.107
# ln -s /usr/src/linux-headers-4.20.0-rcX-hogege-01/arch .
# cd /usr/src/nvidia-legacy-340xx-340.107/uvm
# ln -s /usr/src/linux-headers-4.20.0-rcX-hogege-01/arch .
nvidia-current (390.87-3) は以下で compile に失敗する.Kernel の mm: change return type to vm_fault_tによる変更に由来する.
/var/lib/dkms/nvidia/current-390.87/build/nvidia-drm/nvidia-drm-gem-nvkms-memory.c: In function ‘__nv_drm_vma_fault’:
/var/lib/dkms/nvidia/current-390.87/build/nvidia-drm/nvidia-drm-gem-nvkms-memory.c:240:11: error: implicit declaration of function ‘vm_insert_pfn’; did you mean ‘vmf_insert_pfn’? [-Werror=implicit-function-declaration]
ret = vm_insert_pfn(vma, address, pfn + page_offset);
^~~~~~~~~~~~~
vmf_insert_pfn
以下の patch で解決.
--- a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
+++ b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
@@ -230,31 +230,15 @@ static int __nv_drm_vma_fault(struct vm_area_struct *vma,
struct nv_drm_gem_nvkms_memory *nv_nvkms_memory = to_nv_nvkms_memory(
to_nv_gem_object(gem));
unsigned long page_offset, pfn;
- int ret = -EINVAL;
+ vm_fault_t ret;
pfn = (unsigned long)(uintptr_t)nv_nvkms_memory->pPhysicalAddress;
pfn >>= PAGE_SHIFT;
page_offset = vmf->pgoff - drm_vma_node_start(&gem->vma_node);
- ret = vm_insert_pfn(vma, address, pfn + page_offset);
-
- switch (ret) {
- case 0:
- case -EBUSY:
- /*
- * EBUSY indicates that another thread already handled
- * the faulted range.
- */
- return VM_FAULT_NOPAGE;
- case -ENOMEM:
- return VM_FAULT_OOM;
- default:
- WARN_ONCE(1, "Unhandled error in %s: %d\n", __FUNCTION__, ret);
- break;
- }
-
- return VM_FAULT_SIGBUS;
+ ret = vmf_insert_pfn(vma, address, pfn + page_offset);
+ return ret;
}
/*
いつも procmail のレシピの書き方の細かい部分を忘れるのでメモ.
:0c
* ^TO_myn@a.example.org
! myn@c.example.org
:0c
* ^TO_.*@b.example.org
! myn@c.example.org
これでmyn@a.example.org
宛のメール,もしくはドメイン@b.example.org
宛のメールだったら,ローカル配送とともにmyn@c.example.org
に転送される.
:0
ではじまって,次の:0
かファイル終端で終わる(0に特に意味はない.:n
(n
はcondition line数)のようなformatにするつもりだったらしい.*
で始まる行に条件(通常は正規表現; egrep)を記述(condition line).!
の行が action line (1つのレシピに1つ):0 [flags] [ : [locallockfile] ]
というフォーマット.c
は carbon copy を作成する意味
c
が指定された場合は引き続く行も評価される:0:
や:0c:
などの場合は lock が利用される(procmailは同時に複数立ち上がる可能性があり,同一のファイルに書き込みが行われる場合にはこの機能を用いる).c
以外では,fw
が SpamAssassin でフィルタ処理する等で用いられる
f
: パイプ(ここでは省略)をフィルタ(処理されたメッセージを以降のレシピに渡す)として用いる.w
: フィルタの処理を待ち,その exitcode をチェックする(異常終了していればそこで終わる; Default は exitcode を無視する).*
の直後,行末の whitespace は無視される.D
flag を用いる.^TO_
は以下に置換される(^TO
は古い書き方で通常は^TO_
でOK).To: だけでなく Cc: 等にもマッチさせるためのマクロ.^TO_
: (^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)
^TO
: (^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^a-zA-Z])?)
!
は転送の意味で,続くメールアドレスに転送される(変数SENDMAIL
により通常はsendmail
に送られる)./
で終わっていいれば maildir 形式,/.
で終わっていいれば MH 形式.参考:
お名前.com から以下のようなメールが届く.いくつか管理している共用サーバそれぞれで同一内容のメールが届いたので,全てのユーザーに対してFTPパスワードが変更された模様(以前のものに対して少し長くなった).
また、お客様に安全に安心してサービスをご利用いただくために、弊社側で、FTPパスワードの変更を実施させていただきました。
※FTPパスワードとコントロールパネルのログインパスワードが、連動しているため、併せて変更されております。
OAuth 等で接続しているアプリ等のリストを得るためのURL達.
とある様式で『○で囲む』という指示があって,図形挿入で対応すれば良いのだが,あまりエレガントでないので,他のやり方を探る.http://blog.heiichi.com/?eid=547488にあるとおり『囲い文字』で1文字を○で囲んであとは Alt-F9 でフィールドコードを表示のうえそれを編集すれば良いらしい.『囲い文字』で利用される丸は普通の丸(○)で,これだとちょっと線が太いので,大きなの丸(◯)を利用するとちょうどよい感じになった.
Debian GNU/Linux sid (unstable) で openssh の version が上がって,なぜだかどのホストにも接続できなくなった.Windows host の VMWare 上の Linux でのみ問題が発生していて,クライアントの問題.
% ssh server.example.com
packet_write_wait: Connection to XX.XX.XX.XX port 22: Broken pipe
サーバのログや -v
で追ってみたところ,認証接続自体はできているが,直ぐに切れてしまっていた.原因は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908113 にあるとおり,
OpenSSH 7.8 で Default の IPQoS Option が DSCP AF21 for interactive traffic and CS1 for bulk になったこと,
VMWare の NAT 機能のバグで DSCP (Differentiated Services Code Point)が正常に扱えないらしいこと,
の複合要因.AF21/CS1 が default になる前は lowdelay/throughtput が default だったので,その挙動になるように設定を行えば良いらしい.確かに以下のようにすれば繋がる.
% ssh -o 'IPQoS lowdelay throughput' server.example.com
ということで,/etc/ssh/ssh_config
に以下を書いておいて,以前の option を system default にする.
Host *
IPQoS lowdelay throughput
4.19-rc1が出たので.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.汎用指向の環境.
+CONFIG_ARCH_SUPPORTS_ACPI=y
X86
でselectされる.
+CONFIG_BUILD_SALT=""
kbuild: Add build salt to the kernel and modules
Build ID を設定できるようになった様子.Default は "".
+CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
cifs: allow disabling insecure dialects in the config
Default は y.cifs (SMB) 1.0, 2.0 を使う場合は y にしておく必要がある.
+CONFIG_CONSOLE_LOGLEVEL_QUIET=4
printk: Make CONSOLE_LOGLEVEL_QUIET configurable
1から15で設定.Defaultは4.
+CONFIG_DRM_AMD_DC_DCN1_0=y
drm/amd/display: Don’t build DCN1 when kcov is enabled
CONFIG_DRM_AMD_DC で select されるようになった.
+CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
arch: enable relative relocations for arm64, power and x86
X86
でselectされる.
+CONFIG_HAVE_RCU_TABLE_INVALIDATE=y
mm/tlb, x86/mm: Support invalidating TLB caches for RCU_TABLE_FREE
X86
でHAVE_RCU_TABLE_FREE
なら(PARAVIRT=y
なら)selectされる.
+CONFIG_HAVE_RELIABLE_STACKTRACE=y
x86/stacktrace: Enable HAVE_RELIABLE_STACKTRACE for the ORC unwinder
UNWINDER_ORC
でselectされるようになった.
+CONFIG_MEMCG_KMEM=y
mm: introduce CONFIG_MEMCG_KMEM as combination of CONFIG_MEMCG && !CONFIG_SLOB
CONFIG_MEMCG && !CONFIG_SLOB
でy
になる.SLOBはSLAB/SLUB/SLOBのSLOB(simple allocator).
+CONFIG_NET_VENDOR_CADENCE=y
+CONFIG_NET_VENDOR_NETERION=y
+CONFIG_NET_VENDOR_PACKET_ENGINES=y
nにする.
+CONFIG_NF_DEFRAG_IPV6=m
-CONFIG_NF_CONNTRACK_IPV4=m
netfilter: conntrack: remove l3proto abstraction
CONFIG_NF_DEFRAG_IPV6
はNF_CONNTRACK
でselectされる.CONFIG_NF_CONNTRACK_IPV4
は削除.
+CONFIG_SND_HDA_COMPONENT=y
ALSA: hda: Make audio component support more generic
SND_HDA_I915
でselectされる.
-CONFIG_ENABLE_WARN_DEPRECATED=y
deprecate the ’__deprecated’ attribute warnings entirely and for good
-CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y
CONFIG_REALTEK_PHY: m->y
r8169: add missing Kconfig dependency
R8169=y
でy
になるようになった.Network boot 関連でR8169=y
にしていたような気がする.
nvidia-kernel-dkms 390.77-1 の compile に以下の通り失敗するが,
/var/lib/dkms/nvidia-current/390.77/build/nvidia-drm/nvidia-drm-encoder.c: In function ‘nv_drm_add_encoder’:
/var/lib/dkms/nvidia-current/390.77/build/nvidia-drm/nvidia-drm-encoder.c:219:11: error: implicit declaration of function ‘drm_mode_connector_attach_encoder’; did you mean ‘drm_connector_attach_encoder’? [-Werror=implicit-function-declaration]
ret = drm_mode_connector_attach_encoder(connector, encoder);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drm_connector_attach_encoder
/var/lib/dkms/nvidia-current/390.77/build/nvidia-drm/nvidia-drm-connector.c: In function ‘nv_drm_connector_get_modes’:
/var/lib/dkms/nvidia-current/390.77/build/nvidia-drm/nvidia-drm-connector.c:229:9: error: implicit declaration of function ‘drm_mode_connector_update_edid_property’; did you mean ‘drm_connector_update_edid_property’? [-Werror=implicit-function-declaration]
drm_mode_connector_update_edid_property(
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drm_connector_update_edid_property
原因はdrm: drop mode from remaining connector functionsの修正.以下の patch を /usr/src/nvidia-current-390.77/
にあるファイルにあてる.
--- a/nvidia-drm/nvidia-drm-connector.c
+++ b/nvidia-drm/nvidia-drm-connector.c
@@ -226,7 +226,7 @@ static int nv_drm_connector_get_modes(struct drm_connector *connector)
if (nv_connector->edid != NULL) {
- drm_mode_connector_update_edid_property(
+ drm_connector_update_edid_property(
connector, nv_connector->edid);
}
--- a/nvidia-drm/nvidia-drm-encoder.c
+++ b/nvidia-drm/nvidia-drm-encoder.c
@@ -216,7 +216,7 @@ nv_drm_add_encoder(struct drm_device *dev, NvKmsKapiDisplay hDisplay)
/* Attach encoder and connector */
- ret = drm_mode_connector_attach_encoder(connector, encoder);
+ ret = drm_connector_attach_encoder(connector, encoder);
if (ret != 0) {
NV_DRM_DEV_LOG_ERR(
4.19-rc4に詳細があるが Linus しばらくお休みで,4.19-rc5は Greg による公開.
など参照.
Silicon Power の microSDXC UHS-1 Speed Class 1 256GB (elite)を購入したのだが,今まで使っていた Samsung の microSDXC UHS-I Speed Class 1 128G (EVO+)と比較してなんだかもっさりしている.
CrystalDiskMark で調べた結果,以下のように Silicon Power は結構遅い...
Silicon Power microSDXC UHS-1 Speed Class 1 256GB (elite)
Sequential Read (Q= 32,T= 1) : 86.820 MB/s
Sequential Write (Q= 32,T= 1) : 21.993 MB/s
Random Read 4KiB (Q= 8,T= 8) : 6.187 MB/s [ 1510.5 IOPS]
Random Write 4KiB (Q= 8,T= 8) : 1.340 MB/s [ 327.1 IOPS]
Random Read 4KiB (Q= 32,T= 1) : 6.208 MB/s [ 1515.6 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 1.319 MB/s [ 322.0 IOPS]
Random Read 4KiB (Q= 1,T= 1) : 5.466 MB/s [ 1334.5 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 1.236 MB/s [ 301.8 IOPS]
Samsung microSDXC UHS-I Speed Class 1 128G (EVO+)
Sequential Read (Q= 32,T= 1) : 87.620 MB/s
Sequential Write (Q= 32,T= 1) : 63.907 MB/s
Random Read 4KiB (Q= 8,T= 8) : 5.574 MB/s [ 1360.8 IOPS]
Random Write 4KiB (Q= 8,T= 8) : 2.594 MB/s [ 633.3 IOPS]
Random Read 4KiB (Q= 32,T= 1) : 5.617 MB/s [ 1371.3 IOPS]
Random Write 4KiB (Q= 32,T= 1) : 2.552 MB/s [ 623.0 IOPS]
Random Read 4KiB (Q= 1,T= 1) : 4.783 MB/s [ 1167.7 IOPS]
Random Write 4KiB (Q= 1,T= 1) : 2.430 MB/s [ 593.3 IOPS]
今なら Samsung でSpeed Class 3のものもあるので,そちらにしたら良かった.以下ついでに測った NotePC の SSD.
Sequential Read (Q= 32,T= 1) : 508.879 MB/s
Sequential Write (Q= 32,T= 1) : 191.672 MB/s
Debian GNU/Linux に docker.io (18.03.1+dfsg1-6) を Install すると KVM (ブリッジ接続)に接続できなくなった.docker0
という interface ができたのが原因かと思い,かなり悩む.
% /sbin/ifconfig -s | awk '{print $1}'
Iface
br0
docker0
eth0
lo
tap0
% /sbin/brctl show
bridge name bridge id STP enabled interfaces
br0 8000.xxxxxxxxxxxx yes eth0
tap0
docker0 8000.yyyyyyyyyyyy no
原因は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=865975 のとおり iptables
の Chain FORWARD
の default policy を docker
が DROP
にしてしまうこと.sudo iptables -P FORWARD ACCEPT
すれば直る.
sudo iptables -P FORWARD ACCEPT
しても packet が流れないのでおかしいなと思ったら,sid 環境では iptables-legacy
を使わないといけないらしい.sudo iptables-legacy -P FORWARD ACCEPT
.
% sudo iptables -L
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# Warning: iptables-legacy tables present, use iptables-legacy to see them
% sudo iptables-legacy -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
(略)
/usr/sbin/iptables
として /usr/sbin/iptables-nft
か /usr/sbin/iptables-legacy
を選択できるようになっていて(buster でもそう),自動で /usr/sbin/iptables-nft
が選択されるようになっている(sudo update-alternatives --config iptables
等で変更).
上記 iptables-legacy
でなければうまく行かない話は Kernel で CONFIG_NF_TABLES
(nftables; NFT) が n
になっていたか正しく動作しなかったため(Debian の Kernel Package で)だった模様.現在は NFT が正常に動作する package が提供されている.
Debian GNU/Linux の OpenVPN (server) を 2.4.0-6+deb9u2 から 2.4.4-2~bpo9+1 に version up したらユーザー認証ができなくなった./etc/default/openvpn
は以下のとおり(抜粋).
AUTOSTART="vpn_server"
/etc/openvpn/vpn_server.conv
で以前は以下で password 認証(というかLDAP)ができていた.
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
client-cert-not-required
まずclient-cert-not-required
については以下のように怒られるので,verify-client-cert optional
ぐらいに変更.See https://community.openvpn.net/openvpn/wiki/DeprecatedOptions#a--client-cert-not-required . client-cert-not-required
は OpenVPN 2.5 で削除される様子.
DEPRECATED OPTION: --client-cert-not-required, use --verify-client-cert instead
/usr/lib/openvpn/openvpn-plugin-auth-pam.so
はまず path が /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so
に変更になっている.パスの変更については,full path を書かなければ良いらしく以下で対応.
plugin openvpn-plugin-auth-pam.so openvpn
ただし,これだと,以下のようなエラーで認証できない(client の IP Address が 127.0.0.1 なのは SSH でポートフォワードしているから).
myserver openvpn[XXXXX]: AUTH-PAM: BACKGROUND: user 'myn' failed to authenticate: System error
myserver ovpn-vpn_server[XXXXX]: 127.0.0.1:XXXXX PLUGIN_CALL: POST /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so/PLUGIN_AUTH_USER_PASS_VERIFY status=1
myserver ovpn-vpn_server[XXXXX]: 127.0.0.1:XXXXX PLUGIN_CALL: plugin function PLUGIN_AUTH_USER_PASS_VERIFY failed with status 1: /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so
調べてみたところ,/lib/systemd/system/openvpn@.service
の CapabilityBoundingSet
に CAP_AUDIT_WRITE
を追加する必要があるらしい.
参考:
以下のような状況を想定.
% ls -Rla
.:
total 0
drwxr-xr-x 1 myn users 24 Jul 12 12:06 ./
drwxr-xr-x 1 myn users 2018 Jul 12 12:12 ../
drwxr-xr-x 1 myn users 8 Jul 12 12:13 low/
drwxr-xr-x 1 myn users 0 Jul 12 12:06 over/
drwxr-xr-x 1 myn users 16 Jul 12 12:14 up/
drwxr-xr-x 1 myn users 0 Jul 12 12:14 work/
./low:
total 0
drwxr-xr-x 1 myn users 8 Jul 12 12:13 ./
drwxr-xr-x 1 myn users 24 Jul 12 12:06 ../
drwxr-xr-x 1 myn users 18 Jul 12 12:08 dir0/
./low/dir0:
total 0
drwxr-xr-x 1 myn users 18 Jul 12 12:08 ./
drwxr-xr-x 1 myn users 8 Jul 12 12:13 ../
-rw-r--r-- 1 myn users 0 Jul 12 12:05 test
-rw-r--r-- 1 myn users 0 Jul 12 12:05 test1
./over:
total 0
drwxr-xr-x 1 myn users 0 Jul 12 12:06 ./
drwxr-xr-x 1 myn users 24 Jul 12 12:06 ../
./up:
total 0
drwxr-xr-x 1 myn users 16 Jul 12 12:14 ./
drwxr-xr-x 1 myn users 24 Jul 12 12:06 ../
c--------- 1 root root 0, 0 Jul 6 11:18 dir0
drwxr-xr-x 1 myn users 20 Jul 12 12:14 dir1/
./up/dir1:
total 0
drwxr-xr-x 1 myn users 20 Jul 12 12:14 ./
drwxr-xr-x 1 myn users 16 Jul 12 12:14 ../
-rw-r--r-- 1 myn users 0 Jul 12 12:09 file0
c--------- 1 root root 0, 0 Jul 6 11:18 file1
./work:
total 0
drwxr-xr-x 1 myn users 0 Jul 12 12:14 ./
drwxr-xr-x 1 myn users 24 Jul 12 12:06 ../
ここで
% sudo mount -t overlay -olowerdir=low,upperdir=up,workdir=work overlay over
で mount すると,
% ls -Rla over
over:
total 0
drwxr-xr-x 1 myn users 16 Jul 12 12:14 ./
drwxr-xr-x 1 myn users 26 Jul 12 12:16 ../
drwxr-xr-x 1 myn users 20 Jul 12 12:14 dir1/
over/dir1:
ls: cannot access 'over/dir1/file1': No such file or directory
total 0
drwxr-xr-x 1 myn users 20 Jul 12 12:14 ./
drwxr-xr-x 1 myn users 16 Jul 12 12:14 ../
-rw-r--r-- 1 myn users 0 Jul 12 12:09 file0
c????????? ? ? ? ? ? file1
といった悲しい状況になる.uppwer 側で消すファイルが lower 側に存在せず,かつ,その directory が uppwer 側でのみ存在する場合に発生する様子(しかも起こったり起こらなかったり).Linux の Version は 4.17.5.
お名前.com で取得していた(ある用途で利用する)ドメインをとある会社に移管したのだが,メールの設定等はそちらでやってね,みたいなことを言われて(正確には,連絡してきた内容が「普通のメールアカウントを作りかた」(しかもメールで先方に指示)のみで),仕方なくお名前.com の共用サーバーに MX 「だけ」向けるアプローチを探すも情報がなかく,Google Compute Engine (GCE)で飼っている VM instance に MX を向けようとするもいろいろハマる.
そもそも以下のとおり,GCE では ポート 25,465,587 はブロックされている.
G Suiteで Gmail 化するということも考えたが Basic で USD 5/month の費用がかかって,特に今回 ML を作成したい(かなりシンプルな設定のみでOK)ということもあって,Google Group ベースの ML を利用するのもちょっとイマイチな気がして(退会案内のフッタが挿入されるとか),いろいろ悩む.
いろいろ悩んだ結果,Compute Engine ドキュメント|インスタンスからのメールの送信で紹介されているクラウドベースの Email Service を利用することにした.候補はCompute Engine のドキュメントにある以下の3つで考える.この時はメール受信のことはあまり考えていなかった.
https://qiita.com/yukari-n/items/45624096582111dd25b9に記事もあったので,Mailgunを利用することにした.設定は至って簡単.https://www.ritolab.com/entry/39にアカウントの作成から順に解説されている.ちょっとだけ DNS (サーバ側)の設定項目が多いが,これはやむなし.
Mailgun には SMTP Server としての機能があるので(送信サーバとして使用するには認証が必要),Compute Engine からメールを送信する場合は postfix をつかって smtp.mailgun.org:2525 に relay するという設定を行うだけでOK (外向きポート2525なのでブロックされない).
受信メールについても Compute Engine 側に転送できるだろうと思っていたのであるが,Mailgun には SMTP を SMTP に relay する機能がなく(メールは別メールアドレスに転送可能),あったとしても結局 Compute Engine 側でブロックされるということに気づく...
ただ,調べてみると Mailgun でメール転送のルールを書くことができ,かつ,メーリングリストの設定も可能なので,Mailgun 上で全て設定することにした(そもそも,Compute Engine から送信可能とする必要もなかったが,Mailgun の Google パートナーページでアカウントを作成しないと無料枠が 10,000 件になる).
Mailgun での各 ML メンバについて,Subscribe するしない,を設定できる.ML への投稿者限定は以下の種類(https://documentation.mailgun.com/en/latest/user_manual.html#mailing-lists).
ML から unsubscribe する自動生成 URL を mail に含めることも可能だが(送信する mail に %mailing_list_unsubscribe_url%
を含める),これは API 経由で送信しなければ %mailing_list_unsubscribe_url%
が正しく変換されない(普通に SMTP で送信するとそのまま送られる).
ちなみに,ML を subscribe している投稿者にはメールが配信されない様子.
MLの詳細.結構独特な挙動をする(特に To: の書き換え).
DontReceiveDuplicates
のような挙動はしない).また,Route 機能で,特定の宛先宛のメールを他のアドレスに転送することができるが(複数転送することも可能),こちらは上記のような書き換え等は発生しない(ただし誰からでも送信可能になって,メンバの管理 I/F も Web のものだと ML のようなバルク登録はサポートしていない(APIを使って自前で用意すれば可能)).
ちなみに ML と Route は排他的ではなく,ML 宛メールが Route のルールにマッチしていれば,ML にも配信されかつ Route のルールも適用される.
http://mailgun-documentation.readthedocs.io/en/latest/user_manual.html#mailing-lists
Mailing Lists work independently from Routes. If there is a Mailing List or Route with the same address, the incoming message will hit the Route and Mailing List simultaneously. This can be pretty convenient for processing replies to the Mailing List and integrating into things like forums or commenting systems.
他にはmailman のホスティングサービスを利用するということも考えられたのかもしれない.一度リストは見たが,選択肢が多く(比較が大変),面倒になって辞めた.
Android Studio を使っていると,各種 Tool の install/update や,AVD (Andriod Virtual Device) のダウンロードで,ファイルが /tmp 以下にダウンロードされる./tmp の容量が小さいと disk が溢れて失敗する.
具体的には /tmp/PackageOperation00/
/tmp/PackageOperation01/
/tmp/PackageOperation02/
みたいな感じで directory が作成されていく.
そもそも /tmp の容量を大きくとればよいのだが,そうも行かない場合もある.この一時保存場所を変更するには,以下のようにすれば良いらしい.
% export _JAVA_OPTIONS=-Djava.io.tmpdir=/somewhere/tmp
% /somewhere/android-studio/bin/studio.sh &
4.18-rc1が出たので.config
がどう変更されるのか見てみた.以下 -
は削除されたもの(or n
),+
は追加されたもの,m->y
等は値の変化.汎用指向の環境.
-CONFIG_CC_STACKPROTECTOR_STRONG=y
+CONFIG_STACKPROTECTOR_STRONG=y
+CONFIG_STACKPROTECTOR=y
Kbuild: rename CC_STACKPROTECTOR[_STRONG] config variables
CONFIG_CC_STACKPROTECTOR_STRONG=y
が CONFIG_STACKPROTECTOR_STRONG=y
と CONFIG_STACKPROTECTOR=y
に分離されたと理解した.以下は HAVE_
関連.
-CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_HAVE_STACKPROTECTOR=y
+CONFIG_CC_HAS_STACKPROTECTOR_NONE=y
+CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
stack-protector: test compiler capability in Kconfig and drop AUTO mode
-CONFIG_CROSS_COMPILE=""
+CONFIG_CC_IS_GCC=y
+CONFIG_GCC_VERSION=60300
+CONFIG_CLANG_VERSION=0
kconfig: add CC_IS_GCC and GCC_VERSION
kconfig: add CC_IS_CLANG and CLANG_VERSION
+CONFIG_CC_HAS_SANCOV_TRACE_PC=y
kcov: test compiler capability in Kconfig and correct dependency
+CONFIG_PLUGIN_HOSTCC=""
gcc-plugins: test plugin support in Kconfig and clean up Makefile
+CONFIG_FAILOVER=y
+CONFIG_NET_FAILOVER=y
net: Introduce net_failover driver
VIRTIO_NET=y
で select されていた.VIRTIO_NET=m
にして m
にする.
+CONFIG_FIXED_PHY=m
+CONFIG_SWPHY=y
lan78xx: Lan7801 Support for Fixed PHY
手元ではUSB_LAN78XX [=m] && NETDEVICES [=y] && USB_NET_DRIVERS [=m]
でselectされていた(手元では USB の Network Adapters は全て m としている).
CONFIG_SWPHY
は CONFIG_FIXED_PHY
でselectされる.
+CONFIG_NET_VENDOR_MICROSEMI=y
net: mscc: Add initial Ocelot switch support
Microsemi Ocelot switch support.使わないので n にしておく.
+CONFIG_PCIE_DW=y
+CONFIG_PCIE_DW_HOST=y
+CONFIG_PCIE_DW_PLAT=y
+CONFIG_PCIE_DW_PLAT_HOST=y
PCI: Collect all native drivers under drivers/pci/controller/
drivers/pci/dwc/
が drivers/pci/controller/dwc/
に移動した影響で y
になっていた.Synopsys の DesignWare PCIe IP.n
にする.
+CONFIG_AUTOFS_FS=m
autofs: remove left-over autofs4 stubs
autofs: create autofs Kconfig and Makefile
今までautofs4.ko
だったものがautofs.ko
になって,これで v3, v4, v5 の全てをサポートするということならしい.CONFIG_AUTOFS4_FS
が CONFIG_AUTOFS_FS
に依存するようになっていて,CONFIG_AUTOFS4_FS
はそのうちに削除される様子.
CONFIG_NF_NAT_MASQUERADE_IPV4: m->y
CONFIG_NF_NAT_REDIRECT: m->y
netfilter: nat: merge ipv4/ipv6 masquerade code into main nat module
netfilter: nat: merge nf_nat_redirect into nf_nat
別モジュール(nf_nat.ko
)に merge された.
+CONFIG_RSEQ=y
+CONFIG_HAVE_RSEQ=y
rseq: Introduce restartable sequences system call
x86: Add support for restartable sequences
restartable sequences system call (rseq()
) system call. 早くなる?
+CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y
Input: elantech - add support for SMBus devices
Elantech PS/2 SMbus TouchPad 用.使う可能性もあるので y で keep.
-CONFIG_CRYPTO_SALSA20_X86_64=m
crypto: x86/salsa20 - remove x86 salsa20 implementations
Speed up.
-CONFIG_HOTPLUG_PCI_SHPC=m
PCI: shpchp: Convert SHPC to be builtin only
shpchp.ko が builtin only になった.使っていなさそうなので n
に.
+CONFIG_UEFI_CPER_X86=y
+CONFIG_ARCH_HAS_PTE_SPECIAL=y
mm: introduce ARCH_HAS_PTE_SPECIAL
X86
selects ARCH_HAS_PTE_SPECIAL
.
+CONFIG_ARCH_HAS_UACCESS_MCSAFE=y
x86/asm/memcpy_mcsafe: Define copy_to_iter_mcsafe()
X86
selects ARCH_HAS_PTE_SPECIAL
if X86_64
.
-CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+CONFIG_COMPAT_32BIT_TIME=y
+CONFIG_GPIOLIB_FASTPATH_LIMIT=512
default 512
+CONFIG_MEMFD_CREATE=y
-CONFIG_HAVE_DMA_API_DEBUG=y
-CONFIG_PCI_BUS_ADDR_T_64BIT=y
-CONFIG_UDF_NLS=y
普段使う DKMS である以下(sid)は,すべて compile に失敗する...
上記DKMS問題,まず broadcom-sta で以下の様な error が出る.
CC [M] /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/shared/linux_osl.o
In file included from ./include/linux/rseq.h:13:0,
from ./include/linux/sched.h:30,
from ./include/linux/ioprio.h:5,
from ./include/linux/fs.h:39,
from ./include/linux/huge_mm.h:7,
from ./include/linux/mm.h:479,
from /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/include/linuxver.h:65,
from /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/shared/linux_osl.c:25:
/usr/lib/gcc/x86_64-linux-gnu/7/include/stdint.h:9:26: error: no include path in which to search for stdint.h
# include_next <stdint.h>
rseq.h
は以下の2つあって,include/uapi/linux/
のものを使うのが正解.
以下の2つのファイルを削除すると broadcom-sta と nvidia-legacy-340xx-kernel-dkms (nvidia-legacy-340xx) は compile できるようになる.
次にnvidia-kernel-dkms.上記対応を想定して,こちらはさらに以下のようなエラー.
gcc -Wp,-MD,/var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/.nvidia-drm-prime-fence.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/7/include -I./arch/x86/include -I./arch/x86/include/generated -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -DCC_HAVE_ASM_GOTO -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=core2 -mno-red-zone -mcmodel=kernel -funit-at-a-time -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_AVX512=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -DRETPOLINE -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-int-in-bool-context -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-var-tracking-assignments -g -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -mrecord-mcount -I/var/lib/dkms/nvidia-current/390.59/build/common/inc -I/var/lib/dkms/nvidia-current/390.59/build -Wall -MD -Wsign-compare -Wno-cast-qual -Wno-error -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"390.59\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE -Wno-sign-compare -Wno-format-extra-args -Werror=undef -I/var/lib/dkms/nvidia-current/390.59/build/nvidia-drm -UDEBUG -U_DEBUG -DNDEBUG -DNV_BUILD_MODULE_INSTANCES=0 -DMODULE -DKBUILD_BASENAME='"nvidia_drm_prime_fence"' -DKBUILD_MODNAME='"nvidia_drm"' -c -o /var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/.tmp_nvidia-drm-prime-fence.o /var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/nvidia-drm-prime-fence.c
./tools/objtool/objtool orc generate --module --no-fp --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-modeset/.tmp_nvidia-modeset-linux.o";
./tools/objtool/objtool orc generate --module --no-fp --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-uvm/.tmp_uvm8_mmu_test.o";
./tools/objtool/objtool orc generate --module --no-fp --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/.tmp_nvidia-drm.o";
./tools/objtool/objtool orc generate --module --no-fp --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-uvm/.tmp_uvm8_peer_identity_mappings_test.o";
./tools/objtool/objtool orc generate --module --no-fp --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-uvm/.tmp_uvm8_pmm_sysmem_test.o";
In file included from ./include/drm/drmP.h:82:0,
from /var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/nvidia-drm-priv.h:30,
from /var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/nvidia-drm-drv.c:25:
/var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/nvidia-drm-drv.c:637:23: error: ‘DRM_CONTROL_ALLOW’ undeclared here (not in a function); did you mean ‘DRM_RENDER_ALLOW’?
DRM_CONTROL_ALLOW|DRM_UNLOCKED),
^
./include/drm/drm_ioctl.h:162:12: note: in definition of macro ‘DRM_IOCTL_DEF_DRV’
.flags = _flags, \
^~~~~~
対応するLinux側の変更は以下.
以下のようにDRM_CONTROL_ALLOW
をnvidia-drm/nvidia-drm-drv.c
から削除すればcompileはとおる.
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -634,26 +634,26 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
DRM_IOCTL_DEF_DRV(NVIDIA_GEM_IMPORT_NVKMS_MEMORY,
nv_drm_gem_import_nvkms_memory_ioctl,
- DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+ DRM_UNLOCKED),
#endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
DRM_IOCTL_DEF_DRV(NVIDIA_GEM_IMPORT_USERSPACE_MEMORY,
nv_drm_gem_import_userspace_memory_ioctl,
- DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+ DRM_RENDER_ALLOW|DRM_UNLOCKED),
DRM_IOCTL_DEF_DRV(NVIDIA_GET_DEV_INFO,
nv_drm_get_dev_info_ioctl,
- DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+ DRM_RENDER_ALLOW|DRM_UNLOCKED),
#if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ)
DRM_IOCTL_DEF_DRV(NVIDIA_FENCE_SUPPORTED,
nv_drm_fence_supported_ioctl,
- DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+ DRM_RENDER_ALLOW|DRM_UNLOCKED),
DRM_IOCTL_DEF_DRV(NVIDIA_FENCE_CONTEXT_CREATE,
nv_drm_fence_context_create_ioctl,
- DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+ DRM_RENDER_ALLOW|DRM_UNLOCKED),
DRM_IOCTL_DEF_DRV(NVIDIA_GEM_FENCE_ATTACH,
nv_drm_gem_fence_attach_ioctl,
- DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+ DRM_RENDER_ALLOW|DRM_UNLOCKED),
#endif
DRM_IOCTL_DEF_DRV(NVIDIA_GET_CLIENT_CAPABILITY,
@@ -662,7 +662,7 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
DRM_IOCTL_DEF_DRV(NVIDIA_GET_CRTC_CRC32,
nv_drm_get_crtc_crc32_ioctl,
- DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+ DRM_RENDER_ALLOW|DRM_UNLOCKED),
#endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
};
ちなみに現状,実動作は未検証.
https://www.xilinx.com/support/download.html の Xilinx FPGA 向けのツール Vivado の最新版 2018.1 であるが,Linux Self Extracting Web Installer も All OS installer (Single-File) も,どちらも rdi_0339_2018.1_0405_1.xz
というファイルを展開箇所でエラーになり,インストールできない.Linux Self Extracting Web Installer しか試していないが 2017.4 も rdi_0276_2017.4_1216_1.xz
の箇所でエラーになる.メッセージは以下のようなもの.
The possible reasons can be: the disk is full,
you've exceeded disk quota, or the destination directory is too long.
Disk full にはなっていないし,directory もそれほど深くなく,かつ filesystem (btrfs) も特に error message を出していない.原因不明.
https://japan.xilinx.com/support/answers/64982.html に解決のヒントが書いてあった...
/opt/Xlinix_web
に install しようとしていたのだが ~/.Xilinx/xinstall/xinstall_*.log
によると /opt/Xilinx/.xinstall/xic
への書き込み権限がなく失敗していた模様.確かに /opt/Xilinx/
は NFS mount した read-only filesystem.
PC使用中(gnome 環境)に突然画面が真っ暗になる症状に見舞われる.kernel.log
には以下が10秒おきに出力されていた.GPUはNVIDIA Quadro K600.
nvidia-modeset: ERROR: GPU:0: Failed to query display engine channel state: 0x0000XXXX:X:0:0x0000000X
ドライバ(nvidia-kernel-dkms 390.48-2~bpo9+1)やKernel (Linux 4.16.9)周りを疑ったが,ググった感じだと overheating が原因の可能性があることがわかった.
ということで,nvidia-setting
で温度とFANスピードを確認したところ,温度が90度を越えていて,FANスピードは0 RPMだった.ケースを開けて確認したところFANが故障していた(軸がずれたのか,回転が引っかかる感じで全然回ってくれない).GPUボードを取り除いて,オンボードで運用することに.
Windows 10 April 2018 Update の影響で,ちょっとした事情により \windows\system32
以下のファイルを一部前のバージョンに戻す必要があって(ファイルは事前に copy していた),access control list (ACL) も含めて戻したかったので,ACL および icacls 関連メモ(必要最小限).
owner を Administrators group に: takeown /a /f file
See takeown.
owner 確認: get-acl file
コマンドプロンプト(cmd
)の dir file /q
でも可,powershell の dir
は get-childitem
なので,通常の dir
と挙動が異なる.
ACL確認: icacls file
フラグの意味とかは https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/icacls 参照.
F
: full accessRX
: read and executeI
: inheritance (属性の継承)See icacls.
継承の無効化: icacls file /inheritance:d
owner 変更: icacls file /setowner "NT SERVICE\TrustedInstaller"
ACL 属性変更: 以下のとおり./grant:r
のように :r
を付けるとまるごと変更される(以下では F → RX).付けない場合は grant を追加.
icacls file /grant "BUILDIN\Administrators:F"
icacls file /grant:r "BUILDIN\Administrators:RX"
結局やりたかったのは owner を TrustedInstaller にしつつ Administrators に RX 権限付与(を Administrator で)なのだが,一旦 owner を Administrators にしてしまって,BUILDIN\Administrators:F
の状態で owner を TrustedInstaller にしたり,他の ACL を付与したりして,最後に icacls file /grant:r "BUILDIN\Administrators:RX"
すれば良いらしい./grant:r
を知らず少し嵌った.
Debian GNU/Linux sid の pandoc (markdown (.md) を html 等に変換するあれ)がこのところ慌ただしく version up されて,仕様変更がかなりある.以下,stable の pandoc (1.17.2) と sid の pandoc (2.2) で比較.
インデントは either 4 spaces or one tab というのが標準的なのだが,2 spaces でも正しく解釈されるようになった.
pandoc 1.17.2% echo "
- A
- B
" | pandoc
<ul>
<li>A</li>
<li>B</li>
</ul>
pandoc 2.2% echo "
- A
- B
" | pandoc
<ul>
<li>A
<ul>
<li>B</li>
</ul></li>
</ul>
pandoc 1.17.2% echo "
- A
- B
" | pandoc
<ul>
<li>A
<ul>
<li>B</li>
</ul></li>
</ul>
pandoc 2.2% echo "
- A
- B
" | pandoc
<ul>
<li>A
<ul>
<li>B</li>
</ul></li>
</ul>
---
を em-dash (—
), --
を en-dash (–
), ...
を省略記号(…
)として出力したりする機能(smart)が default の挙動になった.以前の option は -S
だったが,これは廃止されて,markdown-smart
(smart off) や markdown+smart
(smart on) のように format を指定する仕様に.
pandoc 1.17.2% echo "A - B -- C --- D ... Mr. Abc'" | pandoc
<p>A - B -- C --- D ... Mr. Abc'</p>
pandoc 1.17.2% echo "A - B -- C --- D ... Mr. Abc'" | pandoc -S
<p>A - B – C — D … Mr. Abc’</p>
pandoc 2.2% echo "A - B -- C --- D ... Mr. Abc'" | pandoc -f markdown-smart
<p>A - B -- C --- D ... Mr. Abc'</p>
pandoc 2.2% echo "A - B -- C --- D ... Mr. Abc'" | pandoc
<p>A - B – C — D … Mr. Abc’</p>
わかりにくいかもしれないが,+smart
の場合 Mr. の後は改行禁止のスペース(Non-breaking space;
,  
)になっている.また single quote も全角 single quote (’; ’
?)になる.
ついでに...''
や ""
で囲んでいる場合,自動で左右の適切な quote に変換される.また \
で escape 可能.以下のとおり.
pandoc 2.2% echo "'A'" | pandoc
<p>‘A’</p>
pandoc 2.2% echo "\'A\'" | pandoc
<p>'A'</p>
pandoc 2.2% echo '"A"' | pandoc
<p>“A”</p>
pandoc 2.2% echo '\"A\"' | pandoc
<p>"A"</p>
pandoc 2.2% echo "A--B" | pandoc
<p>A–B</p>
pandoc 2.2% echo "A\--B" | pandoc
<p>A--B</p>
行末の\の取り扱いが変更になっているらしく,これはちょっと悩ましい.
pandoc 1.17.2% pandoc
# Hi\
there
<h1 id="hi-there">Hi<br />
there</h1>
pandoc 2.2.1% pandoc
# Hi\
there
<h1 id="hi">Hi<br />
</h1>
<p>there</p>
pandoc 2.2.1% pandoc -f markdown-escaped_line_breaks
# Hi\
there
<h1 id="hithere">Hi
there</h1>
pandoc 2.2.1% pandoc -f markdown-escaped_line_breaks
# Hi<br />\
there
<h1 id="hi-there">Hi<br />
there</h1>
Header でなければ一応挙動は同じっぽい.
pandoc 1.17.2% pandoc
Hi\
there
<p>Hi<br />
there</p>
pandoc 2.2.1% pandoc
Hi\
there
<p>Hi<br />
there</p>
4.17-rc1が出たので.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの.汎用指向の環境.以下の warning がそこそこの量出ていたが,/sys/fs/pstore/
の下にいくつか以前の log が保存されていた模様.削除したら warning も出なくなった.
pstore: crypto_comp_decompress failed, ret = -22!
pstore: decompression failed: -22
-CONFIG_THIN_ARCHIVES=y
kbuild: remove incremental linking option
ld -r
がどのアーキテクチャでも使用されないので,削除された.つまり CONFIG_THIN_ARCHIVES=y
が Default の動作に.
-CONFIG_ARCH_HAS_PHYS_TO_DMA=y
dma/direct: Handle the memory encryption bit in common code
X86
で select されなくなった.
+CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y
syscalls/core: Introduce CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y
syscalls/core: Prepare CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y for compat syscalls
syscalls/x86: Use ‘struct pt_regs’ based syscall calling for IA32_EMULATION and x32
syscalls/x86: Use ‘struct pt_regs’ based syscall calling convention for 64-bit syscalls
syscalls/x86: Unconditionally enable ‘struct pt_regs’ based syscalls on x86_64
X86_64
で select される.
-CONFIG_X86_FAST_FEATURE_TESTS=y
x86: Remove FAST_FEATURE_TESTS
削除された.
+CONFIG_ARCH_HAS_KEXEC_PURGATORY=y
kexec_file: make use of purgatory optional
config ARCH_HAS_KEXEC_PURGATORY
def_bool KEXEC_FILE
CONFIG_KEXEC_FILE=y
で y に.
+CONFIG_MMCONF_FAM10H=y
x86/jailhouse: Allow to use PCI_MMCONFIG without ACPI
Jailhouse Hypervisor 向けのちょっとした修正と理解.CONFIG_JAILHOUSE_GUEST
は x86/jailhouse: Add infrastructure for running in non-root cell で導入されているが,こちらは n にしておく.
+CONFIG_IP_MROUTE_COMMON=y
ipmr,ipmr6: Define a uniform vif_device
CONFIG_IP_MROUTE
(IP: multicast routing)で select される.
+CONFIG_NET_VENDOR_NI=y
net: ethernet: nixge: Add support for National Instruments XGE netdev
NI_XGE_MANAGEMENT_ENET
を利用にできるようになるが,これが ARCH_ZYNQ
(Xilinx) に依存するので,n にしておく.
-CONFIG_B43_PCICORE_AUTOSELECT=y
-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
-CONFIG_SSB_DRIVER_PCICORE=y
config SSB_DRIVER_PCICORE_POSSIBLE
bool
depends on SSB_PCIHOST && SSB = y
default y
ssb: Prevent build of PCI host features in module
SSB_DRIVER_PCICORE_POSSIBLE
がSSB = y
に依存するようになって,手元ではSSB = m
なので,まるごと非選択に.
+CONFIG_DAX_DRIVER=y
dax: introduce CONFIG_DAX_DRIVER
Defined at drivers/dax/Kconfig:1
Selects: DAX [=y]
Selected by [m]:
- BLK_DEV_PMEM [=m] && LIBNVDIMM [=m]
今まで CONFIG_DAX=y なら y になる.
-CONFIG_PSTORE_ZLIB_COMPRESS=y
+CONFIG_PSTORE_DEFLATE_COMPRESS=y
+CONFIG_PSTORE_COMPRESS=y
+CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y
+CONFIG_PSTORE_COMPRESS_DEFAULT="deflate"
-CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_DEFLATE=y
pstore: Use crypto compress API
pstore: Select compression at runtime
CONFIG_PSTORE_ZLIB_COMPRESS
は CONFIG_PSTORE_DEFLATE_COMPRESS
に rename.
CONFIG_PSTORE_DEFLATE_COMPRESS=y
なので CONFIG_CRYPTO_DEFLATE
も y に.CONFIG_PSTORE_DEFLATE_COMPRESS=m
にして,CONFIG_CRYPTO_DEFLATE
も m に.ついでに CONFIG_PSTORE_LZO_COMPRESS
,CONFIG_PSTORE_LZ4_COMPRESS
,CONFIG_PSTORE_LZ4HC_COMPRESS
も m にして,CONFIG_PSTORE_LZ4_COMPRESS_DEFAULT=y
,CONFIG_PSTORE_COMPRESS_DEFAULT="lz4"
に.
CONFIG_ACPI_APEI=n
にして CONFIG_PSTORE=n
して,まるごと platform dependent persistent storage を disable することも考えられるが.
+CONFIG_LOCK_DEBUGGING_SUPPORT=y
locking/Kconfig: Add LOCK_DEBUGGING_SUPPORT to make it more readable
depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
default y
-CONFIG_CRYPTO_ABLK_HELPER=m
crypto: ablk_helper - remove ablk_helper
crypto_simd
に移行したので不要になって削除された.
+CONFIG_DMA_DIRECT_OPS=y
dma-direct: rename dma_noop to dma_direct
x86/dma: Use DMA-direct (CONFIG_DMA_DIRECT_OPS=y)
4.17-rc3 で以下追加.
+CONFIG_ARCH_HAS_FILTER_PGPROT=y
x86/pti: Filter at vma->vm_page_prot population
X86
からselectされる.
4.17-rc7 で以下追加.
+CONFIG_B43_PCICORE_AUTOSELECT=y
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
Revert “ssb: Prevent build of PCI host features in module”
SSB_DRIVER_PCICORE_POSSIBLE
がSSB = y
に依存するcommitがrevertされた.この付近,毎度混乱している.
いつも ML を作成する際は fml 4 を利用していたのだが,使えないことはないのだが(若干の patch が必要)最近利用している人がめっきり減ってきているので Mailman を利用することにした.
Debian GNU/Linux Stretch で mailman3 package (backports 3.1.1-8~bpo9+1)を利用しようとしたのだが,RDBMS に依存したうえかなり手作業で調整する必要がありそうだったので,mailman package (1:2.1.23-1+deb9u2) を利用.
(注(2021/9/8): 2021/8/14 にリリースされた Debian 11 “bullseye” には mailman package が無いので,選択肢としては mailman3 のみ.See 特記すべき時代遅れとなったパッケージたち.)
インストールは基本的に aptitude 等で mailman package を入れるだけ(debconf でもろもろ聞かれるが適当に答える; 言語とか).
list group に属していれば一般ユーザ権限で ML の操作が可能.以下手動でメンバの操作をして,参加者からの制御を禁止するMLの設定例.Default の状態だとかなりメンバ宛にいろいろなメールが届いてちょっと鬱陶しいので.
% /usr/sbin/newlist mytestml
Enter the email of the person running the list: myn@example.com
Initial mytestml password:
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:
## mytestml mailing list
mytestml: "|/var/lib/mailman/mail/mailman post mytestml"
mytestml-admin: "|/var/lib/mailman/mail/mailman admin mytestml"
mytestml-bounces: "|/var/lib/mailman/mail/mailman bounces mytestml"
mytestml-confirm: "|/var/lib/mailman/mail/mailman confirm mytestml"
mytestml-join: "|/var/lib/mailman/mail/mailman join mytestml"
mytestml-leave: "|/var/lib/mailman/mail/mailman leave mytestml"
mytestml-owner: "|/var/lib/mailman/mail/mailman owner mytestml"
mytestml-request: "|/var/lib/mailman/mail/mailman request mytestml"
mytestml-subscribe: "|/var/lib/mailman/mail/mailman subscribe mytestml"
mytestml-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mytestml"
Hit enter to notify mytestml owner...
これで owner (myn@example.com) 宛に以下のメールが届く(newlist
に -q
option を付けると届かない).
To: myn@example.com
Subject: Your new mailing list: mytestml
From: mailman-owner@example.com
Content-Type: text/plain; charset="utf-8"
Message-ID: <mailman.0.XXXXXXXXXX.XXXXX.mytestml@example.com>
Date: Tue, 27 Mar 2018 10:15:05 +0900
X-List-Administrivia: yes
The mailing list `mytestml' has just been created for you. The
following is some basic information about your mailing list.
Your mailing list password is:
xxxxxxxx
You need this password to configure your mailing list. You also need
it to handle administrative requests, such as approving mail if you
choose to run a moderated list.
You can configure your mailing list at the following web page:
http://example.com/cgi-bin/mailman/admin/mytestml
The web page for users of your mailing list is:
http://example.com/cgi-bin/mailman/listinfo/mytestml
You can even customize these web pages from the list configuration
page. However, you do need to know HTML to be able to do this.
There is also an email-based interface for users (not administrators)
of your list; you can get info about using it by sending a message
with just the word `help' as subject or in the body, to:
mytestml-request@example.com
To unsubscribe a user: from the mailing list 'listinfo' web page,
click on or enter the user's email address as if you were that user.
Where that user would put in their password to unsubscribe, put in
your admin password. You can also use your password to change
member's options, including digestification, delivery disabling, etc.
Please address all questions to mailman-owner@example.com.
From: が mailman-owner@example.com
になっているが,インストール時に mailman という名前の ML を作成するように言われて作ったような気もする.
/etc/aliases
については以下のみ追加, newaliases
する.
mytestml: "|/var/lib/mailman/mail/mailman post mytestml"
mytestml-bounces: "|/var/lib/mailman/mail/mailman bounces mytestml"
mytestml-owner: "|/var/lib/mailman/mail/mailman owner mytestml"
mytestml は ML の宛先,mytestml-bounces は配信時の envelope from.mytestml-owner には何かあった時に mailman から連絡が届く(メンバ外からの投稿を許可していない状態でメンバ外からメールが来た際に moderate request が届いたり).他は今回目的外なので,そもそも aliases に登録しない.
手元の環境では sudo a2enmod cgid
して,/etc/apache2/sites-enabled/
に /etc/mailman/apache.conf
への symlink を配置するのみで動作している.ただし,外部公開はかなり危険なので,サーバ自体へのアクセスを制限(iptables).各種 URL は以下のとおり.
http://example.com/cgi-bin/mailman/listinfo
http://example.com/cgi-bin/mailman/admin
http://example.com/cgi-bin/mailman/listinfo/mytestml
http://example.com/cgi-bin/mailman/admin/mytestml
http://example.com/pipermail/mytestml/
http://example.com/cgi-bin/mailman/private/mytestml/
以下で現在の設定を Export.
% /usr/sbin/config_list -o mytestml.conf mytestml
mytestml.conf
(python) を修正のうえ,以下で Import.
/usr/sbin/config_list -i mytestml.conf mytestml
Web interface もあるが,上記が最も手軽で再現性がある.以下設定メモ.
send_welcome_msg
, send_goodbye_msg
(0: No, 1: Yes, Default: 1)To: myn@example.com
Subject: Welcome to the "Mytestml" mailing list
From: mytestml-request@example.com
Content-Type: text/plain; charset="utf-8"
Message-ID: <mailman.0.XXXXXXXXXX.XXXXX.mytestml@example.com>
Date: Tue, 27 Mar 2018 10:37:05 +0900
X-List-Administrivia: yes
Welcome to the Mytestml@example.com mailing list!
To post to this list, send your message to:
mytestml@example.com
General information about the mailing list is at:
http://example.com/cgi-bin/mailman/listinfo/mytestml
If you ever want to unsubscribe or change your options (eg, switch to
or from digest mode, change your password, etc.), visit your
subscription page at:
http://example.com/cgi-bin/mailman/options/mytestml/myn%40example.com
You can also make such adjustments via email by sending a message to:
Mytestml-request@example.com
with the word `help' in the subject or body (don't include the
quotes), and you will get back a message with instructions.
You must know your password to change your options (including changing
the password, itself) or to unsubscribe without confirmation. It is:
xxxxxxxx
Normally, Mailman will remind you of your example.com
mailing list passwords once every month, although you can disable this
if you prefer. This reminder will also include instructions on how to
unsubscribe or change your account options. There is also a button on
your options page that will email your current password to you.
To: myn@example.com
Subject: You have been unsubscribed from the Mytestml mailing list
From: mytestml-bounces@example.com
Content-Type: text/plain; charset="utf-8"
Message-ID: <mailman.0.XXXXXXXXXX.XXXXX.mytestml@example.com>
Date: Tue, 27 Mar 2018 10:41:49 +0900
X-List-Administrivia: yes
subject_prefix
(文字列, Default: '[Mytestml] '
)
Subject の先頭部分に追加される prefix.ML の存在をあまりユーザに気にさせたくないので,空(’’)にする.
msg_footer
(文字列)
各メールの末尾に追加される内容.鬱陶しいので空(''
)にする.
include_rfc2369_headers
(0: No, 1: Yes, Default: 1)
RFC2369のヘッダを付加するか否か.ユーザに操作させたくない(MLの存在もあまり気にさせたくない)ので,0 にする.
include_list_post_header
(0: No, 1: Yes, Default: 1)
List-Post:
ヘッダ(以下のメールのヘッダの List-Post:
部参照)を付加するか否か.include_rfc2369_headers
が 0 であれば include_list_post_header
の値によらず付加されない.
以下 subject_prefix
, msg_footer
, include_rfc2369_headers
が default の状態の投稿.
To: mytestml@example.com
Subject: [Mytestml] test
From: myn@example.com
Delivered-To: mytestml@example.com
Date: Tue, 27 Mar 2018 10:45:31 +0900
Message-ID: <xxxx@example.com>
Precedence: list
List-Id: <mytestml.example.com>
List-Unsubscribe: <http://example.com/cgi-bin/mailman/options/mytestml>, <mailto:mytestml-request@example.com?subject=unsubscribe>
List-Archive: <http://example.com/pipermail/mytestml/>
List-Post: <mailto:mytestml@example.com>
List-Help: <mailto:mytestml-request@example.com?subject=help>
List-Subscribe: <http://example.com/cgi-bin/mailman/listinfo/mytestml>, <mailto:mytestml-request@example.com?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Errors-To: mytestml-bounces@example.com
Sender: "Mytestml" <mytestml-bounces@example.com>
test
--
myn.meganecco.org
_______________________________________________
Mytestml mailing list
Mytestml@example.com
http://example.com/cgi-bin/mailman/listinfo/mytestml
digestable
(0: No, 1: Yes, Default: 1), digest_footer
(文字列)
使わない機能なので 0 にして,footer も空(’’)にする.
archive
(0: No, 1: Yes, Default: 1), archive_private
(0: No, 1: Yes, Default: 0)
http://example.com/pipermail/mytestml/
に ML アーカイブが作成される.archive はするが非公開にするため archive_private
を 1 にする.
private archive の URL は http://example.com/cgi-bin/mailman/private/mytestml/
でメールアドレス毎にパスワードが必要になる.
advertised
(0: No, 1: Yes, Default: 1)
Mailman の Web I/F top に ML の情報を掲載するか否か.0 にする.
subscribe_policy
(1 = “Confirm”, 2 = “Require approval”, 3 = “Confirm and approve”, Default: 1)
念の為 2 か 3 にする.
private_roster
(0 = “Anyone”, 1 = “List members”, 2 = “List admin only”, Default: 1)
念の為 2 にしておく.
require_explicit_destination
(0:No, 1:Yes, Default: 1)
これが 1 だと,ML に Bcc で送付するなど(もしくは転送など),ML の email address が To や Cc に含まれない場合に admin proval が要求される.都合により 0 にする.
collapse_alternatives
(0:No, 1:Yes, Default: 1),
convert_html_to_plaintext
(0:No, 1:Yes, Default: 1)
元のメールのまま配信したいのでともに 0 にする.
generic_nonmember_action
(0 = “Accept”, 1 = “Hold”, 2 = “Reject”, 3 = “Discard”, Default: 1)
Non-member からの投稿を許可する場合 0 にする.
max_message_size
(Default: 40 (kilobytes))
0 (無制限)にする.
Reply-To: の制御.以下の設定項目があるが,Default で Reply-To: は付かず,元から付いていたら削除もしない.
first_strip_reply_to = 0
reply_goes_to_list = 0
reply_to_address = ''
メンバ全員削除.
% /usr/sbin/remove_members -a mytestml
メンバリスト export.
% /usr/sbin/list_members mytestml > mytestml.members.txt
(Regular)メンバ追加.mytestml.members.txt
に one address per line 形式でメールアドレスをリストしておく.-r
ではなく -d
を使うと digest member になるが,この機能は今回使わない.
% /usr/sbin/add_members -r mytestml.members.txt mytestml
以下が仕込まれる(/etc/cron.d/mailman
).
0 8 * * * list [ -x /usr/lib/mailman/cron/checkdbs ] && /usr/lib/mailman/cron/checkdbs
0 9 * * * list [ -x /usr/lib/mailman/cron/disabled ] && /usr/lib/mailman/cron/disabled
0 12 * * * list [ -x /usr/lib/mailman/cron/senddigests ] && /usr/lib/mailman/cron/senddigests
0 5 1 * * list [ -x /usr/lib/mailman/cron/mailpasswds ] && /usr/lib/mailman/cron/mailpasswds
27 3 * * * list [ -x /usr/lib/mailman/cron/nightly_gzip ] && /usr/lib/mailman/cron/nightly_gzip
30 4 * * * list [ -x /usr/lib/mailman/cron/cull_bad_shunt ] && /usr/lib/mailman/cron/cull_bad_shunt
0 5 1 * *
の mailpasswds が気になるが(テストし辛い...),これは各MLの send_reminders (0:No, 1:Yes, Default: 0)
を見て送付するかどうかを決めているので,特に問題なさげ.
「mailman 設定」でGoogle検索するとトップに現れる https://www.speever.jp/vzmanual/mailman/ は,丁寧に設定のやり方が書かれている割に,誤りが多いような気がする(訳した際に解釈を誤ったか,ヴァージョン違い?).
new_member_options
(Default: 256) というのがあって,これは新規ユーザ追加時のオプションで,DontReceiveDuplicates
(nodupes) flag のみ On になるのが Default の設定.各ビットの意味は以下のとおり.
[/usr/lib/mailman/Mailman/Defaults.py]
# Bitfield for user options. See DEFAULT_NEW_MEMBER_OPTIONS above to set
# defaults for all new lists.
Digests = 0 # handled by other mechanism, doesn't need a flag.
DisableDelivery = 1 # Obsolete; use set/getDeliveryStatus()
DontReceiveOwnPosts = 2 # Non-digesters only
AcknowledgePosts = 4
DisableMime = 8 # Digesters only
ConcealSubscription = 16
SuppressPasswordReminder = 32
ReceiveNonmatchingTopics = 64
Moderate = 128
DontReceiveDuplicates = 256
DontReceiveDuplicates
(nodupes) だが,To: 個人,Cc: ML のメールで,この個人が ML メンバだった場合に,その個人にこのメールを配信しない,というオプション.通常はこの手のメールは2通届いたりするのだが,mailman の場合は default で重複配信しないようになっている.
max_num_recipients
(Default: 10) というのがあって,これは,この数字以上の宛先がメールに含まれている場合に admin proval を要求するというもの.0 だと制限がなくなる.通常は 10 ぐらいで充分なのだが,メールのやり取りをしている間に宛先が徐々に増えていって,この制限に引っかかる事例が発生した.0 は少し怖いので少しだけ大きく 15 にしておいた.
AirAsia X のクアランプール便(経由)を使ってランカウイ島まで行ったのでその際のメモ.
Satellite Building 3F から Skybridge 方向.写真 3F 左方向はホテル設備,背後はフードコート.エスカレーターで 2F に降りてそのまま真っすぐ奥方向,スターバックス・インターネットコーナーの奥に喫煙所.2F に降りて写真の左奥にシャワー設備のあるトイレ.
2Fにおりたところ.左奥,スターバックスの裏付近に喫煙所.写真の左に映っているのは土産物屋で,ドリアンやマンゴーのお菓子や,石鹸(なまこ石鹸)等を売っている.ドリアンの菓子を買おうとしたら,どこから来たのか聞かれて,日本だと答えると,日本人はあまりドリアン好まないよ,という普通の情報がもらえる.
今年も確定申告の時期になったので,Web で処理しようとするのだが,環境が変わったせいか(Google Chrome on Linux),利用者識別番号を入力するところでブラウザに Not secure だと怒られる(以下の証明書がNET::ERR_CERT_AUTHORITY_INVALID
).
Issued To
Common Name (CN) uketsuke.e-tax.nta.go.jp
Organization (O) Japanese Government
Organizational Unit (OU) Ministry of Finance
Issued By
Common Name (CN) ApplicationCA2 Sub
Organization (O) Japanese Government
Organizational Unit (OU) GPKI
ということで,前にもやったが再度メモ.今は証明書単体のダウンロードが可能になっている.あと,書類作成だけであれば APCA2Root.der のみあれば充分(最終提出は Windows の Internet Explorer から).
http://www.gpki.go.jp/ から「アプリケーション認証局2の証明書(APCA2Root.der)」をダウンロード.
以下のコマンドでfingerprintがhttps://www.gpki.go.jp/selfcert/finger_print.htmlのものと一致するか確認(このページの証明書もこのRootで署名されているので Not secture と怒られる).ついでに PEM に変換.
% openssl x509 -noout -fingerprint -sha1 -inform def -in APCA2Root.der
SHA1 Fingerprint=F0:0F:C3:7D:6A:1C:92:61:FB:6B:C1:C2:18:49:8C:5A:A4:DC:51:FB
% openssl x509 -inform der -in APCA2Root.der -out APCA2Root.pem
chrome://settings/certificatesの Authoriies から PEM を Import.その際「Trust this certificate for identifying websites」にcheckをしておく.
https://www.gpki.go.jp/selfcert/finger_print.htmlを開いて怒られないことを確認.
いつのまにかお名前.comレンタルサーバーの共用サーバーSDでSSLが利用可能になっていた.https://www.onamae-server.com/news/180122_2.htmlによると2018/01/22から提供していたらしい.コントロールパネルで設定可能.中身は Let’s Encrypt (日本語による総合ポータル).
Chrome 68 からすべてのHTTPサイトで Not secure と表示されるらしい,というのもあってSSL化した.
4.16-rc1が出たので.config
がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.汎用指向の環境.ちなみにmake menuconfig
するのにbison
とflex
が必要になっている.kbuild: prepare to remove C files pre-generated by flex and bison参照.
+CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
+CONFIG_FUNCTION_ERROR_INJECTION=y
error-injection: Separate error-injection from kprobe
CONFIG_HAVE_FUNCTION_ERROR_INJECTION
は Selected by: X86 [=y] でFUNCTION_ERROR_INJECTION
は以下.
config FUNCTION_ERROR_INJECTION
def_bool y
depends on HAVE_FUNCTION_ERROR_INJECTION && KPROBES
+CONFIG_ACPI_SPCR_TABLE=y
ACPI: SPCR: Make SPCR available to x86
config ACPI_SPCR_TABLE
bool "ACPI Serial Port Console Redirection Support"
default y if X86
y にしておく.
+CONFIG_SATA_MOBILE_LPM_POLICY=0
ahci: Allow setting a default LPM policy for mobile chipsets
config SATA_MOBILE_LPM_POLICY
int "Default SATA Link Power Management policy for mobile chipsets"
range 0 4
default 0
0にしておく.
+CONFIG_NET_VENDOR_CORTINA=y
net: ethernet: Add a driver for Gemini gigabit ethernet
n にする.
+CONFIG_NET_VENDOR_SOCIONEXT=y
net: ethernet: socionext: add AVE ethernet driver
Socionext (Panasonic) の UniPhier 向け ether driver.n にする.
+CONFIG_SSB_SPROM=y
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_B43_PCI_BRIDGE=y
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
ssb: Do not disable PCI host on non-Mips
PCI_DRIVERS_LEGACY
に依存していたところが (PCI_DRIVERS_LEGACY || !MIPS)
になってまるごと復活.Bug だった模様.
-CONFIG_HW_RANDOM_TPM=m
+CONFIG_HW_RANDOM_TPM=y
tpm: Move Linux RNG connection to hwrng
config HW_RANDOM_TPM
bool "TPM HW Random Number Generator support"
depends on TCG_TPM && HW_RANDOM && !(TCG_TPM=y && HW_RANDOM=m)
default y
yかn.yにしておく.
-CONFIG_MFD_RTSX_PCI=m
-CONFIG_MMC_REALTEK_PCI=m
misc: rtsx: Move Realtek Card Reader Driver to misc
CONFIG_MISC_RTSX_PCI
に移された模様.CONFIG_MISC_RTSX_PCI=m
で,CONFIG_MMC_REALTEK_PCI
も m に.
以下,その他.
+CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
membarrier: Provide core serializing command, *_SYNC_CORE
membarrier/x86: Provide core serializing command
Selected by: X86 [=y]
+CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
x86: Implement thread_struct whitelist for hardened usercopy
Selected by: X86 [=y]
-CONFIG_CC_STACKPROTECTOR=y
+CONFIG_ARCH_HAS_PHYS_TO_DMA=y
dma-mapping: move swiotlb arch helpers to a new header
Selected by: X86 [=y]
+CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y
locking: Introduce sync_core_before_usermode()
lockin/x86: Implement sync_core_before_usermode()
Selected by: X86 [=y]
-CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y
+CONFIG_NETFILTER_FAMILY_BRIDGE=y
netfilter: don’t allocate space for arp/bridge hooks unless needed
-CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_DRM_SCHED=m
drm: move amd_gpu_scheduler into common location
Selected by: DRM_AMDGPU [=m] && HAS_IOMEM [=y] && DRM [=m] && PCI [=y] && MMU [=y]
+CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
drm: Add panel orientation quirks, v6.
drm: Fix PANEL_ORIENTATION_QUIRKS breaking the Kconfig DRM menuconfig
+CONFIG_VIRTIO_MENU=y
+CONFIG_SGL_ALLOC=y
lib/scatterlist: Introduce sgl_alloc() and sgl_free()
crypto: scompress - use sgl_alloc() and sgl_free()
手元の環境では CRYPTO_ACOMP2 [=y] && CRYPTO [=y]
で Select されてた.
なお,普段使う DKMS である以下(sid)は特に問題なく compile できている.
4.16-rc2で以下追加になった.
+CONFIG_NR_CPUS_RANGE_BEGIN=2
+CONFIG_NR_CPUS_RANGE_END=512
+CONFIG_NR_CPUS_DEFAULT=64
x86/Kconfig: Simplify NR_CPUS config
x86/Kconfig: Further simplify the NR_CPUS config
4.16-rc4で以下の変更があった.
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
kconfig: set SYMBOL_AUTO to the symbol marked with defconfig_list
+CONFIG_VIDEOBUF2_V4L2=m
media: videobuf2: Add VIDEOBUF2_V4L2 Kconfig option for VB2 V4L2 part
4.16がリリースされていて,少し試してみたところ nvidia.ko の compile は問題ないのだが,modprobe する際に以下のようなエラーがでて nvidia.ko が利用できない(nvidia-kernel-dkms 384.111-3~bpo9+1).
Apr 2 16:02:45 XXXX kernel: [ 178.010148] nvidia: Unknown symbol swiotlb_map_sg_attrs (err 0)
以下に原因と解決法がまとめられているが少し面倒.
具体的には以下の kernel の修正に対応するように nvidia の driver の source code にパッチをあてたりする必要がある.
やはり面倒なので,bpo package の更新を待つことにして 4.15 系を利用することに...
上記Unknown symbol swiotlb_map_sg_attrs
の件,以下のパッチをあてることにした.usercopy: WARN() on slab cache usercopy region violations に対する対応については,手元の環境ではCONFIG_HARDENED_USERCOPY
がy
ではないので,そのまま放置(WARNINGさえ出ない).
--- a/common/inc/nv-linux.h
+++ b/common/inc/nv-linux.h
@@ -1320,7 +1320,7 @@ static inline NvU32 nv_alloc_init_flags(int cached, int contiguous, int zeroed)
static inline NvBool nv_dma_maps_swiotlb(struct pci_dev *dev)
{
NvBool swiotlb_in_use = NV_FALSE;
-#if defined(CONFIG_SWIOTLB)
+#if defined(CONFIG_SWIOTLB) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 16, 0)
#if defined(NV_DMA_OPS_PRESENT) || defined(NV_GET_DMA_OPS_PRESENT)
/*
* We only use the 'dma_ops' symbol on older x86_64 kernels; later kernels,
最近でたnvidia-kernel-dkms (390.48-2~bpo9+1)は patch 等不要で問題なく使える.
4.15が出たので.config
がどう変更されるのか見てみた.2017/11/28 12:42 / Linux 4.14.2 -> 4.15-rc1 との差分のみ.汎用指向の環境.以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
+CONFIG_CPU_ISOLATION=y
sched/isolation: Split out new CONFIG_CPU_ISOLATION=y config from CONFIG_NO_HZ_FULL
config CPU_ISOLATION
bool "CPU isolation"
default y
y にしておく.
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
ovl: don’t follow redirects if redirect_dir=off
config OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW
bool "Overlayfs: follow redirects even if redirects are turned off"
default y
複雑な環境で使うことを想定していないので y にしておく.
-CONFIG_SSB_SPROM=y
-CONFIG_SSB_PCIHOST_POSSIBLE=y
-CONFIG_SSB_PCIHOST=y
-CONFIG_SSB_B43_PCI_BRIDGE=y
-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
-CONFIG_SSB_DRIVER_PCICORE=y
-CONFIG_B43_PCI_AUTOSELECT=y
-CONFIG_B43_PCICORE_AUTOSELECT=y
ssb: Disable PCI host for PCI_DRIVERS_GENERIC
PCI_DRIVERS_LEGACY に依存することになって,PCI_DRIVERS_LEGACY は MIPS にしかない Option なので,まるごと disable される.
2018/02/12 17:23 / Linux 4.15.3 -> 4.16-rc1 にも書いたが CONFIG_SSB_PCIHOST_POSSIBLE
が disable される件,BUG だった模様.4.15.4 ではssb: Do not disable PCI host on non-Mipsで修正されている.
Host: Windows 10, Guest: Linux 環境なのだが,Linux 側で Synaptics Touchpad の two-finger scroll が効かない.調べた感じ https://superuser.com/questions/131297/use-synaptics-touchpad-scroll-in-vmware-guestにあるとおりhttps://bitbucket.org/DouglasCameron/windows-trackpad-scroller-for-vmwareを使うのが最も簡単(VMWare動かしたままで,Hostの再起動も不要.ダウンロードして展開して,.exe を実行してダイアログの質問に答えるだけ).
https://superuser.com/questions/131297/use-synaptics-touchpad-scroll-in-vmware-guestにhorizontal scrollingが効かないとか書かれているが,普通にhorizontal scrollingも使える.
Host を再起動したら再度上記を行う必要がある.
いつものように google chrome を起動しようとしたら以下のような謎な状態に.
% google-chrome &
[1] 8067
%
[1] + suspended (tty output) google-chrome
/opt/google/chrome/google-chrome
は bash script なのだが,以下のような空の bash script でも再現することがわかって,どうやら bash と environment-modules 付近の問題.
#!/bin/bash
/usr/share/modules/init/bash
から起動される tclsh /usr/lib/modulecmd.tcl bash autoinit
が less を起動してしまう模様.
/usr/lib/modulecmd.tcl
は environment-modules に含まれていて 4.1.0-1 ではこの問題が発生して 4.0.0-2 では問題は発生しない.
modulecmd.tcl
に 4.1.0-1 で追加された以下の行関連が問題かと探ったが,どうやら環境変数 PAGER
に設定されていた less が起動されていた模様(modulecmd.tcl
は PAGER
と MODULES_PAGER
を pager 向けの環境変数として使うらしいが(408行目付近),詳細までは見ていない).
set g_pager "/usr/bin/less" ;# Default command to page into, empty=disable
ということで,PAGER 環境変数を unset して解決(もしくは export PAGER=
, 但しこの場合 man command が stdout に出力してそのまま終了してしまう).
上記,混乱していたようで,PAGER 環境変数を unset しても less が起動される.export PAGER=
すれば問題は一応解決する.もしくは以下とか.
% PAGER= google-chrome &
https://devtalk.nvidia.com/default/topic/1028134/error-upgrading-to-4-14-10-kernel-in-xubuntu-17-10-in-dkms-384-90/?offset=2などで報告されていて,各所で nvidia のドライバの version を上げることが解決策として示されているが,nvidia-kernel-dkms 384.98-3~bpo9+1 が Linux 4.14.9 以降で以下のようなエラーでコンパイルできない.
/var/lib/dkms/nvidia-current/384.98/build/nvidia-uvm/uvm8_va_block.c: In function ‘block_cpu_fault_locked’:
./arch/x86/include/asm/processor.h:826:39: error: implicit declaration of function ‘task_stack_page’ [-Werror=implicit-function-declaration]
unsigned long __ptr = (unsigned long)task_stack_page(task); \
^
./arch/x86/include/asm/processor.h:909:26: note: in expansion of macro ‘task_pt_regs’
#define KSTK_EIP(task) (task_pt_regs(task)->ip)
^~~~~~~~~~~~
/var/lib/dkms/nvidia-current/384.98/build/nvidia-uvm/uvm8_va_block.c:8771:41: note: in expansion of macro ‘KSTK_EIP’
KSTK_EIP(current));
^~~~~~~~
上記問題に対応した version が stable backports でまだ利用できないので,とりあえず対処する.方法は,https://patchwork.kernel.org/patch/10137715/のとおり#include <linux/sched/task_stack.h>
すること.
Kernel側の原因はx86/entry/64: Remove thread_struct::sp0.x86_64 と x86_32 で task_pt_regs
が共通化され,いままで 64bit だと task_stack_page
が不要だったが,使われるようになって,そのため#include <linux/sched/task_stack.h>
が必要になったということらしい.
Debian GNU/Linux experimental では 387.34 が利用可能で,少しコードをみてみたが,以下がnvidia-uvm/uvm_linux.h
に追加されていた(conftest.sh
で linux/sched/task_stack.h
がチェックされ NV_LINUX_SCHED_TASK_STACK_H_PRESENT
がセットされる).
#if defined(NV_LINUX_SCHED_TASK_STACK_H_PRESENT)
#include <linux/sched/task_stack.h>
#endif
stable-bpo 384.111-1~bpo9+1 で本件解決した模様.
Private network から少なくとも Passive で FTP を使いたくてずっと悩んでいたのだが以下で解決した.
% echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
これをしないと modprobe nf_nat_ftp
や modprobe nf_conntrack_ftp
していても,これらの機能が働かない.他の iptables の設定は以下の通り.
iptables -F
iptables -t nat -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
つまり,基本 DROP で,特定のポートのみ以下で開けていく方式で運用している.
iptables -A FORWARD -i <interface> -s <network> -p tcp --dport <port> -j ACCEPT
Passive mode の場合は nf_conntrack_ftp
が使われて,PASV
コマンドをクライアントからサーバに送ったあとにサーバから返ってくるサーバの使用ポート番号向けのポートが自動で開く(RELATED として INPUT が許可される).
Active の場合は nf_nat_ftp
が使われて,PORT
コマンドでクライントからサーバに通知する情報が適切にNATで変換される.つまりプライベートネットワークから送出した PORT 10,0,0,X,202,171
といったコマンドが,NAT で PORT <Global IP>,202,171
に変換されてサーバに転送され,同時にサーバの IP address からの source port 20, destination port 50428 (= 202<<8 + 171)
のパケットが通るようになる.
ちなみに FTPS (FTP over TLS) も ftp と同じ 21番ポートを利用するが,通信が暗号化されてしまうので,上記のような変換等は全く効かない(そのサーバ向けに使いそうなポートを全開放するしかないっぽい).
以上,tcpdump
と iptables
ならびに lftp
を駆使して探ったのだが,以下 lftp
メモ.
open
しても実際にデータの転送(ls とか)がない限りは通信が発生しないdebug <level>
で debug verbosity を指定(もしくはlftp -d
で起動)set ftp:passive-mode off
とするset ftp:ssl-allow on
となっており,FEAT
コマンドで AUTH TLS
が返ってくると SSL 通信を行う.Bool値としてはいろいろ使えるらしい(以下 man lftp
より).
Boolean settings can be one of (true, on, yes, 1, +) for a True value or one of (false, off, no, 0, -) for a False value.
最近の Gnome では input source (キーボードの言語切り替えも含む)の切り替えは Windows+Space が割り当てられている.慣れればよいのかもしれないが,慣れ親しんでいる Shift+Space を割り当てたい.やり方はhttps://askubuntu.com/questions/604462/how-to-set-languages-shortcuts-from-config-files-or-command-lineにあるとおり.以下のようなコマンドで Windows+Space と Shift+Space の両方を割り当てることができる.
% gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Shift>space','<Super>space']"
GUI の Settings → Devices → Keyboard では1つしか割り当てられない(上のように2つを割り当てた場合は始めのもののみ表示される).
ちなみに Emacs での日本語入力は emacs-mozc を使いたいので(そうしないと C-x C-c するにもいちいち日本語モードから抜ける必要がある),以下を ~/.Xresources
に書いておく.
Emacs*useXIM: false
やるきなしなしだったGoogle Custom Search (Googleカスタム検索エンジン)の設置を見直した.今まではページトップに設置して,検索結果はポップアップ表示というやる気のない感じだったが,検索フォームを自前設置して結果を別ページに表示する方式に変えた.
https://myn.meganecco.org/s/が検索結果のページで,?q=query
付きで開く(<form action="/s/" method="get">
でsubmitする)と検索結果が表示される.Google Custom Search のページから copy した javascript と以下を書いてあるぐらい.
<div class="gcse-searchresults-only" data-linkTarget="_self"></div>
当初は以下だったがHTML validatorで少し怒られるのでhttps://developers.google.com/custom-search/docs/element#html5を参照のうえ上記にした.
<gcse:searchresults-only linkTarget="_self"></gcse:searchresults-only>
あとは検索の後に query 文字列を検索テキストボックスに入力するために,以下のような細工を入れておく(要jQuery).
$(function() {
var urlParams = new URLSearchParams(window.location.search);
$('input[type="text"]').val(urlParams.get("q"));
});
ちなみに,親サービスであるGoogle Site Search はhttps://enterprise.google.co.jp/intl/ja/search/products/gss.htmlに以下のようにある通り,今年度いっぱいでサービス終了.無料のGoogle Custom Search (Googleカスタム検索エンジン)は引き続き使えるらしい.
Google Site Search の販売および更新は、2017年4月1日をもって終了いたしました。同サービスの提供は、2018年4月1日までに完全に停止されます。
Windows Note PCにDual Boot環境を構築して,Linux側のシステムクロックをUTCではなくLocal Timeに設定しようとして,いろいろ調べた.
/etc/init.d/hwclock.sh
(/etc/default/rcS
)で設定するのではなくsystemdのtimedatectlを使うらしいということで,WindowsもUTCにするのが素直なので,そうすることに.
設定はhttps://wiki.archlinux.org/index.php/time#UTC_in_WindowsのとおりHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation
にRealTimeIsUniversal
としてDWORD 1
を追加するのみ.
ちなみに,Debian GNU/Linux sidでは/etc/init.d/hwclock.sh
が存在するが,sudo /etc/init.d/hwclock.sh start
等とすると途中でexit
されてしまう.ということで,systemdとsysv-rcの関係を理解する目的も含めて少し流れを追ってみた.以下のような感じ.
/etc/init.d/hwclock.sh
の . /lib/lsb/init-functions
の箇所でexit
しているらしい/lib/lsb/init-functions
の最後の箇所でrun-parts --lsbsysinit --list /lib/lsb/init-functions.d
でリストされるファイルをsource (.
)している.以下./lib/lsb/init-functions.d/20-left-info-blocks
/lib/lsb/init-functions.d/40-systemd
/lib/lsb/init-functions.d/40-systemd
でsystemctl -p LoadState --value show $service
がmasked
を返す場合,そこでexit
する($service
はこの場合hwclock.service
)systemd
の /lib/systemd/system/hwclock.service
が /dev/null
への symlink になっていて,default で mask されている
systemctl mask|unmask <NAME>
でmask/unmaskするunitは,fileが/etc/systemd/system/
以下に置かれるdm-crypt 関連メモ (cryptroot)のように / 自体をLUKSで暗号化している場合に,起動時に90秒間待たされる問題について.
/ 自体をLUKSで暗号化している場合,通常は /etc/crypttab
を以下のようにして,鍵ファイルを用いて自動で cryptsetup open <device> <name> --type luks
する.
[/etc/crypttab]
sda5_crypt UUID=<snip> /dev/disk/by-uuid/<snip>:luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev
ここで/dev/disk/by-uuid/<snip>
は鍵ファイルを置いている partition 等(/boot
等)で,luks_key
(/boot/luks_key
等)が鍵ファイル,/lib/cryptsetup/scripts/passdev
はinitrdに組み込まれるscriptになる.
このままだと以下のように 90 秒のタイムアウト待ちが生じる.
A start job is running for dev-disk...:luks_key.device (1min 3s / 1min 30s)
というのは sda5_crypt として open するために /dev/disk/by-uuid/<snip>:luks_key
という device が ready 状態になるのを待つため.以下のように systemd-cryptsetup@sda5_crypt.service
が dev-disk-by\x2duuid-(略):luks_key.device
に依存してしまう.:luks_key
というのはファイルを示していて,device ではないので,当然 ready 状態になるわけがなくタイムアウト待ちが生じる.
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618862 として systemd の important bug として登録されている.
% systemctl cat systemd-cryptsetup@sda5_crypt.service
# /run/systemd/generator/systemd-cryptsetup@sda5_crypt.service
# Automatically generated by systemd-cryptsetup-generator
[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)
SourcePath=/etc/crypttab
DefaultDependencies=no
Conflicts=umount.target
IgnoreOnIsolate=true
After=cryptsetup-pre.target
Before=cryptsetup.target
After=dev-disk-by\x2duuid-(略):luks_key.device
Requires=dev-disk-by\x2duuid-(略):luks_key.device
BindsTo=dev-disk-by\x2duuid-(略).device
After=dev-disk-by\x2duuid-(略).device
Before=umount.target
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
KeyringMode=shared
ExecStart=/lib/systemd/systemd-cryptsetup attach 'sda5_crypt' '/dev/disk/by-uuid/(略)' '/dev/disk/by-uuid/(略)
ExecStop=/lib/systemd/systemd-cryptsetup detach 'sda5_crypt'
最もシンプルな解決策は systemd にこのような依存関係を自動生成させないこと(device は通常 ready だと想定されるので).https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618862 にもあるとおり,起動時の kernel option に luks=no
と追加するだけで良い.詳細はman systemd-cryptsetup-generator
参照.具体的には以下の通り.
/etc/default/grub
のGRUB_CMDLINE_LINUX_DEFAULT
に"luks=no"
を追加(GRUB_CMDLINE_LINUX_DEFAULT="luks=no"
とか).sudo update-grub
(/boot/grub/grub.cfg
の再生成).他には/etc/systemd/system.conf
にてDefaultTimeoutStopSec=90s
のコメントアウトを外して,短めに設定する等がある.
これ,上記の場合で sda5_crypt が / であれば sda5_crypt を initrd から luksOpen されるので luks=no
の kernel option を使ってもよいのだが,他に起動してから luksOpen (cryptdisks_start) するものがあれば,その unit が systemd-cryptsetup-generator
により生成されず,自動 start/open されない(see man systemd-cryptsetup-generator
)...
https://blogs.gnome.org/aday/2017/08/31/status-icons-and-gnome/やhttp://www.omgubuntu.co.uk/2017/09/will-you-miss-gnome-legacy-trayにあるとおりGnomeのSystem TrayとかStatus Icons呼ばれるものが表示されなくなった.remmina (remote desktop client)をここから制御していたので,少々困った.TopIcons PlusというExtensionをinstallして有効にすれば時計の近くに現れるようになる.Debian では gnome-shell-extension-top-icons-plus という package 名で提供されている.
4.15-rc1が出ているので .config がどう変更されるのか見てみた.汎用指向の環境.以下 -
は削除されたもの,+
は追加されたもの.
-CONFIG_ORC_UNWINDER=y
+CONFIG_UNWINDER_ORC=y
x86/unwind: Rename unwinder config options to ’CONFIG_UNWINDER_*’
CONFIG_ORC_UNWINDER
が CONFIG_UNWINDER_ORC
に名前が変わった.
+CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y
+CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
+CONFIG_SYSTEM_DATA_VERIFICATION=y
cfg80211: implement regdb signature checking
CONFIG_SYSTEM_DATA_VERIFICATION
は CONFIG_CFG80211_REQUIRE_SIGNED_REGDB
に Select される.
config CFG80211_REQUIRE_SIGNED_REGDB
bool "require regdb signature" if CFG80211_CERTIFICATION_ONUS
default y
select SYSTEM_DATA_VERIFICATION
となっていて CFG80211_CERTIFICATION_ONUS=n
なのだが CFG80211_REQUIRE_SIGNED_REGDB
を y 以外にすることができない.CFG80211_CERTIFICATION_ONUS=y
にして n にする
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
+CONFIG_SYSTEM_TRUSTED_KEYS=""
+CONFIG_ASN1=y
+CONFIG_CRYPTO_AKCIPHER=y
+CONFIG_CRYPTO_RSA=y
+CONFIG_ASYMMETRIC_KEY_TYPE=y
+CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
+CONFIG_X509_CERTIFICATE_PARSER=y
+CONFIG_PKCS7_MESSAGE_PARSER=y
+CONFIG_CLZ_TAB=y
+CONFIG_MPILIB=y
SYSTEM_DATA_VERIFICATION=y
で Select されるものたち.
+CONFIG_X86_INTEL_UMIP=y
x86/umip: Select X86_INTEL_UMIP by default
Intel User Mode Instruction Prevention 関連.y にしておく.
-CONFIG_BT_HCIUART_BCM=y
Bluetooth: avoid silent hci_bcm ACPI PM regression
CONFIG_BT_HCIUART_BCM
が depends on (!ACPI || SERIAL_DEV_CTRL_TTYPORT)
になって BT_HCIUART_SERDEV
が SERIAL_DEV_CTRL_TTYPORT
に依存していて n になった.SERIAL_DEV_BUS = y
, SERIAL_DEV_CTRL_TTYPORT = y
にして y にもどす.
+CONFIG_CDROM=m
block: Rework drivers/cdrom/Makefile
cdrom: hide CONFIG_CDROM menu selection
Selected by BLK_DEV_SR [=m] && SCSI [=m] && BLK_DEV [=y]
手元の環境では SCSI CDROM support (BLK_DEV_SR
) で選択される感じ.
+CONFIG_DRM_AMD_DC=y
Defined at drivers/gpu/drm/amd/display/Kconfig:4
Prompt: AMD DC - Enable new display engine
y にしておく
+CONFIG_CRAMFS_BLOCKDEV=y
cramfs: direct memory access support
initrd も cpio になっているので,CONFIG_CRAMFS=m
を n にして,n にする.
以下,その他.
+CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
x86/irq/vector: Initialize matrix allocator
Defined at kernel/irq/Kconfig:100
Selected by: X86 [=y] && X86_LOCAL_APIC [=y]
+CONFIG_GENERIC_IRQ_RESERVATION_MODE=y
x86/vector/msi: Select CONFIG_GENERIC_IRQ_RESERVATION_MODE
Defined at kernel/irq/Kconfig:103
Selected by: X86 [=y]
+CONFIG_CHASH=m
amdgpu: don’t ask about CHASH just default it for now.
default DRM_AMDGPU
DRM_AMDGPU=m
で m になる.
+CONFIG_ARCH_HAS_REFCOUNT=y
locking/refcounts, x86/asm: Enable CONFIG_ARCH_HAS_REFCOUNT
Defined at arch/Kconfig:941
Selected by: X86 [=y]
+CONFIG_ACPI_LPIT=y
ACPI / LPIT: Add Low Power Idle Table (LPIT) support
Depends on: ACPI [=y] && X86_64 [=y]
-CONFIG_GENERIC_IO=y
-CONFIG_HT_IRQ=y
-CONFIG_HAVE_ARCH_KMEMCHECK=y
-CONFIG_SLABINFO=y
timer: Pass timer_list pointer to callbacks unconditionallyで struct timer_list から (unsigned long) data が削除されていて,timer: Remove init_timer() interfaceでinit_timer()が削除されたりで,broadcom-sta-dkms (6.30.223.271-7), nvidia-kernel-dkms (384.98-3), nvidia-legacy-340xx-kernel-dkms (340.104-3) の kernel module の build に失敗する.nvidia-kernel-dkms (384.98-3) の場合以下のような感じ.
[/var/lib/dkms/nvidia-current/384.98/build/make.log] 抜粋
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c: In function ‘nv_start_rc_timer’:
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3259:5: error: implicit declaration of function ‘init_timer’; did you mean ‘init_timers’? [-Werror=implicit-function-de
claration]
init_timer(&nvl->rc_timer);
^~~~~~~~~~
init_timers
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3260:28: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
nvl->rc_timer.function = nvidia_rc_timer;
^
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3261:18: error: ‘struct timer_list’ has no member named ‘data’
nvl->rc_timer.data = (unsigned long) nvl;
^
cc1: some warnings being treated as errors
scripts/Makefile.build:310: recipe for target '/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.o' failed
treewide: init_timer() -> setup_timer()にあるとおり以下のような変更をすればよいはずなのだが試していない.
This mechanically converts all remaining cases of ancient open-coded timer setup with the old setup_timer() API, which is the first step in timer conversions. This has no behavioral changes, since it ultimately just changes the order of assignment to fields of struct timer_list when finding variations of: init_timer(&t); f.function = timer_callback; t.data = timer_callback_arg; to be converted into: setup_timer(&t, timer_callback, timer_callback_arg);
Debian GNU/Linux sid では nvidia の kernel package は 4.15 対応になっていて,broadcom-sta-dkms (6.30.223.271-7) については以下のパッチが必要.
treewide: setup_timer() -> timer_setup()のとおりsetup_timer
はさらにtimer_setup
に書き換える必要があって,コールバック関数側の修正も必要.
--- a/src/wl/sys/wl_linux.c
+++ b/src/wl/sys/wl_linux.c
@@ -93,7 +93,7 @@ struct iw_statistics *wl_get_wireless_stats(struct net_device *dev);
#include <wlc_wowl.h>
-static void wl_timer(ulong data);
+static void wl_timer(struct timer_list *t0);
static void _wl_timer(wl_timer_t *t);
static struct net_device *wl_alloc_linux_if(wl_if_t *wlif);
@@ -2295,9 +2295,9 @@ wl_timer_task(wl_task_t *task)
}
static void
-wl_timer(ulong data)
+wl_timer(struct timer_list *t0)
{
- wl_timer_t *t = (wl_timer_t *)data;
+ wl_timer_t *t = from_timer(t, t0, timer);
if (!WL_ALL_PASSIVE_ENAB(t->wl))
_wl_timer(t);
@@ -2349,9 +2349,7 @@ wl_init_timer(wl_info_t *wl, void (*fn)(void *arg), void *arg, const char *tname
bzero(t, sizeof(wl_timer_t));
- init_timer(&t->timer);
- t->timer.data = (ulong) t;
- t->timer.function = wl_timer;
+ timer_setup(&t->timer, wl_timer, 0);
t->wl = wl;
t->fn = fn;
t->arg = arg;
上のパッチ,treewide: setup_timer() -> timer_setup()のとおりなのだが,from_timer(t, t0, timer)
の箇所が謎めいている(左辺の値が右辺にある).
[include/linux/timer.h]
#define from_timer(var, callback_timer, timer_fieldname) \
container_of(callback_timer, typeof(*var), timer_fieldname)
上がfrom_timer
の#define
で,container_of
は,struct timer_list *t0
(wl_timer
の引数)を struct member timer
として含むwl_timer_t
(struct wl_timer
)の pointer を取得するように動くマクロということらしい.右辺にある左辺の値は typeof
で使われるのみなので問題にならない.
参考にしたページ:
Debian GNU/Linux stable (Stretch) でも以下の backports で 4.15 対応になっている.
broadcom-sta-dkms (6.30.223.271-7) の wl_linux.c に patch が必要という件,https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=885885 で登録されている様子(patch の提供もあり).
broadcom-sta-dkms (6.30.223.271-7) の wl_linux.c に patch が必要という件,broadcom-sta 6.30.223.271-8で修正された様子.
broadcom-sta-dkms (6.30.223.271-7) の compile に以下の通り fail する.
[/var/lib/dkms/broadcom-sta/6.30.223.271/build/make.log] 抜粋
Kernel architecture is X86_64
AR /var/lib/dkms/broadcom-sta/6.30.223.271/build/built-in.o
CC [M] /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/shared/linux_osl.o
In file included from ./include/linux/compat.h:17:0,
from ./include/linux/ethtool.h:17,
from ./include/linux/netdevice.h:41,
from /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/include/linuxver.h:69,
from /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/shared/linux_osl.c:25:
./include/linux/if.h:28:10: fatal error: sys/socket.h: No such file or directory
#include <sys/socket.h> /* for struct sockaddr. */
^~~~~~~~~~~~~~
compilation terminated.
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=862175 にあるとおりinclude/uapi/linux/if.h
が使われるべきで,include/linux/if.h
は存在しないべき(?)だそう.include/uapi/linux/if.h
が存在すれば /usr/src/linux-headers-<version>/include/linux/if.h
を削除してしまえば解決する.
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833500 にあるとおり CONFIG_STACK_VALIDATION=y
だと(CONFIG_ORC_UNWINDER=y
が依存する) 別途コンパイルするタイプのモジュール(nvidia-kernel-dkms 等)のコンパイルにことごとく失敗する(Makefile がうまく *.o を生成してくれず,ld を呼び出して link する際に make が error で落ちる,という不親切な状態).
以下のように kernel compile 時にできた objtool を /usr/src/linux-headers-<version>/tools/objtool/
に copy すれば解決する.
sudo cp tools/objtool/objtool /usr/src/linux-headers-<version>/tools/objtool/
4.14 が出たので.config
がどう変更されるのか見てみた.2017/09/18 07:04 / Linux 4.13.1 -> 4.14-rc1 との差分のみ(ターゲットが異なって,こちらはより汎用指向の環境).以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
-CONFIG_BT_HCIUART_BCM=y
Bluetooth: hci_bcm: Add serdev support
Bluetooth: try to improve CONFIG_SERIAL_DEV_BUS dependency
CONFIG_BT_HCIUART_BCM
が depends on BT_HCIUART_SERDEV
になって BT_HCIUART_SERDEV
が SERIAL_DEV_BUS
に依存していて n になった.SERIAL_DEV_BUS = m
にして y にもどす.使ってないだろうけど.
+CONFIG_NET_VENDOR_HUAWEI=y
net-next/hinic: Initialize hw interface
新たに追加された模様(CONFIG_HINIC
: Huawei Intelligent PCIE Network Interface Card).なんとなく n にする.
-CONFIG_FRAMEBUFFER_CONSOLE=m
-CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONT_8x8=y
+CONFIG_FONT_AUTOSELECT=y
fbcon: Make fbcon a built-time depency for fbdev
CONFIG_FRAMEBUFFER_CONSOLE
に m が選択できなくなった.CONFIG_FRAMEBUFFER_CONSOLE=y
にして対応.
mendeleydesktop(最新版は 1.17.11)をDebian GNU/Linux unstableにinstallしたのだが,aptitude update
で以下のように怒られる.もっと書くとCRON-APTでupdateに失敗したと見なされてupgradeされない.
W: Failed to fetch https://desktop-download.mendeley.com/download/apt/dists/stable/InRelease: 403 Forbidden [IP: 54.230.108.7 443]
E: Some index files failed to download. They have been ignored, or old ones used instead.
stable (stretch) では特に問題ないので,unstable の apt の原因らしい(仕様変更がある?)./etc/apt/sources.list.d/mendeleydesktop.list
を削除するか,当該ファイルにてapt lineをcomment outするのがwork aroundな模様.
4.14-rc1が出ているので .config がどう変更されるのか見てみた.ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U.以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
ちなみに 4.14-rc1 は使用に耐えられず(刺さる),0666f560b71b899cd11a7caf39fd45129e9030fdを使用.Firmware が削除されたということだが,特に問題になることはなかった.
+CONFIG_TASKS_RCU=y
rcu: Drive TASKS_RCU directly off of PREEMPT
def_bool PREEMPT
CONFIG_PREEMPT=y
で y になる.
なんとなく今まで CONFIG_PREEMPT=y
としていたのだが,Debian の Default にあわせて CONFIG_PREEMPT_VOLUNTARY=y
にすることにした.なお,Kernel の Default は CONFIG_PREEMPT_NONE=y.
+CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
+CONFIG_FRAME_POINTER_UNWINDER=y
+CONFIG_FRAME_POINTER=y
-CONFIG_ARCH_WANT_FRAME_POINTERS=y
x86/unwind: Add the ORC unwinder
x86/kconfig: Consolidate unwinders into multiple choice selection
Oops Rewind Capability (ORC) (CONFIG_ORC_UNWINDER)
関連.runtime memory は 2-4MB 増加するが,CONFIG_FRAME_POINTER
と比較して 5-10% performance improvement とのこと.
Unwinder の選択肢は CONFIG_ORC_UNWINDER,
CONFIG_FRAME_POINTER_UNWINDER,
CONFIG_GUESS_UNWINDER.
Default は CONFIG_FRAME_POINTER_UNWINDER.
CONFIG_ORC_UNWINDER=y
にすることにする.
CONFIG_ORC_UNWINDER=y
で CONFIG_STACK_VALIDATION=y
になるので compile 時に libelf-dev が必要になる.
+CONFIG_RC_CORE=y
+CONFIG_RC_MAP=y
+CONFIG_RC_DECODERS=y
+CONFIG_IR_NEC_DECODER=y
+CONFIG_IR_RC5_DECODER=y
+CONFIG_IR_RC6_DECODER=y
+CONFIG_IR_JVC_DECODER=y
+CONFIG_IR_SONY_DECODER=y
+CONFIG_IR_SANYO_DECODER=y
+CONFIG_IR_SHARP_DECODER=y
+CONFIG_IR_MCE_KBD_DECODER=y
+CONFIG_IR_XMP_DECODER=y
media: rc-core: do not depend on MEDIA_SUPPORT
Defined at drivers/media/rc/Kconfig:2
Depends on: INPUT [=y]
CONFIG_RC_CORE=n
にすると全て非選択になる.
+CONFIG_XXHASH=m
+CONFIG_ZSTD_COMPRESS=m
+CONFIG_ZSTD_DECOMPRESS=m
lib: Add zstd modules
lib: Add xxhash module
btrfs: Add zstd support
Defined at lib/Kconfig:195
Selected by: ZSTD_COMPRESS [=m] || ZSTD_DECOMPRESS [=m]
BTRFS の ZSTD サポート関連.btrfs の mount option compress=lzo で運用してたりするのだが,いきなりこれを compress=zstd にするのは怖すぎて,しばらく様子見したいのだが,Compile時に切り離すことが出来ない.
以下,その他.
+CONFIG_FUTEX_PI=y
futex: Allow for compiling out PI support
Defined at init/Kconfig:1284
Depends on: FUTEX [=y] && RT_MUTEXES [=y]
default y
+CONFIG_HAVE_RCU_TABLE_FREE=y
x86/mm: Enable RCU based page table freeing (CONFIG_HAVE_RCU_TABLE_FREE=y)
Defined at arch/Kconfig:332
Selected by: X86 [=y]
+CONFIG_ARCH_HAS_MEM_ENCRYPT=y
x86/mm: Add Secure Memory Encryption (SME) support
Defined at arch/x86/Kconfig:1438
def_bool y
+CONFIG_ARCH_ENABLE_THP_MIGRATION=y
mm: thp: introduce CONFIG_ARCH_ENABLE_THP_MIGRATION
Defined at mm/Kconfig:265
def_bool y
depends on X86_64 && TRANSPARENT_HUGEPAGE
+CONFIG_ARCH_HAS_ADD_PAGES=y
mm/memory_hotplug: introduce add_pages
Defined at arch/x86/Kconfig:2325
Depends on: X86_64 [=y] && ARCH_ENABLE_MEMORY_HOTPLUG [=y]
def_bool y
-CONFIG_ARCH_HAS_MMIO_FLUSH=y
Linux 4.14-rc3やLinux 4.14-rc4にあるように4.14のリリースは結構大変そう.手元でも rc2 以降は Xorg が起動しない状況(rc4まで確認).
Linux 4.14-rc5ではだいぶましになってきていて,Xorg も起動するようになった.
4.13 が出たので.config
がどう変更されるのか見てみた.2017/07/16 23:56 / Linux 4.12.0 -> 4.13-rc1 との差分のみ(ターゲットが異なって,こちらはより汎用指向の環境).以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
+CONFIG_ARCH_HAS_ZONE_DEVICE=y
mm, x86: Add ARCH_HAS_ZONE_DEVICE to Kconfig
Selected by: X86 [=y] && X86_64 [=y]
+CONFIG_MDIO_BUS=y
net: phy: rework Kconfig settings for MDIO_BUS
default m if PHYLIB=m
default MDIO_DEVICE
MDIO_DEVICE=y
(Selected by: PHYLIB [=y] && NETDEVICES [=y]
) のため y になっていた.
+CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
watchdog: core: add option to avoid early handling of watchdog
default y
y にしておく.
-CONFIG_SND_RAWMIDI_SEQ=m
+CONFIG_SND_SEQ_MIDI=m
ALSA: seq: Reorganize kconfig and build
Kconfig, Makefile が整理された模様.ほかにもdiffが出ていたが省略.
+CONFIG_WMI_BMOF=m
platform/x86: wmi-bmof: New driver to expose embedded Binary WMI MOF metadata
default ACPI_WMI
ACPI_WMI=m
(ACPI-WMI (Windows Management Instrumentation) mapper device (PNP0C14)) だと default で m になる.必要かどうか不明だが m にしておく.
+CONFIG_HARDLOCKUP_DETECTOR_PERF=y
+CONFIG_SOFTLOCKUP_DETECTOR=y
kernel/watchdog: split up config options
DEBUG_KERNEL [=y]
で select される.
以下のように wp-cli
(以下の wp
command)を使って WordPress の自動 update を行っているのだが,
#!/bin/sh
wp core update
wp core update-db --network
wp plugin update --all
wp theme update --all
wp core language update
cron から以下のようなエラーメールが届く.
PHP Parse error: syntax error, unexpected '[' in /somewhere/public_html/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php on line 418
Parse error: syntax error, unexpected '[' in /somewhere/public_html/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php on line 418
PHP Parse error: syntax error, unexpected '[' in /somewhere/public_html/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php on line 418
Parse error: syntax error, unexpected '[' in /somewhere/public_html/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php on line 418
Update 後 Multisite Post Duplicator (v1.7.1) (https://wordpress.org/plugins/multisite-post-duplicator/) が正常動作せず,うまく表示がされなくなる.
サーバの PHP のバージョンは以下のとおりで,
% php -v
PHP 5.3.3 (cli) (built: Jan 5 2016 08:52:51)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
http://php.net/manual/en/language.types.array.php にある PHP 5.4 形式の配列(array in PHP = ordered map)定義を使っているのが原因.ということで,以下パッチ.
--- a/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php
+++ b/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php
@@ -415,10 +415,10 @@ function mpd_get_images_from_the_content($post_id){
$image_obj = get_post($matches[0]);
//Push this object into an array.
// Save all elements needed to the duplication process
- $images_objects_from_post[ $matches[0] ] = [
+ $images_objects_from_post[ $matches[0] ] = array(
'attached_file_path' => get_attached_file( $matches[0] ),
'object' => $image_obj
- ];
+ );
}
//Deliver the array of attachment objects to the core
使っていないので実害ないのだが,Debian GNU/Linux の lighitning (Calendar Extension for Thunderbird) package の /usr/lib/lightning/chrome/calendar-en-US/locale/en-US/calendar/preferences/
にある以下等の DTD ファイルは,更新されてもファイルのタイムスタンプが同じままで,かつ変更によってファイルサイズも変わらない(1文字の変更等)なので,rsync -a
で更新されない.
/usr/lib/lightning/chrome/calendar-en-US/locale/en-US/calendar/preferences/categories.dtd
/usr/lib/lightning/chrome/calendar-en-US/locale/en-US/calendar/preferences/views.dtd
念の為 diff を取った際に若干焦った.以下のように 2010-01-01 (GMT 00:00) で固定されているっぽい.
ls --full-time /usr/lib/lightning/chrome/calendar-en-US/locale/en-US/calendar/preferences/
total 20
-rw-r--r-- 1 root root 1932 2010-01-01 09:00:00.000000000 +0900 alarms.dtd
-rw-r--r-- 1 root root 1295 2010-01-01 09:00:00.000000000 +0900 categories.dtd
-rw-r--r-- 1 root root 2074 2010-01-01 09:00:00.000000000 +0900 general.dtd
-rw-r--r-- 1 root root 396 2010-01-01 09:00:00.000000000 +0900 preferences.dtd
-rw-r--r-- 1 root root 1955 2010-01-01 09:00:00.000000000 +0900 views.dtd
たとえば Gmail で送信者情報として Gmail ではない自身のメールアドレスを使う,といった話.もっと書くと,SMTP (RFC 821 -> RFC 2821 -> RFC 5321)では RCPT TO:/MAIL FROM: コマンドでそれぞれ送信先/送信元を設定しつつも,メール本体(DATA)は RFC 822 のとおりこの中にも別途 From: と To: 等が記載できるようになっていて,その From: を書き換えるという話.ちょっとだけ調べた範囲.
outlook.com の Email alias だが,Microsoft account として登録されている他のメールアドレスは Email alias として追加できない.
手元に Office 入りの 32Gストレージの Windows 10 Note (Windows 8 から無償アップデート)があって,それを最新のWindows 10にするためになんとかする.
空き容量が8G必要で(解説ページによっては10Gが安全と書いてあったりする),ちょっとどうあがいても6G程度の空き容量しか作れなかったので,Media Creation Tool (MCT)で別途インストールメディアを作成してインストール.
基本的にはAnniversary Update適用の際にMCTを利用する詳細を記述してある http://ascii.jp/elem/000/001/232/1232920/ の記事のとおりのことを今やればCreators Updateが入ってくれる.
手元の 32GB Windows 10 Note は Windows 10 Home なので,メディア作成時のエディションとしてはWindows 10 Homeを単純に選びたかったのだが,
という項目しか表示されなかった.後者を選択して,現状特に問題なし.Office 等もそのまま使えている.
Media Creation Tool (MCT)は https://www.microsoft.com/software-download/windows10 からダウンロードする(言語自動判定).ただしこのURL,Windows ではない OS からアクセスするとISOをダウンロードするページに飛ばされる様子.
4.13-rc1が出ているので .config がどう変更されるのか見てみた.ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U.以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
+CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
genirq: Introduce effective affinity mask
x86/apic: Implement effective irq mask update
Selected by: X86 [=y] && SMP [=y]
+CONFIG_GENERIC_IRQ_MIGRATION=y
genirq: Introduce generic irq migration for cpu hotunplug
x86/irq: Use irq_migrate_all_off_this_cpu()
Selected by: X86 [=y] && SMP [=y]
+CONFIG_SLAB_MERGE_DEFAULT=y
mm: allow slab_nomerge to be set at build time
y にしておく.あと,Debian GNU/Linux の kernel-image にならって SLAB allocator として CONFIG_SLAB
を選んでいたが,CONFIG_SLUB
が kernel の default のようなのでCONFIG_SLUB=y
にすることにした.
+CONFIG_THIN_ARCHIVES=y
kbuild: allow architectures to use thin archives instead of ld -r
kbuild: thin archives make default for all archs
def_bool y
+CONFIG_HAVE_GENERIC_GUP=y
x86/mm/gup: Switch GUP to the generic get_user_page_fast() implementation
def_bool y
+CONFIG_ARCH_WANTS_THP_SWAP=y
+CONFIG_THP_SWAP=y
+CONFIG_ARCH_HAS_ZONE_DEVICE=y
mm, x86: Add ARCH_HAS_ZONE_DEVICE to Kconfig
Selected by: X86 [=y] && X86_64 [=y]
+CONFIG_PCI_LOCKLESS_CONFIG=y
x86/PCI: Select CONFIG_PCI_LOCKLESS_CONFIG
Selected by: X86 [=y]
+CONFIG_DRM_PANEL_BRIDGE=y
drm/bridge: Refactor out the panel wrapper from the lvds-encoder bridge.
def_bool y
Selects: DRM_PANEL [=y]
不要な気もするが依存関係で y になる.
+CONFIG_DRM_PANEL=y
上で Select される.
+CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y
x86, uaccess: introduce copy_from_iter_flushcache for pmem / cache-bypass operations
Selected by: X86 [=y] && X86_64 [=y]
-CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
mm/hugetlb: clean up ARCH_HAS_GIGANTIC_PAGE
Selected by: X86_64 [=y] && 64BIT [=y] && (MEMORY_ISOLATION [=n] && COMPACTION [=y] || CMA [=n])
Memory の hotplug 等を disable していて,CMA (Contiguous Memory Allocator) も n なので,選択されなくなった.
+CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
include/linux/string.h: add the option of fortified string.h functions
Selected by: X86
+CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y
kernel/watchdog: split up config options
Selected by: X86 [=y] && HAVE_PERF_EVENTS_NMI [=y]
+CONFIG_RTC_NVMEM=y
rtc: add generic nvmem support
Selects: NVMEM [=y] and default RTC_CLASS
+CONFIG_NVMEM=y
上で Select される.
Kernel を 4.12 に上げたら dax (手元では device-mapper が依存)が modprobe に失敗するようになった.
percpu: allocation failed, size=8192 align=4096 atomic=0, alloc from reserved chunk failed
CPU: 4 PID: 3257 Comm: modprobe Tainted: P O 4.12.0-(snip)
Hardware name: (snip)
Call Trace:
? dump_stack+0x5c/0x7a
? pcpu_alloc+0x601/0x640
? load_module+0x7bf/0x2af0
? kernel_read_file+0x19d/0x1c0
? SyS_finit_module+0xa5/0xe0
? SyS_finit_module+0xa5/0xe0
? entry_SYSCALL_64_fastpath+0x1e/0xa9
dax: Could not allocate 8192 bytes percpu data
mm/percpu.c
のpcpu_alloc
でコケているようなのだが(8192 byteが大きいということ?),percpu_test
のkernel moduleを作ってみても以下のような感じでうまく動かず.
% sudo modprobe percpu_test
modprobe: ERROR: could not insert 'percpu_test': Resource temporarily unavailable
ということで,これ以上は追えず.とりあえずはCONFIG_DAX=m
をCONFIG_DAX=y
にすれば解決する.
Kernel を 4.12 に上げたら nvidia-legacy-340xx-kernel-dkms の compile でコケるようになった.treewide: move set_memory_* functions away from cacheflush.hの影響でset_memory_uc()
他がasm/cacheflush.h
から<asm/set_memory.h>
に移動した影響.
以下 nvidia-legacy-340xx-kernel-dkms 向けやるきなしなしパッチ.4.12 以前では動かない.
--- a/conftest.sh
+++ b/conftest.sh
@@ -372,6 +372,7 @@ compile_test() {
#
CODE="
#include <asm/cacheflush.h>
+ #include <asm/set_memory.h>
void conftest_set_memory_uc(void) {
set_memory_uc();
}"
@@ -385,6 +386,7 @@ compile_test() {
#
CODE="
#include <asm/cacheflush.h>
+ #include <asm/set_memory.h>
void conftest_set_memory_array_uc(void) {
set_memory_array_uc();
}"
@@ -398,6 +400,7 @@ compile_test() {
#
CODE="
#include <asm/cacheflush.h>
+ #include <asm/set_memory.h>
void conftest_set_pages_uc(void) {
set_pages_uc();
}"
--- a/nv-linux.h
+++ b/nv-linux.h
@@ -194,6 +194,7 @@ RM_STATUS nvos_forward_error_to_cray(struct pci_dev *, NvU32,
#if defined(NV_SET_MEMORY_UC_PRESENT)
#undef NV_SET_PAGES_UC_PRESENT
#undef NV_CHANGE_PAGE_ATTR_PRESENT
+#include <asm/set_memory.h>
#elif defined(NV_SET_PAGES_UC_PRESENT)
#undef NV_CHANGE_PAGE_ATTR_PRESENT
#endif
良くあるDiskless Clientの構成法だと思われるが,あまり情報がないので自分用メモ.
/
に mountということを overlayfs で squashfs に tmpfs を overlay して実現する,という話.
ざっくりと設定手順は以下のとおり.サーバ・クライアントは Debian GNU/Linux stretch を想定.
/
) イメージ作成isc-dhcp-server をインストールして,/etc/dhcp/dhcpd.conf
を以下のような感じで設定.group
を使うと記述が少なくて済む(global parameter として next-server と filename を書いても良い).
group {
next-server 10.0.0.2;
filename "/client/pxelinux.0";
host megane {
hardware ethernet xx:xx:xx:xx:xx:xx;
fixed-address 10.0.0.71;
option host-name "megane";
}
### 他のホストの設定多数
}
10.0.0.2
はTFTP ServerのIP Address,filename
でTFTPのパスを指定.
tftpd-hpa をインストール(tftpd は Tftpd is not suitable for use with the PXE bootloader(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=401288) とのことで PXE boot 向けではないとのこと).
/etc/default/tftpd-hpa
にTFTP_DIRECTORY="/srv/tftp"
とあって,つまりサーバの/srv/tftp
がTFTPの/
になる.
PXE netboot 用のファイルを /srv/tftp/client
(dhcpd.conf
で指定したパス)に配置する.network boot の Debian installerを細工する形で置くが簡単.
/srv/tftp/client/pxelinux.cfg/default
に設定ファイルを置く.私の場合は以下.
default syslinux/vesamenu.c32
prompt 0
menu title Diskless clients
MENU AUTOBOOT Starting the default kernel in # seconds
include syslinux/stdmenu.cfg
label Linux 4.11.7-diskless-01+
menu label Linux 4.11.7-diskless-01+ (stretch)
menu default
timeout 100
kernel boot/vmlinuz-4.11.7-diskless-01+
append initrd=boot/initrd.img-4.11.7-diskless-01+ root=/dev/nfs nfsroot=10.0.0.2:/export/diskless,ro ip=:::::eth0:dhcp
label Linux 4.11.6-diskless-01+
menu label Linux 4.11.6-diskless-01+ (stretch)
kernel boot/vmlinuz-4.11.6-diskless-01+
append initrd=boot/initrd.img-4.11.6-diskless-01+ root=/dev/nfs nfsroot=10.0.0.2:/export/diskless,ro ip=:::::eth0:dhcp
boot/
は実際には/srv/tftp/client/boot/
が対応し,ここに後の手順で作成する root のイメージから,vmlinuz と initrd を copy する.10.0.0.2:/export/diskless
はNFSで mount する際の source.
syslinux/
以下のファイルはDebian installerから流用(若干調整が必要).
nfs-kernel-server をインストール./export/diskless
がNFSでクライアントからマウント可能なように/etc/exports
を設定する.See man exportfs.
/
) イメージ作成debootstrap
を利用する.debootstrapをインストールしておく.
sudo debootstrap --verbose --arch amd64 stretch stable http://ftp.jp.debian.org/debian/
で,stable/
以下に root (/
) のファイルが配置される.あとは
sudo chroot stable /bin/sh
で stable/
を /
とみなした shell が起動するので,そこで apt-get
で必要なパッケージを入れまくる(/etc
以下や password 等も設定).
ただし /proc
等が存在しないので,chroot の前に以下で mount しておくのが無難.
sudo mount -t devpts devpts stable/dev/pts
sudo mount -t proc proc stable/proc
sudo mount -t binfmt_misc binfmt_misc stable/proc/sys/fs/binfmt_misc
sudo mount -t sysfs sysfs stable/sys
sudo mount -t tmpfs tmpfs stable/sys/fs/cgroup
この段階で,別途 make-kpkg でカスタム linux-image package を作成し,それを chroot 環境で dpkg -i する.kernel 再構築の際,使う NIC の Driver や NFS 等は module (m)ではなくkernelに組み込んでおく(y)必要がある.また,initrd に細工する必要があるが,これはまた後ほど.
あと,ホスト毎に処理を変えたい部分については /etc/rc.local
に書いておく.ssh server の鍵をホスト毎に変えたくなる(かつ永続性も確保したい)が,これについてはたとえば以下のようなファイルを用意しておき,
[/etc/init.d/ssh-pre]
#! /bin/sh
### BEGIN INIT INFO
# Provides: ssh-pre
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# X-Start-Before: sshd
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Prepare ssh host keys
### END INIT INFO
# `hostname` に応じてどこかから鍵を /etc/ssh/ に copy する
chroot環境でinsserv ssh-pre
を実行して,起動時に実行されるようにしておく.
好みの感じに仕上がった stable/
を squashfs 化する.
sudo rsync -avzL --exclude=... stable/ stable-tmp/
sudo mksquashfs stable-tmp stable.img
上のように無駄なファイルを squashfs に入れても仕方がないので rsync で一旦フィルタする.mksquashfs
の -ef option でも exclude できるが,容量が大きくテストが煩雑になるので,rsync で exclude するようにした.手元の script では例えば以下のように exclude している.
--exclude='/tmp/*' \
--exclude='/opt/*' \
--exclude='/proc/*' \
--exclude='/sys/*' \
--exclude='/dev/*' \
--exclude='/var/cache/apt/archives/*' \
--exclude='/var/tmp/*' \
--include='/var/log/*/' \
--exclude='/var/log/*' \
--exclude='/var/log/*/*' \
initrd から squashfs を mount (ro)して,それに対して tmpfs (rw) を overlay して diskless client の /
とする,という設定を行う.今から思えばhttps://github.com/chesty/overlayrootとほぼ同じ.
以下の2つのファイルを用意する.
[/usr/share/initramfs-tools/hooks/overlayroot]
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
manual_add_modules overlay
manual_add_modules squashfs
manual_add_modules loop
hooks/*
は kernel module や initrd で必要な実行ファイルを initrd に含める設定を書く箇所.overlay や squashfs が initrd に含まれるようにする.
$1
で処理を分岐している部分は,hook ファイルの起動順を決めるための部分で,もし他のhookファイルに依存する場合はPREREQ
変数にその名前を記載しておく (see man initramfs-tools
).
[/usr/share/initramfs-tools/scripts/init-bottom/overlayroot]
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
modprobe overlay
modprobe squashfs
modprobe loop
mkdir -p /over
mount -t tmpfs -o size=1g tmpfs /over
mkdir -p /over/rw
mkdir -p /over/ro
mkdir -p /over/sq
mkdir -p /over/work
mount -o remount,ro /root
ro=/over/ro
file=`ls /root/*.img | tail -1`
if test -f $file ; then
mount -t squashfs $file /over/sq
ro=/over/sq
fi
mount --move /root /over/ro
mount -t overlay -o upperdir=/over/rw,lowerdir=$ro,workdir=/over/work overlay /root
# Create files for /var/log/ .
# See /var/lib/dpkg/info/base-files.postinst .
touch /root/var/log/wtmp /root/var/log/btmp /root/var/log/lastlog
mkdir -p /root/over
mount --move /over /root/over
if command -v nuke >/dev/null; then
nuke /over
fi
scripts/init-bottom/overlayroot
は /usr/share/initramfs-tools/init
(/init
)から起動されることになるファイル.scripts/init-bottom/udev
も存在すると思われるが,それより先に実行される(ファイル名で sort した順っぽい).PREREQ
についてはhookと同じ.
やっていることは以下のとおり.
/over/
に mount/root/*.img
の1つ(最新のものになるように細工したりする)を /over/sq/
に mount.ここで /root/
は NFS でマウントしている 10.0.0.2:/export/diskless/
の mount point/root/
を /over/ro/
に移動/root/
に mount/root/
が /
になるが,その際に /over/
が参照可能なように,/over/
を /root/over/
に移動nuke
(rm -rf
) で /over/
(mount point)を削除あとは chroot 環境で以下で initrd を作り直す.initrd は /boot/initrd*
に生成される.
# update-initramfs -u -k all
NFS server の /export/diskless
に squashfs のイメージ stable.img
を置く.また,/export/diskless/dev/
等は一時的に mount point となるので,以下を mkdir しておく(中身は空).
/export/diskless/dev/
/export/diskless/run/
/export/diskless/tmp/
いちいち実機でテストするのは面倒なので同一ネットワーク内の別ホストで kvm を用いてテストすると簡便.たとえば以下(DHCP サーバに接続するため要ブリッジの設定).
% qemu-img create -f qcow2 debian.qcow 20G
% kvm -vnc :0 -hda debian.qcow -smp 8 -net bridge -net nic,model=e1000 -m 8000 &
% vncviewer :0 &
上記作業だと
と,かなり容量が必要で,もとの / は upgrade 等のために必要で保存しておく必要もあるので,いっそのこと作った squashfs + overlayfs で (1) の代用にしようとしたのだが,
ということで,(1)を(3)+overlayfsに rsync -a しようとしたら,大量の同一ファイルの copy が発生してしまった.
% ls -l --full-time stable/etc/hosts stable-20170731-over/etc/hosts
-rw-r--r-- 1 root root 109 2017-06-20 13:05:10.000000000 +0900 stable-overlay/etc/hosts
-rw-r--r-- 1 root root 109 2017-06-20 13:05:10.714742658 +0900 stable/etc/hosts
% stat stable/etc/hosts stable-20170731-over/etc/hosts
File: stable/etc/hosts
Size: 109 Blocks: 8 IO Block: 4096 regular file
Device: 2ch/44d Inode: 11835294 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-08-04 10:32:23.151773243 +0900
Modify: 2017-06-20 13:05:10.714742658 +0900
Change: 2017-06-20 13:05:10.714742658 +0900
Birth: -
File: stable-20170731-over/etc/hosts
Size: 109 Blocks: 1 IO Block: 1024 regular file
Device: 702h/1794d Inode: 1613 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-06-20 13:05:10.000000000 +0900
Modify: 2017-06-20 13:05:10.000000000 +0900
Change: 2017-06-20 13:05:10.000000000 +0900
Birth: -
みたいな感じで,stable/ は通常の(1) filesystem 上のファイル,stable-overlay/ は (3) のファイル.
rsync で dry-run してみると,以下のとおり一応同じ timestamp だとはみなしてもらえる.
% rsync -avz -n stable/etc/hosts stable-20170731-over/etc/hosts
sending incremental file list
sent 44 bytes received 12 bytes 112.00 bytes/sec
total size is 109 speedup is 1.95 (DRY RUN)
で,実際に rsync しようとすると以下のように怒られる.
% rsync -avz stable/etc/hosts stable-20170731-over/etc/hosts
sending incremental file list
rsync: failed to set times on "/somewhere/stable-20170731-over/etc/hosts": Operation not permitted (1)
sent 44 bytes received 141 bytes 370.00 bytes/sec
total size is 109 speedup is 0.59
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]
実際に copy はしないが,timestamp の update を試みていることが分かる(user権限でrsyncしたので,permission が deny された).実際に timestamp が update されると,overlayfs の upper layer 側にファイルが作成されることになる.
ということで(1)を完全に削除(つまり(3)のうえに rsync しない)しようか思案中.
Kernel は 4.11.6 の自前パッケージ.ドライバのソースは以下の2種類を試した.
嵌ったのは,以下のような2つのファイルを混同してしまう点.conftest.sh でことごとく error がでる.
/usr/src/linux-headers-4.11.6-<version>/arch/x86/include/asm/msr.h
/usr/src/linux-headers-4.11.6-<version>/include/asm/msr.h
/usr/src/linux-headers-4.11.6-<version>/include/asm/
をまるごと削除して解決させた.ソースコードの修正は不要.
手元に GeForce 8600 (古い)があって,これは最新のドライバではダメで,legacy ドライバを利用する必要がある.ということで仕方なくコンパイル.以下の対応する変更が必要.
以下パッチ.
--- a/conftest.sh
+++ b/conftest.sh
@@ -1579,6 +1579,7 @@ compile_test() {
#
CODE="
#include <linux/sched.h>
+ #include <linux/sched/signal.h>
void conftest_fatal_signal_pending(void) {
fatal_signal_pending();
}"
--- a/nv-drm.c
+++ b/nv-drm.c
@@ -48,7 +48,7 @@ static int nv_drm_load(
return -ENODEV;
}
-static int nv_drm_unload(
+static void nv_drm_unload(
struct drm_device *dev
)
{
@@ -64,7 +64,7 @@ static int nv_drm_unload(
}
}
- return -ENODEV;
+ return;
}
static void nv_gem_free(
diff --git a/uvm/nvidia_uvm_linux.h b/uvm/nvidia_uvm_linux.h
index f69c107..3d21a47 100644
--- a/uvm/nvidia_uvm_linux.h
+++ b/uvm/nvidia_uvm_linux.h
@@ -189,6 +189,9 @@
#include <linux/ratelimit.h>
#endif
+#include <linux/signal.h>
+#include <linux/sched/signal.h>
+
#if !defined(no_printk)
//
// TODO: bug 1329255: instead of this heavy-handed approach, use conftest to
diff --git a/uvm/nvidia_uvm_lite.c b/uvm/nvidia_uvm_lite.c
index 71bebe3..3685dc6 100644
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -818,7 +818,7 @@ done:
}
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
-int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+int _fault(struct vm_fault *vmf)
{
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)
unsigned long vaddr = (unsigned long)vmf->virtual_address;
@@ -828,7 +828,7 @@ int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
struct page *page = NULL;
int retval;
- retval = _fault_common(vma, vaddr, &page, vmf->flags);
+ retval = _fault_common(vmf->vma, vaddr, &page, vmf->flags);
vmf->page = page;
@@ -866,7 +866,7 @@ static struct vm_operations_struct uvmlite_vma_ops =
// it's dealing with anonymous mapping (see handle_pte_fault).
//
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
-int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+int _sigbus_fault(struct vm_fault *vmf)
{
vmf->page = NULL;
return VM_FAULT_SIGBUS;
Debian GNU/Linux 9.0 stretch が 2017-06-17 にリリースされたので,upgrade.リリースノートはhttps://www.debian.org/releases/stretch/amd64/release-notes/.以下でアップグレード.
リリースのノートには以下のように記載されているが,aptitude を使ってしまった.
以前のリリースの一部では、アップグレード作業に aptitude の利用を推奨していました。このツールは jessie から stretch へのアップグレードには推奨されません。
update 時点で以下のように怒られる場合は,
W: There is no public key available for the following key IDs:
EF0F382A1A7B6500
まず debian-archive-keyring を upgrade する.
aptitude install debian-archive-keyring
あとは aptitude で調整しつつ upgrade.個人的に気付いた点(リリースノートにも書いてある)等,メモは以下のとおり.
MySQL の代わりに MariaDB (MySQLの派生) が install される.https://www.debian.org/releases/stretch/amd64/release-notes/ch-whats-new.ja.html#mariadb-replaces-mysql.
php5 が obsolete になって php7 で代替.
一旦 php 関連を全て purge してしまったので MediaWiki, WordPress 関連のものを再度 install.
いろいろ不要な package を消していたら ifconfig や ifup 等のコマンドも消えてしまったので,net-tools,ifupdown を install.なお,「net-tools は iproute2 が選ばれたため非推奨となりました」とのこと.最近は ifconfig ではなく ip を使うらしい.
remmina, kernel-package が stable にない...
なお,MariaDB になったため mysqldump が途中でコケるようになった.
mysqldump -u root -p --all-databases --events
(略)
mysqldump: Couldn't execute 'show events': Cannot proceed because system tables used by Event Scheduler were found damaged at server start (1577)
以下でDBをアップグレードすれば良いらしい(適宜 --verbose
--force
オプションをつける).
mysql_upgrade -u root -p
Postfix を upgrade (3.1.4-7)したら以下のように表示されるようになった.
Postfix is running with backwards-compatible default settings
See http://www.postfix.org/COMPATIBILITY_README.html for details
To disable backwards compatibility use "postconf compatibility_level=2" and "postfix reload"
upgrade ではなく,イチから install した場合の/etc/postfix/main.cf
は以下のとおり.
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2
微妙に該当するchangelog.Debian.gz
は以下.
[/usr/share/doc/postfix/changelog.Debian.gz]
postfix (3.1.4-1) unstable; urgency=medium
(snip)
* Default to compatibility_level=2 on fresh installs.
-- LaMont Jones (snip) Wed, 04 Jan 2017 17:55:06 -0700
よく見てみたら sid 環境でも同じ Warning が出ていた.
ほぼ default の設定でつかっているので,受け入れることにして以下を実行.
% sudo postconf compatibility_level=2
% sudo postfix reload
/etc/postfix/main.cf
にcompatibility_level = 2
が追加される.将来のdefaultの変更も受け入れる場合は(各自の責任のもと)9999に設定せよとのことだが,そこまでの度胸はなし.
sdic も stretch に含まれていない.
以下のようなやる気のない感じで背景画像を20秒間隔でクロスフェード(3.5秒)で切り替えるようなページを作っていたのだが,Chrome で表示する分には問題ないのだが,Chrome 以外だとことごとく無視されるということに気付く.
$(function(){
cnt=1; t=0;
body=$('body');
arr=['bg0.jpg','bg1.jpg','bg2.jpg','bg3.jpg','bg4.jpg'];
setInterval(function() {
bg='url("images/'+arr[cnt++]+'")';
if(cnt==arr.length)cnt=0;
if(t==0){body.css('transition','background 3s linear 0.5s');t=1;}
setTimeout(function(){body.css('background-image',bg);},3500);
},20000);
});
どうやら background-image は animatable ではないというのが標準ならしい.Chrome でクロスフェードできていたのは,Chrome の勝手な実装によるものならしい.
ということで,div を2枚重ねして交互に画像そ差し替えつつ fadeIn()/fadeOut() するようにとりあえずjQueryで実装.その後,div を複数重ねてCSSのみでの実装例を見付けたので,CSSのみで実装(CSSが若干見通し悪くなるので,CSSを生成するスクリプトを書いた).
参考にしたページ:
google-chrome の key binding が gnome (GTK) の default に戻ってしまい悩む.環境は Debian GNU/Linux sid で,gdm および gnome-shell は利用せず,window manager は awesome window manager.以下のような状況.
Gnome の key binding を Emacs にするには,(時代によって)いろいろあって,手元の残骸を見てみた感じでは以下のとおり.
[~/.gtkrc-2.0]
gtk-key-theme-name = "Emacs"
[~/.gtkrc-2.0]
include "/usr/share/themes/Emacs/gtk-2.0-key/gtkrc"
[~/.config/gtk-3.0/settings.ini]
[Settings]
gtk-key-theme-name = Emacs
% dconf write /org/gnome/desktop/interface/gtk-key-theme \'Emacs\'
or
% gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"
~/.config/dconf/user に設定される
他に gnome-tweak-tool を使うというのもあるらしいが,gnome-tweak-tool はいろんな package に依存して面倒だったので試さず(おそらく dconf と同じ).
どの設定も効かなくて悩んだのだが,gnome-terminal を一旦 gnome-terminal-server とともに終了して,gnome-terminal-server と gnome-terminal を起動し直したら設定が有効になった.手元の環境では dconf の設定は効かず,~/.gtkrc-2.0
も obsolete で,~/.config/gtk-3.0/settings.ini
の設定が唯一効くらしい.
ちなみに gnome の設定まわりは dconf (GUI: dconf-editor)やら gsettings やら gconf (CUI: gconftool, GUI: gconf-editor)やらややこしいのだが,それらの関係はGconf, Dconf, Gsettings and the relationship between themのとおりで,最新環境では dconf のみを信じていればいいらしい.
通常の gnome 環境 (手元では 3.26) では以下が必要.~/.config/gtk-3.0/settings.ini
の設定は効かず.
gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"
以前の記事で nfsroot で / に対して fscache (fsc) を有効にする方法を記載していたのだが,これだと initramfs-tools が upgrade されると編集したファイルが上書きされて正常に起動しなくなる.
ということで,もう少しスマートな方法(アプローチは同じ).以下の2つのファイルを用意して,chmod 755 しておく.
[/usr/share/initramfs-tools/hooks/zz-nfsmount]
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/mount.nfs /bin/mount.nfs
cp -pnL /usr/share/initramfs-tools/extra/* ${DESTDIR}/bin
[/usr/share/initramfs-tools/extra/nfsmount]
#!/bin/sh
opt=""
while [ "$1" = "-o" ] ; do
opt="$opt $1"; shift
opt="$opt $1"; shift
done
mount.nfs $1 $2 $opt
あとはupdate-initramfs -u -k all
とかで initrd 再生成.
/usr/share/initramfs-tools/hooks/zz-nfsmount
は以前 /usr/share/initramfs-tools/hooks/klibc
の末尾に書いていたもの./usr/share/initramfs-tools/extra/nfsmount
は initrd に含める nfsmount
の代用 script.やっていることは以下のとおり.
nfsmount
は fsc option に対応していないので,/sbin/mount.nfs
を initrd に含める./usr/share/initramfs-tools/scripts/nfs
を書き換えて nfsmount
の代わりに/sbin/mount.nfs
を使用すると,initramfs-tools の upgrade の際に悲惨なことになる (/usr/share/initramfs-tools/scripts/nfs
がrevertされる)ので,/usr/lib/klibc/bin/nfsmount
の代わりに自前のnfsmount
を用意して,そこからmount.nfs
を実行する(その際 option の一がコマンド末尾になるように細工; ただし option は -o foo 形式のみを想定).4.12-rc1が出ているので .config がどう変更されるのか見てみた.ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U.以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
+CONFIG_TREE_SRCU=y
srcu: Introduce CLASSIC_SRCU Kconfig optionや srcu: Fix Kconfig botch when SRCU not selected 関連.Sleepable (or blocking) Read-copy update (RCU) が 4.12 から Default で新しい実装に(Tiny SRCU か Tree SRCU)変更される(CLASSIC_SRCU=y
にしない限り; 要RCU_EXPERT=y
).!PREEMPT && !SMP
であれば Tiny SRCU が選択され,そうでなければ Tree SRCU が選択される.
+CONFIG_RCU_NEED_SEGCBLIST=y
rcu: Separately compile large rcu_segcblist functions で導入.kernel/rcu/rcu_segcblist.h
から関数が kernel/rcu/rcu_segcblist.c
に分離された関係.
+CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y
x86/mm: Introduce mmap_compat_base() for 32-bit mmap() X86
で MMU && COMPAT
でなら select される(通常は select される).
+CONFIG_MQ_IOSCHED_KYBER=y
blk-mq: introduce Kyber multiqueue I/O scheduler で導入.Kyber I/O scheduler (Facebook による).Default は y.n にもできる.
+CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
, +CONFIG_MOUSE_PS2_SMBUS=y
Input: synaptics - add support for Intertouch devices および Input: psmouse - add support for SMBus companions で導入.使っているのは Virtual Mouse (CONFIG_MOUSE_PS2_VMMOUSE
)なので n にする.
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
thermal: core: Add a back up thermal shutdown mechanism で導入.VMware なので Thermal は関係ないのだが,ACPI_CPU_FREQ_PSS [=y] && ACPI [=y]
で TERMAL が select されていて,出現(ACPIをOFFにするのはちょっと気が引けるのでこのまま).
+CONFIG_DAX=m
dax: refactor dax-fs into a generic provider of ‘struct dax_device’ instances 関連.たぶん.DAX: direct access to differentiated memory.DEV_DAX
を DAX
に置き換える感じ.手元では BLK_DEV_DM [=m] && MD [=y]
(dm_crypt
を使っている関係で select している)で select されていた.
-CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y
HAVE_ARCH_HARDENED_USERCOPY is unconditional nowで削除.
4.11 が出たので 2017/02/20 10:31 / Linux 4.9.X -> 4.10同様 .config
がどう変更されるのか見てみた.2017/03/06 09:51 / Linux 4.10.1 -> 4.11-rc1 との差分のみ(ターゲットが異なって,こちらはより汎用指向の環境).以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
CONFIG_UPROBES=y->n
, CONFIG_UPROBE_EVENT=y->n
perf/core: Rename CONFIG_[UK]PROBE_EVENT to CONFIG_[UK]PROBE_EVENTSで CONFIG_UPROBE_EVENT
がCONFIG_UPROBE_EVENTS
にrenameされた影響.CONFIG_UPROBE_EVENTS=y
, CONFIG_UPROBES=y
としておく.
+CONFIG_BLK_MQ_VIRTIO=y
blk-mq: provide a default queue mapping for virtio deviceで導入.depends on BLOCK && VIRTIO.
-CONFIG_CPU_FREQ_STAT_DETAILS=y
cpufreq: Remove CONFIG_CPU_FREQ_STAT_DETAILS config optionで削除.
+CONFIG_GRO_CELLS=y
gro_cells: move to net/core/gro_cells.cで導入.NET_IP_TUNNEL
やXFRM
にselectされる.
+CONFIG_NET_VENDOR_AQUANTIA=y
net: ethernet: aquantia: Make and configuration files.で導入.Aquantia devices (FPGA-Programmable Multi-Gigabit Ethernet PHYs) 向け option.n にしておく.
-CONFIG_NET_VENDOR_SYNOPSYS=y
synopsys: remove dwc_eth_qos driverで削除.stmmacに merge されたとのこと.
+CONFIG_SERIAL_8250_EXAR=y
serial: 8250_EXAR: fix duplicate Kconfig text and add missing help textの修正の影響.CONFIG_SERIAL_8250=y
だと y が default.使わない気もするがそのまま y.
+CONFIG_PTP_1588_CLOCK_KVM=y
PTP: add kvm PTP driverで導入.default は y.m にしておく.そもそもPrecision Time Protocol (PTP)を使わない気もするが.
+CONFIG_SND_X86=y
ALSA: x86: Make CONFIG_SND_X86 boolで導入.現状はALSA: add Intel HDMI LPE audio driver for BYT/CHT-TのHDMI_LPE_AUDIO
のみ.n にしておく.
-CONFIG_TIMER_STATS=y
time: Remove CONFIG_TIMER_STATSで削除た.
+CONFIG_CRYPTO_HASH_INFO=y
tpm: enhance TPM 2.0 PCR extend to support multiple banksで CONFIG_TCG_TPM
により select されるようになった.CONFIG_TCG_TPM
は使わないような気がする(HWとしては搭載している)が含めておく.
Debian GNU/Linux unstable (sid) で emacs24 が 24.5+1-10 に上がった際に,以下のとおりopenssl s_clientが使えなくなった.
[/usr/share/doc/emacs24-common/changelog.Debian.gz]
* Don't offer/use openssl s_client by default: "s_client is a debug
tool, it does not set up a secure connection, it ignores all
errors and just continues. It also doesn't do checks it should be
doing. This is all documented behaviour." -- Kurt Roeckx
Add these patches to fix the problem:
0028-IMAP-connections-no-longer-use-openssl-s_client.patch
0029-openssl-s_client-is-no-longer-a-default-for-ssl-conn.patch
Thanks to Kurt Roeckx for reporting the issue. (Closes: #766397)
おそらくその影響で,Wanderlust の IMAP/SSL が gnutls-cli を使うようになって,うまくサーバに接続できない状況となってしまった.
% gnutls-cli --port XXXXX localhost
Processed 173 CA certificate(s).
Resolving 'localhost:XXXXX'...
Connecting to '::1:XXXXX'...
- Certificate type: X.509
- Got a certificate list of 1 certificates.
- Certificate[0] info:
- subject `EMAIL=postmaster@example.com,CN=localhost,OU=Automatically-generated IMAP SSL key,O=Courier Mail Server,L=New York,ST=NY,C=US', issuer `EMAIL=postmaster@example.com,CN=localhost,OU=Automatically-generated IMAP SSL key,O=Courier Mail Server,L=New York,ST=NY,C=US', serial 0x.................., RSA key 4096 bits, signed using RSA-SHA1, activated `2015-03-.. ..:..:.. UTC', expires `2016-03-.. ..:..:.. UTC', key-ID `sha256:........'
Public Key ID:
sha1:........
sha256:........
Public key's random art:
(snip)
- Status: The certificate is NOT trusted. The certificate issuer is unknown. The certificate chain uses expired certificate.
*** PKI verification of server certificate failed...
*** Fatal error: Error in the certificate.
*** handshake has failed: Error in the certificate.
Wanderlust から /usr/share/emacs/24.5/lisp/net/tls.el.gz が呼ばれて,gnutls-cli の引数は以下のように定義されている.
(defcustom tls-program
'("gnutls-cli --x509cafile %t -p %p %h"
"gnutls-cli --x509cafile %t -p %p %h --protocols ssl3")
; snip
ということで ~/.wl に以下を書いて解決.自前サーバを port forward して使っているので--insecure
でとりあえずは問題なし.
(setq tls-program '("gnutls-cli --insecure --x509cafile %t -p %p %h"))
いろいろ互換性を考慮して code 毎に ruby-indent-level 等の Emacs local variable を設定することにしている.以下のような感じ.
#!/usr/bin/env ruby
if true
puts "foo"
end
# Local Variables:
# ruby-indent-level: 4
# End:
Default の ruby-indent-level は 2 なので,Local Variables:
を書いた後にそれをEmacsのBufferに反映させるためには,ファイルの再読込みをすればよいのだが,それをしなくても M-x normal-mode すれば反映されるらしい.See f1-f normal-mode
or /usr/share/emacs/24.5/lisp/files.el.gz
.
お名前.com 共用サーバーSDにて,ちょっとした CGI で curl を利用していたのだが,急に使えなくなった.仕方なく wget を使うことにする.
原因は(64-bitの) libldap-2.4.so.2,liblber-2.4.so.2 が存在しないこと.ldap 対応の curl が install されているらしい.ちなみに curl は 64-bit で,OS は Solaris 10.ssh でログインした際には 32-bit 版の curl が普通に使える.
% ldd /usr/local/bin/curl (← ruby の CGI で `ldd /usr/local/bin/curl` とかを叩く)
libcurl.so.4 => /usr/local/lib/64/libcurl.so.4
libidn.so.11 => /usr/lib/64/libidn.so.11
libiconv.so.2 => /usr/local/lib/64/libiconv.so.2
libssl.so.1.0.0 => /usr/local/lib/64/libssl.so.1.0.0
libcrypto.so.1.0.0 => /usr/local/lib/64/libcrypto.so.1.0.0
libldap-2.4.so.2 => (file not found)
liblber-2.4.so.2 => (file not found)
libresolv.so.2 => /lib/64/libresolv.so.2
libgen.so.1 => /lib/64/libgen.so.1
libz.so.1 => /usr/lib/64/libz.so.1
librt.so.1 => /lib/64/librt.so.1
libsocket.so.1 => /lib/64/libsocket.so.1
libnsl.so.1 => /lib/64/libnsl.so.1
libc.so.1 => /lib/64/libc.so.1
liblber-2.4.so.2 => (file not found)
libldap-2.4.so.2 => (file not found)
libgcc_s.so.1 => /usr/sfw/lib/64/libgcc_s.so.1
libdl.so.1 => /lib/64/libdl.so.1
libaio.so.1 => /lib/64/libaio.so.1
libmd.so.1 => /lib/64/libmd.so.1
libmp.so.2 => /lib/64/libmp.so.2
libscf.so.1 => /lib/64/libscf.so.1
libdoor.so.1 => /lib/64/libdoor.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libm.so.2 => /lib/64/libm.so.2
もちろん 64-bit libldap-2.4.so.2,liblber-2.4.so.2 をどこかから入手して,LD_RUN_PATH でパス指定するなども考えたが,まず Solaris 10 のバイナリがなかなか見つからず(sunsite.sut.ac.jpはいつのまにかなくなっていて,KDDI のミラーも404),https://mirror.opencsw.org/opencsw/ に OpenCSW Solaris package archive があるにはあったが,.pkg.gz の取り扱い(Linux 等での展開)を考えた時点で面倒になって断念.
今調べてみたら libldap-2.4.so.2 および liblber-2.4.so.2 が用意されていて,curl が CGI から動くようになっていた.
Squid (Debian GNU/Linux 3.4.8-6+deb8u4) 経由で www.ieee.org にアクセスすると,以下のようなエラーが表示されるようになった.
Bad Request
Bad Request
An error occurred. Please contact your System Administrator.
Copyright 2017 © IEEE . All rights reserved. Use of this Web site signifies your agreement to the IEEE Terms and Conditions.A not-for-profit organization, IEEE is the world's largest professional association for the advancement of technology.
squid.conf で forwarded_for off
としているのだが,off だと X-Forwarded-For: unknown
というヘッダ情報を送るらしい.X-Forwarded-For を付けない設定とするには delete とする必要があるらしい.以下 squid.conf より.
ノートPC (Let’s Note CF-AX2) の Enter キー付近にちょっと粘っこいジュースをこぼしてしまい,Enter キーの効きが相当悪くなった.というか,小指で Enter を押すのだが,かなり力を要する状態に.ということで,なんとかしてみた.
http://faq.askpc.panasonic.co.jp/faq/docs/003181を参照して爪とクランプの位置を確認しつつ,マイナスドライバーでクランプ側をまず外し,その後に爪側を外す.あとキートップやパンタグラフ部分の詳細はhttp://akiba-neo.com/letsnote/s9/210/が参考になった.
ジュースをこぼした箇所のキートップを外したところ.Enter 以外も若干引っかかる状態だったので,取り外して綿棒で(少し水を付けたりして)掃除.
Enter キーのキートップの裏は金具があったりなどで結構複雑な構造になっている.
Enter キーのキートップの裏.金具を上げてみたところ.この金具の箇所で動きが悪くなっていた模様.
という感じで,外したキートップを全て水洗いして元に戻したら普通に使えるようになった.
4.11-rc1が出ているので .config がどう変更されるのか見てみた.ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U.以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
-CONFIG_DEBUG_RODATA=y
, +CONFIG_STRICT_KERNEL_RWX=y
-CONFIG_DEBUG_SET_MODULE_RONX=n
, CONFIG_STRICT_MODULE_RWX=y
arch: Rename CONFIG_DEBUG_RODATA and CONFIG_DEBUG_MODULE_RONX によってCONFIG_DEBUG_RODATA
がCONFIG_STRICT_KERNEL_RWX
に,CONFIG_SET_MODULE_RONX
がCONFIG_STRICT_MODULE_RWX
にrenameされた.強制的にyになる.kernel および kernel module の text and rodata を read-only にするもの.
+CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
, +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
arch: Rename CONFIG_DEBUG_RODATA and CONFIG_DEBUG_MODULE_RONX で導入された.
-CONFIG_NMI_LOG_BUF_SHIFT=13
, +CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
printk: rename nmi.c and exported api によって rename された.13はdefault値.
+CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
lib/Kconfig.debug: Add ARCH_HAS_DEBUG_VIRTUAL で導入された.
+CONFIG_ARCH_HAS_SET_MEMORY=y
arch: add ARCH_HAS_SET_MEMORY config で導入された.
+CONFIG_COMMON_CLK=y
platform/x86: Enable Atom PMC platform clocks で PMC_ATOM=y
であれば y になるようになった.PMC_ATOM=y
は (ATOM となっているが) x86 であれば y になる.pmc_atom.c
自体 arch/x86/platform/atom: Move pmc_atom to drivers/platform/x86によって arch/x86/platform/atom/pmc_atom.c
から drivers/platform/x86/pmc_atom.c
に移動されている.
+CONFIG_CLKDEV_LOOKUP=y
, +CONFIG_HAVE_CLK=y
, +CONFIG_HAVE_CLK_PREPARE=y
, +CONFIG_PM_CLK=y
, +CONFIG_RATIONAL=y
+CONFIG_COMMON_CLK=y
の影響で y になった.
+CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
mm, x86: add support for PUD-sized transparent hugepages で導入された.X86_64
であれば y になる.
+CONFIG_BLK_SCSI_REQUEST=y
block: make scsi_request and scsi ioctl support optionalで導入.block/scsi_ioctl.c を切り離し可能にしたもの.手元の環境では BLK_DEV_BSG [=y] && BLOCK [=y]
で select されている.
+CONFIG_BLK_DEBUG_FS=y
blk-mq: fix debugfs compilation issues で導入.もともとCONFIG_DEBUG_FS=y
のところを一部切り分けられた(compilation issuesのため).y にしておく.
+CONFIG_MQ_IOSCHED_DEADLINE=y
mq-deadline: add blk-mq adaptation of the deadline IO schedulerで導入された.CONFIG_DEFAULT_IOSCHED="cfq"
(default)としているので n にしておく.
マイナンバーカードとPaSoRi RC-S380があれば e-Taxでの申告が可能ということで,やってみたメモ.
「e-Tax受付システム」の「メッセージボックス」から提出内容を確認する.ただし Chrome on Linux でログインしようとすると「政府共通認証局(官職認証局)のルート証明書」等がなければ警告がでるので,以下で対応.
https://www.nta.go.jp/tetsuzuki/shinkoku/shotoku/tokushu/jyunbi.htmから KeyImport.dmg (Mac用のファイル)をダウンロード.
それを適当に展開(Windows の 7-zipで展開).
展開すると以下の DER ファイルができるので,それをまず PEM に変換.
DER から PEM への変換は以下.
for i in *.der ; do openssl x509 -inform der -in $i -out ${i%.der}.pem ; done
chrome://settings/certificates の Certificate manager から Authorities に PEM (4つ)を追加.
クレジットカードでの支払も可能だが,この場合手数料が生じる(https://kokuzei.noufu.jp/参照.1万円毎82円)ので pay-easy (ペイジー)を利用.http://www.e-tax.nta.go.jp/tetsuzuki/tetsuzuki4.htm#Link2を参照しつつ「入力方式による納税手続」(つまり納付目的コードを利用)で納税する.
pay-easy で入力が要求されるのは金額の他に以下.
平成49年まで復興特別所得税額があるので,020(申告所得税)ではなく320(申告所得税及復興特別所得税)になるので注意 (いくつかの解説ページでは 020 を利用しているものもあるが).
「登録方式による納税手続」というのもあるらしく,この場合,e-Taxソフト等を使用して納付情報データを作成し,e-Taxに登録(納付情報登録依頼)し,e-Tax上で納付区分番号を確認するというもの.今回「e-Taxソフト」は使っていないので,この手続きはとらず.
PaSoRi RC-S380でマイナンバーカードが利用できるらしい.ということでやってみた.
基本的には http://www.nta.go.jp/tetsuzuki/shinkoku/shotoku/tokushu/jyunbi.htm に沿って「JPKI利用者ソフト」なるものをインストールするだけ.ただしこの「JPKI利用者ソフト」は「FeliCaランチャー」と干渉するらしく「FeliCaランチャー」が起動していると「JPKI利用者ソフト」がPaSoRiにアクセスできなく(ポートをFeliCaランチャーが掴んでいる状態に)なるので,「JPKI利用者ソフト」を利用する場合は「FeliCaランチャー」を終了しておく(通知領域から終了可能).
なお,署名用電子証明書と利用者証明用電子証明書の2種類が収められていて,それらのパスワードは以下のようになっている.
市役所等でマイナンバーカード受け取りの際に設定したものだが,その際英字は大文字で入力していたと思われるが,大文字小文字の区別はないっぽい.
以下の kernel の修正に対する対応が必要.NVIDIA 375.26 Kernel 4.10-rc1 (w/ CPU hotplug workaround) を参考に.
cpu/hotplug: Remove obsolete cpu hotplug register/unregister functions
nv-linux.h
で CONFIG_HOTPLUG_CPU
が define されていないと偽ればOK.
mm: add locked parameter to get_user_pages_remote()
get_user_pages_remote
の引数が1つ増えたので,引数の最後に NULL を渡す.
mm: use vmf->address instead of of vmf->virtual_address
vmf->virtual_address
を vmf->address
に置き換える.
--- a/nv-linux.h
+++ b/nv-linux.h
@@ -277,11 +277,13 @@ RM_STATUS nvos_forward_error_to_cray(struct pci_dev *, NvU32,
extern int nv_pat_mode;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)
#if !defined(NV_VMWARE) && defined(CONFIG_HOTPLUG_CPU)
#define NV_ENABLE_HOTPLUG_CPU
#include <linux/cpu.h> /* CPU hotplug support */
#include <linux/notifier.h> /* struct notifier_block, etc */
#endif
+#endif
#if !defined(NV_VMWARE) && \
(defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE))
--- a/os-mlock.c
+++ b/os-mlock.c
@@ -50,8 +50,13 @@ RM_STATUS NV_API_CALL os_lock_user_pages(
unsigned int flags = 0;
if(write) flags |= FOLL_WRITE;
if(force) flags |= FOLL_FORCE;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
+ ret = get_user_pages_remote(current, mm, (unsigned long)address,
+ page_count, flags, user_pages, NULL, NULL);
+#else
ret = get_user_pages_remote(current, mm, (unsigned long)address,
page_count, flags, user_pages, NULL);
+#endif
}
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
ret = get_user_pages_remote(current, mm, (unsigned long)address,
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -815,7 +815,7 @@ done:
#if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
{
- unsigned long vaddr = (unsigned long)vmf->virtual_address;
+ unsigned long vaddr = (unsigned long)vmf->address;
struct page *page = NULL;
int retval;
4.10 が出たので 2016/12/14 23:00 / Linux 4.8 -> 4.9同様 .config
がどう変更されるのか見てみた.2016/12/30 21:28 / Linux 4.9 -> 4.10-rc1 との差分のみ(ターゲットが異なる).
-CONFIG_I7300_IDLE=m
-CONFIG_I7300_IDLE_IOAT_CHANNEL=y
i7300_idle: Remove this driver
削除された.Intel 7300 chipset (のみ)向け idle memory power saving driver で,メンテナもいないから,とのこと.
CONFIG_NF_CT_PROTO_SCTP=m->y
CONFIG_NF_NAT_PROTO_SCTP=m->y
netfilter: conntrack: built-in support for SCTP
netfilter: built-in NAT support for SCTP
tristate から bool に変更された.module にしておくより built-in にした方が total の footprint が小さくなるから,ということらしい.
+CONFIG_DRM_I915_CAPTURE_ERROR=y
+CONFIG_DRM_I915_COMPRESS_ERROR=y
drm/i915: Allow disabling error capture
drm/i915: Compress GPU objects in error state
追加された.“If in doubt, say "Y"
” とのことだが n にしておく.
+CONFIG_CRYPTO_DEV_VIRTIO=m
crypto: add virtio-crypto driver
新たに導入された driver.Features/VirtioCrypto - QEMU 参照.Host OS の Crypto API を Guest OS (using Qemu) 側に提供するためのドライバ.n にしておく.
ZSWAP と ZRAM のメモ.ZSWAP は SWAP のための compressed cache で,ZRAM は Compressed RAM block device.ともに圧縮を用いてメモリ/SWAPの効率化を図るもの,だと思う.
CONFIG_ZRAM
: Compressed RAM block device supportCONFIG_ZSWAP
: Compressed cache for swap pages (EXPERIMENTAL)CONFIG_ZRAM
で設定する.モジュール化可.CONFIG_ZSMALLOC
に依存し,CONFIG_ZSMALLOC_STAT=y
としておくと debugfs 経由で stat が確認できる./sys/kernel/debug/zsmalloc/zram0/classes
等.
Debian の場合は特に package は提供されておらず,https://wiki.debian.org/ZRam のように /etc/init.d/zram
を用意して利用する.
SWAP する際にこの圧縮された block device が利用されるイメージ.とはいえこの compressed block device 自体も RAM であるという,不思議な状況になる.
SWAP する際にそれを圧縮して RAM 上に CACHE する,というアプローチ.こちらは別途 SWAP 用の HDD/SDD などの存在が想定される.
CONFIG_ZSWAP
で設定,モジュール化不可.CONFIG_ZPOOL
に依存するとともに,Default の mm/zswap.c
で #define ZSWAP_ZPOOL_DEFAULT "zbud"
となっているので,CONFIG_ZBUD=y
(Low (Up to 2x) density storage for compressed pages)も組み込む必要があるっぽい.
# echo 1 > /sys/module/zswap/parameters/enabled
で enable する.max_pool_percent
, zpool
, compressor
を設定可能./sys/kernel/debug/zswap/
以下に stat がある.sudo grep -R . /sys/kernel/debug/zswap
とかで参照.
参考にしたページ: https://web.archive.org/web/20170311013437/http://gnu.hatenablog.com/entry/2016/01/12/072154
MediaWiki で inkscape を用いて SVG (scalable vector graphics) のサムネイルを作る設定をしていたのだが,inkscape の version を jessie の backports のもの (0.48.5-3 -> 0.92.0-4~bpo8+1)にしたらうまく動かなくなった.
Error creating thumbnail:
(process:2380): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Failed to get connection
** (inkscape:2380): CRITICAL **: dbus_g_proxy_new_for_name: assertion 'connection != NULL' failed
** (inkscape:2380): CRITICAL **: dbus_g_proxy_call: assertion 'DBUS_IS_G_PROXY (proxy)' failed
** (inkscape:2380): CRITICAL **: dbus_g_connection_register_g_object: assertion 'connection != NULL' failed
** (inkscape:2380): WARNING **: GC Warning: Out of Memory! Heap size: 2 MiB. Returning NULL!
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Emergency save activated!
Emergency save completed. Inkscape will close now.
If you can reproduce this crash, please file a bug at www.inkscape.org
with a detailed description of the steps leading to the crash, so we can fix it.
** Message: Error: Inkscape encountered an internal error and will close now.
/somewhere/mediawiki/includes/limit.sh: line 101: 2379 Aborted /usr/bin/timeout $MW_WALL_CLOCK_LIMIT /bin/bash -c "$1" 3>&-
どうやら shell を起動する際にメモリサイズを制限しているらしく,そこで引っかかっているらしい./etc/mediawiki/LocalSettings.php
で$wgMaxShellMemory
という変数で設定するが,https://www.mediawiki.org/wiki/Manual:$wgMaxShellMemoryによると default は 307200 KB = 300 MB.inkscape がメモリを喰いすぎな気もする.以下のように500 MBに設定すれば動くようになった.
[/etc/mediawiki/LocalSettings.php]
$wgMaxShellMemory = 512000;
いろいろ事情があって MediaWiki を 1.28.0 に上げた.実際には git の REL1_28
.以下メモ.
gitを使ってdownload/installする方法は https://www.mediawiki.org/wiki/Download_from_Gitを参照.git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git
で取り出して REL1_28
のブランチを checkout する.extension/
や skins/
は空で,vendor/
は存在しないので,個別に clone するか git submodule add する (同様に同じリモートブランチ名 REL1_28
のブランチを checkout する).今回はなんとなく submodule にした.
vendor/
を使わずにComposer なるもを使うこともできるらしいが,ややこしそうだったので,単に vendor/ を submodule add することにした.CirrusSearch が REL1_28
では v2.x の Elasticsearch を要求する(2.3.3推奨).Elasticsearch は jessie backports でも 1.6.2+dfsg-1~bpo8+1 なので,https://www.elastic.co/guide/en/elasticsearch/reference/2.4/setup-repositories.html を参照しつつ本家の debian package を install する(なんとなく2.4.4にしたが動いている).
images と cache の directory の owner/mode を調整して,images については以前のデータを copy しておく.
LocalSettings.php 調整.
Elasticsearch の index 生成(?)をする.https://phabricator.wikimedia.org/diffusion/ECIR/browse/master/README参照.
Elasticsearchだが,今回色々混乱して色んなバージョンが混ざった状態に一瞬なってしまい,Elasticsearchが保持するデータ(/var/lib/elasticsearch/
にある)を一旦まるごと削除した.以下のような感じ.
sudo /etc/init.d/elasticsearch stop
sudo rm -rf /var/lib/elasticsearch/*
sudo rm -rf /var/lib/elasticsearch/.* (dot で始まるものがあれば)
sudo /etc/init.d/elasticsearch start
LocalSettings.phpだが,
$wgCacheDirectory = "$IP/cache";
などと明示的に $wgCacheDirectory を指定しないと以下のようなエラーが出たような気がする(default の設定がなくなった?).
LCStoreCDB.php: Unable to move the new CDB file into place.
既存ユーザ(一度ログインしたことのあるユーザ)は Windows 10 Client に(ドメインのアカウントで)ログインできるが,新規ユーザはログインできないという問題が発生.おそらくちょっと前にあった更新プログラムの影響かもしれない.
サーバ側は Samba (2:4.2.14+dfsg-0+deb8u2) で smbldap-tools で LDAP に繋いで,Linux とアカウントを共有しているような環境.サーバ側の問題,特に Samba と LDAP の連携まわりを疑ったが,Windows 8 Client ではこのような症状がでていないので,Windows 10 固有の問題らしい.
症状は以下のとおり.
ドメインのアカウントでログインしようとすると「現在ログオン要求をサービスするログオン サーバーがありません」と言われてログイン(認証できない)
セキュア チャネル破損を疑い PowerShell の Test-ComputerSecureChannel で確認したところ,以下のような感じ(修正不能).
> Test-ComputerSecureChannel
False
> Test-ComputerSecureChannel -repair
Test-ComputerSecureChannel : ドメイン内のコンピューター アカウントのセキュリティで保護されたチャネル パスワードをリセットできません。次の例外が原因で操作に失敗しました: サーバーは使用可能ではありません。
。
発生場所 行:1 文字:1
+ Test-ComputerSecureChannel -repair
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (hostxxx:String) [Test-ComputerSecureChannel], InvalidOperationException
+ FullyQualifiedErrorId : FailToResetPasswordOnDomain,Microsoft.PowerShell.Commands.TestComputerSecureChannelCommand
一旦ドメインから抜けたり再度参加したりいろいろ試したが,今度は既存ユーザ(一度ログインしたことのあるユーザ)までログインできなくなるという状況に.
日本語で調べていたためまったく検索に引っかからなかったのだが,samba.org の https://wiki.samba.org/index.php/Required_Settings_for_Samba_NT4_Domains によると smb.conf
に
server max protocol = NT1
を書く必要があるとのこと.これで解決した.なお「現在ログオン要求をサービスするログオン サーバーがありません」に対応する英語メッセージは There are currently no logon servers available to service the logon request.
4.10-rc1 が出ているので .config がどう変更されるのか見てみた.ただし 2016/12/14 23:00 / Linux 4.8 -> 4.9 とはターゲットが異なる(ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U).以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
+CONFIG_INITRAMFS_COMPRESSION=".gz"
initramfs: select builtin initram compression algorithm on KConfig instead of Makefile
このままで.
+CONFIG_POSIX_TIMERS=y
posix-timers: Make them configurable
組込み向けに posix-timers の機能を取り外し可能にしたというもの.通常は y にしておく.
+CONFIG_SCHED_MC_PRIO=y
+CONFIG_ACPI_CPPC_LIB=y
x86: Enable Intel Turbo Boost Max Technology 3.0
sched/x86: Change CONFIG_SCHED_ITMT to CONFIG_SCHED_MC_PRIO
新たに導入された arch/x86/kernel/itmt.c
(Support Intel Turbo Boost Max Technology 3.0)関連.+CONFIG_SCHED_MC_PRIO=y
なら +CONFIG_ACPI_CPPC_LIB=y
になる.今回のターゲットは i7-3687U なので n にしておく.
+CONFIG_COMPAT_32=y
x86/kconfig: Clean up 32-bit compat options
自動で y になる.
+CONFIG_NET_VENDOR_ALACRITECH=y
net: ethernet: slicoss: add slicoss gigabit ethernet driver
新たなデバイスサポート.n にする.
+CONFIG_NET_VENDOR_SOLARFLARE=y
ethernet: sfc: Add Kconfig entry for vendor Solarflare
drivers/net/ethernet/sfc/falcon/Kconfig
を選択的に source するための option.使わないので n にする.
CONFIG_SYNC_FILE=n->y
dma-buf: Rename struct fence to dma_fence
dma-buf/sw_sync: de-stage SW_SYNC
dma-buf/sync_file: improve Kconfig description for Sync File
dma-buf/sync_file: de-stage sync_file
sync_file.c
, sw_sync.c
, sync_debug.c
が drivers/staging/android/ から drivers/dma-buf/ に移動したことに関連するものらしい.drm/fence: add in-fences support で CONFIG_DRM が SYNC_FILE を select するので,y 以外選択肢なし.
CONFIG_MAILBOX=n->y
+CONFIG_PCC=y
CONFIG_ACPI_CPPC_LIB=y
により select された模様.n にする
+CONFIG_FS_IOMAP=y
ext4: Add select for CONFIG_FS_IOMAP
EXT4_FS
により FS_DAX
の場合に select される.FS_DAX
を n にして,FS_IOMAP
も n にする.
+CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
printk: add Kconfig option to set default console loglevel
hard-code されていたものを .config に移動したのみ.default のままにしておく.
+CONFIG_CRYPTO_ACOMP2=y
crypto: acomp - add asynchronous compression api
CRYPT_MANAGER2
が依存する.しかたなく y に.CRYPT_MANAGER
(CRYPT_MANAGER2
を select)はたぶん LUKS (CONFIG_DM_CRYPT
) 関連で選択しているような気がする.
-CONFIG_CRYPTO_ABLK_HELPER=m
+CONFIG_CRYPTO_SIMD=m
crypto: aesni - Convert to skcipher
CRYPTO_AES_NI_INTEL
が select するものが変更になった.aesni_intel.ko は現状 load されているので提案されたとおりにする.
docs-rst: create an user’s manual book で REPORTING-BUGS が Documentation/admin-guide/reporting-bugs.rst に rename されているので,make-kpkg で .deb が作れなくなっている./usr/share/kernel-package/ruleset/targets/headers.mk
で REPORTING-BUGS を install している箇所を comment out して make-kpkg する.
あと arch/x86/kernel/cpu/vmware.c
に幾つか修正が施されているようで dmesg の diff (抜粋)は以下のような感じ.
-Host bus clock speed read from hypervisor : 66000000 Hz
+vmware: TSC freq read from hypervisor : 2601.000 MHz
+vmware: Host bus clock speed read from hypervisor : 66000000 Hz
+vmware: using sched offset of 10831029224 ns
-Booting paravirtualized kernel on bare hardware
+Booting paravirtualized kernel on VMware hypervisor
Linux 4.10 に REPORTING-BUGS が含まれない問題だが,kernel-package に https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=849357 のように bug report されている.
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=849357 だが NMU (Non-maintainer upload) で修正済み(Jul 2017).メンテナの git https://anonscm.debian.org/git/users/srivasta/debian/kernel-package.git/ には反映されていない模様.
PaSoRi RC-S380で nanaco の残高が確認できず,変だなと思っていたら http://www.floq.jp/kisekae/ のとおり FLO:Q(フローク)(電子マネービューワー含む)が12月20日でサービスを終了していた.
残高を確認するだけなので FeliCa Balance Viewerをとりあえず使うことにした(Linux版もあるらしい).スマートフォンのNFCをつかってアプリで読んでもよいのだけども.
スマートフォン(Android)の買い替えを検討中.現在使っているのは HTC One (M7) でスペックは以下.
不満はないが,若干もっさりしだしたのとディスプレイが割れているので,買い替えたい.ASUS の ZenFone シリーズで検討中.
ZS570KL の日本版は Snapdragon 821 になっていて,ストレージも 256G というとんでもないスペック(256Gをなにに使うんだろう...).ZS570KL は https://www.asus.com/jp/News/M3BOvqwUePdKjglj のとおり一旦受注停止していたが 12/22 に受注再開されている.買うのであれば ZS570KL なのだが10万円ぐらいなので逡巡してしまう.対して海外版は7万円強(その分スペックも落ちる).微妙.とりあえず ZE520KL が手頃感もありつつ,今のものと比べてサイズも若干だけ大きい程度なので,当面を凌ぐには良いかもと思いつつある.
nvidia-kernel-dkms 340.96-1 (Debian GNU/Linux stable) を Linux 4.9 で compile しようとすると以下のようにコケる.
/usr/src/nvidia-current-340.96/os-mlock.c:XX:XX: error: too many arguments to function ‘get_user_pages_remote’
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=9beae1ea89305a9667ceaab6d0bf46a045ad71e7 の影響の様なので os-mlock.c の
ret = get_user_pages_remote(current, mm, (unsigned long)address,
page_count, write, force, user_pages, NULL);
の箇所を以下のように変更.
{
unsigned int flags = 0;
if(write) flags |= FOLL_WRITE;
if(force) flags |= FOLL_FORCE;
ret = get_user_pages_remote(current, mm, (unsigned long)address,
page_count, flags, user_pages, NULL);
}
実際は write=1, force=0 なので,
ret = get_user_pages_remote(current, mm, (unsigned long)address,
page_count, FOLL_WRITE, user_pages, NULL);
でもOKなはず.ただし compile は通るが
NVRM: failed to register procfs!
NVRM: request_mem_region failed for 16M @ 0xfa000000. This can
NVRM: occur when a driver such as rivatv is loaded and claims
NVRM: ownership of the device's registers.
NVRM: DRM init failed
NVRM: NVIDIA init module failed!
という感じで modprobe に失敗する.かつ /proc/driver/nvidia/
だけが残されて,再度 modprobe する際は
proc_dir_entry 'driver/nvidia' already registered
とか怒られたり ls /proc/driver/nvidia/
とかすると固まったりする...Linux 4.9 を諦めるか,340.96-1 ではなく backports の 367.57-2~bpo8+1を使うか...
/proc/driver/nvidia/
(procfs) の部分については単に nvidia-kernel-dkms 340.96-1 の bug らしい(error handling が抜けている).以下でなんとかなる.
--- a/nv.c
+++ b/nv.c
@@ -809,13 +809,17 @@ int __init nvidia_init_module(void)
/* create /proc/driver/nvidia/... */
rc = nv_register_procfs();
if (rc < 0)
+ {
nv_printf(NV_DBG_ERRORS, "NVRM: failed to register procfs!\n");
+ rc = -ENODEV;
+ goto failed5;
+ }
if (pci_register_driver(&nv_pci_driver) < 0)
{
rc = -ENODEV;
nv_printf(NV_DBG_ERRORS, "NVRM: No NVIDIA graphics adapter found!\n");
- goto failed4;
+ goto failed35;
}
if (nv_drm_init(&nv_pci_driver) < 0)
@@ -1040,6 +1044,9 @@ failed3:
pci_unregister_driver(&nv_pci_driver);
+failed35:
+ nv_unregister_procfs();
+
failed5:
rm_shutdown_rm(sp);
goto failed4 の箇所は普通に goto 先を間違っているような気がする.
https://devtalk.nvidia.com/default/topic/981852/linux/resolution-patch-attached-for-nvidia-linux-driver-340-98-x86_64-using-linux-kernel-4-9/ から辿れる http://pastebin.com/raw/0XE0e8Wx にある以下のパッチをあてたらうまく動くようになった.
--- kernel/nv-drm.c
+++ kernel/nv-drm.c
@@ -115,7 +115,11 @@ static const struct file_operations nv_drm_fops = {
};
static struct drm_driver nv_drm_driver = {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+ .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY,
+#else
.driver_features = DRIVER_GEM | DRIVER_PRIME,
+#endif
.load = nv_drm_load,
.unload = nv_drm_unload,
.fops = &nv_drm_fops,
https://patchwork.freedesktop.org/patch/102820/や https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=3cbf6a5deb2f4a469de7a90a3cc169e8fcba95e2 によると,drm について比較的新しい driver は DRIVER_MODESET というフラグが用いられているが,実際にこれは「DRIVER_MODERN」(新しい driver)の意味であって super confusing だから古いタイプの driver に DRIVER_LEGACY というフラグを付けることにしたらしい.
Linux 4.9 がリリースされたので,make menuconfig
で何もせずに Exit したら手元の Linux 4.8 の .config がどう変更されるのか見てみた.以下 -
は削除されたもの,+
は追加されたもの m->n
等は値の変化を示す.
+CONFIG_THREAD_INFO_IN_TASK=y
sched/core: Allow putting thread_info into task_struct
x86: Move thread_info into task_struct
X86 であれば無条件に y になる.
+CONFIG_HAVE_ARCH_VMAP_STACK=y
+CONFIG_VMAP_STACK=y
x86/mm/64: Enable vmapped stacks (CONFIG_HAVE_ARCH_VMAP_STACK=y)
fork: Add generic vmalloced stack support
X86_64 であれば CONFIG_HAVE_ARCH_VMAP_STACK=y
が select されて CONFIG_VMAP_STACK
(virtually-mapped stack, vmapped stack)が選択可能になる.CONFIG_VMAP_STACK
の default は y.fork: Optimize task creation by caching two thread stacks per CPU if CONFIG_VMAP_STACK=y
とのことなので高速化にも繋がる.Linux 4.9 の feature の1つ.
+CONFIG_BLK_MQ_PCI=y
blk_mq: linux/blk-mq.h does not include all the headers it depends on
blk-mq: provide a default queue mapping for PCI device の fix.y 以外選択肢無し.
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=m->n
cpufreq: schedutil: Make it depend on CONFIG_SMP
CPU_FREQ_GOV_SCHEDUTIL が SMP に依存するため m を選択できなくなった.使っていないので,提案どおり n にする.
+CONFIG_NET_VENDOR_AMAZON=y
net: ena: Add a driver for Amazon Elastic Network Adapters (ENA)
新たに導入された driver for Amazon Elastic Network Adapters (ENA) (drivers/net/ethernet/amazon/
)関連.使う予定がないので n にする.
+CONFIG_SERIAL_8250_LPSS=y
serial: 8250_lpss: split LPSS driver to separate module
Intel Braswell 等の Intel SoC 向け UART driver が 8250_pci.c
から 8250_lpss.c
に分離されたとのこと.使う予定がない(あっても UART を使わない)ので n にする.
-CONFIG_GPIO_DEVRES=y
gpio: Remove GPIO_DEVRES option
GPIO_DEVRES の option を追加したけど意味がなくなったので削除された模様.
-CONFIG_DRM_VIA=m
drm: hide legacy drivers with CONFIG_DRM_LEGACY
DRM_LEGACY "Enable legacy drivers (DANGEROUS)"
を選択しないとこの option は現れなくなった.不要だろうと思われるので提案どおりにする.
+CONFIG_DW_DMAC_CORE=y
CONFIG_DW_DMAC_PCI=n->y
DesignWare AHB DMA PCI driver だが CONFIG_SERIAL_8250_LPSS=y
で select されて y になっていた模様.n にする.そもそもは Intel LPSS (CONFIG_X86_INTEL_LPSS=y
) に由来するが,これは Haswell (Intel 8 Series chipsets AKA Lynx Point) 以降 (Kconfig によっては Skylake の Intel 100 Series chipsets AKA Sunrise Point との記載もある) を使う可能性があれば y にしておいたほうが無難かもしれない.
+CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
mm/hugetlb: introduce ARCH_HAS_GIGANTIC_PAGE
X86_64
であれば無条件に select される.
-CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
ftrace: Remove CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST
from config
.config から通常の define に変更されたとのこと.そもそもなぜ y にしていたのか不明.
-CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
atomic64: no need for CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
削除された.
+CONFIG_SBITMAP=y
blk-mq: abstract tag allocation out into sbitmap library
block/blk-mq-tag.c
の一部が lib/sbitmap.c
に分離されたことによりできた option.というか CONFIG_BLOCK
で select されるので,ほぼ強制的に y になる.
yasnippet を使おうと思う機会がそこそこあるのだが,いちいち思い出すのに時間がかかるのでメモ.
ところで yas-insert-snippet を C-x i i に割り当てる設定が散見されるが,C-x i は通常 insert-file なので(see /usr/share/emacs/24.5/lisp/file.el.gz
),ちょっとイマイチ.
参考にしたページ:
いつの間にか以下のとおり sid で dmesg が user 権限で実行できないようになった.
% dmesg
dmesg: read kernel buffer failed: Operation not permitted
/usr/share/doc/linux-image-4.8.0-2-amd64/changelog.linux.gz
によるとCONFIG_SECURITY_DMESG_RESTRICT=y
が default になった模様.
* security,printk: Enable SECURITY_DMESG_RESTRICT, preventing non-root users
reading the kernel log by default (sysctl: kernel.dmesg_restrict)
少なからず困惑した人がいるようで https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=842226 では純粋に bug として報告されていたり (そういう仕様になった,ということで終わり),https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=847198 では adm group の user は dmesg できるようにして欲しいというのが wishlist として挙げられていたりする(これは難しそう).
以下のどちらかをすれば user 権限で dmesg できるようになる.
% sudo sysctl kernel.dmesg_restrict=0
% sudo sh -c 'echo 0 > /proc/sys/kernel/dmesg_restrict'
起動時に有効にするには/etc/rc.conf
にそれっぽい command を書いておくか /etc/sysctl.conf
もしくは /etc/sysctl.d/local.conf
に以下を書いておく.
kernel.dmesg_restrict = 0
jessie の backports の最新版 kernel linux-image-4.8.0-0.bpo.2-amd64 (4.8.15-2~bpo8+2) でも上記と同じ症状が発生する模様.
何かの拍子に(というかCRON-APTで)再び xserver-xorg-video-nvidia (unstable は 367.57-2)が uninstall され,これが xorg-video-abi-20 以下 (および xserver-xorg-core (< 2:1.18.99) に依存しており,xserver-xorg-core は現在 2:1.19.0-2 で Provides: xorg-input-abi-24, xorg-video-abi-23
という状況なので,xserver-xorg-video-nvidia が install できない.
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=845638 にあるとおり xorg-server の 1.18 から 1.19 への transition に関する問題らしい.Debian experimental にある 375.20 を使えば問題ないらしいが,845638 ではまず 370.28 を unstable に push することを考えているらしい(375.20 は変更点が多いから,というのが理由になっている).
がしかし 370.28 が push される気配もないので,experimetal の 375.20 を install して使うことにした.問題なく動作している.
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=845638 だが結局 375.20 が unstable に降りてくる形になった模様.
xserver-xorg-input-vmmouse が古い xserver-xorg-core に依存したままで xserver-xorg-core を upgrade することが出来なかったのでちょっと調べた.どうやら xserver-xorg-input-vmmouse は https://tracker.debian.org/news/784550 によると July 16 時点で unstable から削除された模様 (July 20 には testing からも削除された).理由は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=831420 のとおり Linux kernel driver 側でサポートされたからとのこと.たしかに 4.1-rc1 で取り込まれている.CONFIG_MOUSE_PS2_VMMOUSE=y
で有効になる (CONFIG_HYPERVISOR_GUEST=y
等に依存).
Intel 8 Series/C220 Series Chipset (具体的にはC226)の Onboard RAID (RAID5)上で LUKS の暗号化を入れて,その上で btrfs を置いて NFS でファイルサーバにしているのだが,そのパフォーマンスについて.
ちなみに CPU は4コア4スレッド(stable 運用で,kernel は backports の linux-image-4.6.0-0.bpo.1-amd64 4.6.4-1~bpo8+1).暗号化しているのは廃棄の手間を考えて,btrfs は snapshot による daily backup のため.RAID5 が Onboard (ソフトウェア RAID)なのは予算の都合上.
だいたい2年半ぐらい運用していて,それなりにファイル数も増えて,snapshot数も増えた状態で,頻繁にiowaitで固まるようになった.
以下チューニングのポイント.
brtfs は default で relatime で mount される.つまりファイル読み出しを行えばファイルの atime (アクセス時刻)が更新されるが,更新タイミングは多くとも1日1回 (古いatimeが現在より1日前までの時刻であれば更新されない,はず).とはいえsnapshotをとっている環境では,ファイル自体に変更がなければ容量が増えないのであるが,atime が更新されるタイミング(つまり読み込んだだけ)で COW (copy-on-write)が発生する.daily snapshot をとっている環境ではこれは辛い.ということで noatime option で mount するようにする (書き込みが減って,容量増加が抑えられる).
snapshot をとっている環境では各 snapshot がどの程度の容量になっているのかを調べるため quota を enable する設定もあるが,これをするとパフォーマンスが落ちる(詳しくは見ていないが COW発生とともに何がしかのコンシステンシをとるための transaction が大量に発生するとか?).
https://btrfs.wiki.kernel.org/index.php/Quota_support#Known_issues
Combining quota with (too many) snapshots of subvolumes can cause performance problems, for example when deleting snapshots.
https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-quota#PERFORMANCE_IMPLICATIONS
When the quotas are turned on, they affect all extent processing, taking a performance hit. It is not recommended to turn on qgroups unless the user intends to actually use them.
この transaction (process 名は btrfs-transaction もしくは btrfs-transacti) は default では 30秒間隔で実行される (default の option が commit=30 になっている).なにかを書き込んだ際に iowait で応答がなくなるわけではなくて,周期的に iowait で固まるので,原因を追うのに困難した.
transaction の量が多いと disk-io がしばらく埋まる.早めに吐き出そうと commit=3 等にしても,そもそも transaction の量が多いのが問題であまり解決にはならなかった.ちなみに commit=0 の設定をすると強制的に default の commit=30 になる.transaction の量が何で決まるのかは正確には追えていない (たぶん quota enable だと増える).
あまり効果がないかもしれないが noflushoncommit option を付ける (default は flushoncommit).
RAID5側のチューニングも考える.たとえば以下
# echo 32768 > /sys/block/md126/md/stripe_cache_size
負荷状態をモニタするには dstat が便利(以下 btrfs-transaction の iowait で詰まっている様子.この状態で nfs のアクセスがある一定量あれば iowait が 100% になってしばし固まる).
% sudo dstat --top-bio -d -n -c
----most-expensive---- -dsk/total- -net/total- ----total-cpu-usage----
block i/o process | read writ| recv send|usr sys idl wai hiq siq
btrfs-trans 412k 109M| 41M 29M| 317k 16k| 0 7 71 22 0 0
btrfs-trans 0 17M| 31M 59M| 338B 3124B| 0 11 49 40 0 0
kworker/u8: 0 64k| 32M 0 |2474B 6486B| 0 1 50 49 0 0
nfsd 0 108k| 31M 0 |4826B 5704B| 0 0 50 49 0 0
| 32M 0 |2884B 3606B| 0 1 50 49 0 0
nfsd 0 72k| 28M 0 | 38k 144k| 0 1 50 49 0 0
nfsd 0 56k| 30M 0 | 70k 209k| 0 1 50 49 0 0
| 31M 0 | 442B 2208B| 0 0 51 49 0 0
| 30M 0 | 816B 1648B| 0 0 51 49 0 0
| 11M 19M| 510B 2048B| 1 2 50 48 0 0
| 0 25M| 170k 3166B| 0 0 51 49 0 0
| 0 29M|6894B 1600B| 0 0 50 49 0 0
kworker/u8: 0 64k| 0 29M|2448B 2766B| 0 0 50 49 0 0
| 0 27M| 396B 2138B| 0 0 51 49 0 0
| 0 25M| 984B 1456B| 0 1 50 49 0 0
| 0 29M| 396B 1548B| 0 0 50 49 0 0
| 0 28M|1618B 2026B| 0 0 50 49 0 0
kworker/u8: 0 16k| 0 28M|1386B 1362B| 0 1 50 49 0 0
|5552k 21M|1102B 2380B| 0 3 49 48 0 0
smbd 0 84k| 27M 16k|3792B 3042B| 0 0 50 49 0 0
| 31M 0 |1220B 1460B| 0 0 50 49 0 0
| 32M 0 | 670B 2376B| 0 1 50 49 0 0
| 32M 0 |1478B 2656B| 0 0 50 50 0 0
smbd 0 16k| 35M 0 | 938B 1950B| 0 1 50 49 0 0
| 13M 20M|1422B 2592B| 0 1 50 48 0 0
| 0 26M|1218B 2264B| 0 0 52 48 0 0
| 0 30M|5520B 2968B| 1 0 49 50 0 0
| 0 31M| 482B 2480B| 0 1 50 49 0 0
| 0 32M| 752B 1968B| 0 1 50 49 0 0
| 0 39M|1450B 2090B| 0 1 50 49 0 0
nfsd 0 1212k|2216k 11M|1290k 7204k| 0 5 69 25 0 0
nfsd 0 596k| 72k 72k| 315k 11M| 0 1 98 0 0 1
nfsd 0 1312k| 516k 584k|1305k 4603k| 0 1 96 3 0 0
nfsd 0 10M| 0 0 | 11M 77k| 0 1 99 0 0 0
nfsd 0 44k| 0 0 | 48k 43k| 0 0 100 0 0 0
nfsd 0 4096B| 0 0 |6972B 6322B| 0 0 99 0 0 0
nfsd 0 76k| 0 0 | 56k 87k| 0 0 100 0 0 0
nfsd 0 132k| 72k 72k| 112k 233k| 0 0 99 0 0 0
| 0 0 |3262B 4372B| 1 0 100 0 0 0
nfsd 0 4096B| 0 0 |2556B 3012B| 0 0 100 0 0 0
nfsd 0 280k| 88k 52k| 229k 19k| 0 1 99 0 0 0
ionice や renice で nfsd や btrfs-transacti の優先度を下げて(I/O については ionice -c 3 で idle class にして,プロセス優先度も nice -n 19 するとか)負荷が上がった時でも譲り合ってもらえるような設定を試してみたが,やはりうまく行かない.
結局 btrfs-transacti が間欠的に書き込みを行うのが問題らしい.通常は数十MBなのだが,たまに数百Mbyte級の read/write が発生する (なにに由来してサイズが変動するのか未調査).ちょっと微妙だが btrfs-transacti の kernel thread を起こすタイミングを手動で調整することにする.というか,mount -o remount すると btrfs-transacti が起きるので,あとはずっと sleep してもらうようにする.具体的には以下.
mount -o remount,commit=172800 /mount_opint
とか.commit interval が長いと不具合発生時に未 commit のものが残ることになる(ように思われる)ので,その点要注意.手動で再起動する前にも一旦 remount したほうが良いのかもしれない.
ちなみに数時間分の commit すべきなにかを溜め込んだだろう状態で remount して一気に commit してみたが,それほど disk access は無かった.適切に merge されたりするのかもしれない.あと,メモリ使用量(もしくは disk 上のバッファ?)とかも気になるところ (際限なく溜め込めるわけでもないような気がする).
samba 2:4.4.6+dfsg-1 が segfault で動いてくれない.
[Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 0x00007f9713a4ae1a in __GI___waitpid (pid=8474, stat_loc=stat_loc@entry=0x7ffe7b34f310, options=options@entry=0) at ../sysdeps/unix/sysv/linux/waitpid.c:29 #0 0x00007f9713a4ae1a in __GI___waitpid (pid=8474, stat_loc=stat_loc@entry=0x7ffe7b34f310, options=options@entry=0) at ../sysdeps/unix/sysv/linux/waitpid.c:29 #1 0x00007f97139d208b in do_system (line=<optimized out>) at ../sysdeps/posix/system.c:148 #2 0x00007f97150ee191 in smb_panic_s3 () from /usr/lib/x86_64-linux-gnu/libsmbconf.so.0 #3 0x00007f9717601b6f in smb_panic () from /usr/lib/x86_64-linux-gnu/libsamba-util.so.0 #4 0x00007f9717601d86 in ?? () from /usr/lib/x86_64-linux-gnu/libsamba-util.so.0 #5 <signal handler called> #6 0x00007f9713f460f5 in talloc_get_size () from /usr/lib/x86_64-linux-gnu/libtalloc.so.2 #7 0x00007f97151092d6 in event_add_to_poll_args () from /usr/lib/x86_64-linux-gnu/libsmbconf.so.0 #8 0x00007f97151098b1 in ?? () from /usr/lib/x86_64-linux-gnu/libsmbconf.so.0 #9 0x00007f9713d3604d in _tevent_loop_once () from /usr/lib/x86_64-linux-gnu/libtevent.so.0 #10 0x00007f9713d3627b in tevent_common_loop_wait () from /usr/lib/x86_64-linux-gnu/libtevent.so.0 #11 0x000055dffc2e4221 in main () A debugging session is active.
以下が関連するのかも.
とりあえず libtalloc2 と libtevent0 を以下のように downgrade したら直った.
この BUG 対策でsamba 2:4.4.6+dfsg-2がリリースされ,問題点が修正された様子.patch は https://anonscm.debian.org/cgit/pkg-samba/samba.git/commit/?id=9a72dc156a10627edf301365c5110d5c13768f2c.
しばらく再起動していなかったのだが,諸事情により再起動すると,Xが起動しないという Debian GNU/Linux sid (unstable) に良くあるいつものパタン.
以下のような環境で,まず Xorg が起動しない.
/var/log/messages によると以下のループ.
Sep 5 10:16:23 hoge gdm-launch-environment]: AccountsService: Could not get current seat: No data available Sep 5 10:16:23 hoge /usr/lib/gdm3/gdm-wayland-session[5493]: Unable to register display with display manager Sep 5 10:16:23 hoge gdm3: Child process -5493 was already dead. Sep 5 10:16:23 hoge gdm3: Child process 5489 was already dead. Sep 5 10:16:23 hoge gdm3: Unable to kill session worker process
/var/lib/gdm3/.local/share/xorg/Xorg.0.log によると nvidia の driver が見つからなくて EE で落ちている.最近 CRON-APT で横着して upgrade していたのだが何かの拍子に xserver-xorg-video-nvidia が抜けてしまったらしい.ということで入れる.
次は Xorg も /usr/lib/gdm3/gdm-x-session も起動しているが gnome-shell が起動しない(ログイン画面が出ず真っ黒のまま)./var/log/messages によると以下のようにまた nvidia まわりでコケている.
Sep 5 10:16:52 hoge gnome-session[9184]: modprobe: ERROR: could not insert 'nvidia_current_modeset': Operation not permitted Sep 5 10:16:52 hoge gnome-session[9184]: modprobe: ERROR: ../libkmod/libkmod-module.c:977 command_do() Error running install command for nvidia_modeset Sep 5 10:16:52 hoge gnome-session[9184]: modprobe: ERROR: could not insert 'nvidia_modeset': Operation not permitted Sep 5 10:16:52 hoge gnome-session[9184]: gnome-session-binary[9184]: WARNING: Could not parse desktop file orca-autostart.desktop or it references a not found TryExec binary Sep 5 10:16:52 hoge org.gnome.Shell.desktop[9210]: modprobe: ERROR: could not insert 'nvidia_current_modeset': Operation not permitted Sep 5 10:16:52 hoge org.gnome.Shell.desktop[9210]: modprobe: ERROR: ../libkmod/libkmod-module.c:977 command_do() Error running install command for nvidia_modeset Sep 5 10:16:52 hoge org.gnome.Shell.desktop[9210]: modprobe: ERROR: could not insert 'nvidia_modeset': Operation not permitted Sep 5 10:16:52 hoge kernel: [ 1059.936725] gnome-shell[9210]: segfault at 14 ip 00007faf5bd4a817 sp 00007fff6e0c7a80 error 4 in libmutter.so.0.0.0[7faf5bcfb000+127000] Sep 5 10:16:52 hoge gnome-session[9184]: gnome-session-binary[9184]: WARNING: Application 'org.gnome.Shell.desktop' killed by signal 11 Sep 5 10:16:52 hoge org.gnome.Shell.desktop[9221]: modprobe: ERROR: could not insert 'nvidia_current_modeset': Operation not permitted Sep 5 10:16:52 hoge org.gnome.Shell.desktop[9221]: modprobe: ERROR: ../libkmod/libkmod-module.c:977 command_do() Error running install command for nvidia_modeset Sep 5 10:16:52 hoge org.gnome.Shell.desktop[9221]: modprobe: ERROR: could not insert 'nvidia_modeset': Operation not permitted Sep 5 10:16:52 hoge kernel: [ 1060.010282] gnome-shell[9221]: segfault at 14 ip 00007f08d9038817 sp 00007ffd8e2648a0 error 4 in libmutter.so.0.0.0[7f08d8fe9000+127000] Sep 5 10:16:52 hoge gnome-session[9184]: gnome-session-binary[9184]: WARNING: Application 'org.gnome.Shell.desktop' killed by signal 11 Sep 5 10:16:52 hoge gnome-session[9184]: gnome-session-binary[9184]: WARNING: App 'org.gnome.Shell.desktop' respawning too quickly Sep 5 10:16:52 hoge gnome-session[9184]: Unable to init server: Could not connect: Connection refused Sep 5 10:16:52 hoge gnome-session-f[9231]: Cannot open display: Sep 5 10:16:52 hoge gnome-session-binary[9184]: Entering running state Sep 5 10:16:53 hoge gdm3: GdmDisplay: display lasted 2.595077 seconds
どうやら modprobe nvidia_modeset の権限がなくてコケている様子.ということで,/etc/modules に nvidia-current-modeset およびついでに nvidia-current-uvm を追加して解決.
以下のように mknmz (の man) が namazu2 と namazu2-index-tools の両方に含まれていて,upgrade できない.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833335に bug report もされている.
Unpacking namazu2 (2.0.21-15) over (2.0.21-12) ... dpkg: error processing archive /var/cache/apt/archives/namazu2_2.0.21-15_amd64.deb (--unpack): trying to overwrite '/usr/share/man/man1/mknmz.1.gz', which is also in package namazu2-index-tools 2.0.21-15 Processing triggers for man-db (2.7.5-1) ... Errors were encountered while processing: /var/cache/apt/archives/namazu2_2.0.21-15_amd64.deb
たしかに apt-get source namazu2 して fakeroot -f debian/rules binary すると mknmz.1.gz が namazu2 にも namazu2-index-tools にも含まれる.詳細は見ていないが,以下で直るっぽい.
--- debian/rules 2016-08-02 16:03:17.000000000 +0900 +++ debian/rules.new 2016-08-08 10:35:16.237076456 +0900 @@ -83,7 +83,7 @@ dh_installemacsen --priority=50 override_dh_installman: - dh_installman man/mknmz.1 man/namazu.1 + dh_installman man/namazu.1 override_dh_link: -rm -rf $(CURDIR)/debian/namazu2-index-tools/usr/share/doc/namazu2-index-tools
おそらく2.0.21-18 (その前に -16, -17 もあったが)で直っている気配.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833335はそのままfixedにならないまま残っているようですが.
File server (RAID5 w/LUKS) の iowait がなんだかひどいので,MRTG で monitoringしようとして悩む.
OID (object identifier) は .1.3.6.1.4.1.2021.11 付近の以下を monitoring.
mrtg.cfg は http://net-snmp.sourceforge.net/tutorial/tutorial-5/mrtg/ にある通りに書けば良いらしい.なお,Debian GNU/Linux の場合の UCD-SNMP-MIB.txt の PATH は /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
で,これは libsnmp-base package に含まれている.ちなみに LoadMIBs に複数の MIB file を記載するには comma (,) 区切りで書く
ここで問題なのはMaxBytes
で,上記URLの例ではMaxBytes[...]: 100
のようになっているが,これだと ssCpuRawIdle がうまく測れない(もともと iowait を monitor しようという企画なのだが...).
ssCpuRawIdle の仕様をいろいろあたってみたのだが,/usr/share/snmp/mibs/UCD-SNMP-MIB.txt
によると以下のとおり.
ssCpuRawIdle OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of 'ticks' (typically 1/100s) spent
idle.
On a multi-processor system, the 'ssCpuRaw*'
counters are cumulative over all CPUs, so their
sum will typically be N*100 (for N processors)."
::= { systemStats 53 }
つまり MaxBytes
が 100 だと invalid な数値だとして .rrd file (←私の環境ではRRDを利用している)にそもそも値が保存されない様子.ということで,monitor 対象の計算機毎に個別に設定してやる必要がある.当然ここでの CPU の数は論理プロセッサの数(コア数ではなく).たぶん上記 DESCRIPTION
のとおり他の ssCpuRaw*
についても同様だが,Idle は常に最大値付近の値をとるので,この問題がより顕在化しやすい.
ふと aptitude を見てみると MediaWiki (1:1.19.20+dfsg-2.3) が Obsolete and Locally Created Packages に分類されていた.どうやら jessie から削除された模様.
調べてみるとEarly termination of MediaWiki security supportとのことで,当初からjessieから削除予定だった模様(1.19 のセキュリティサポートがjessieの次のstretchのリリースの前,というか既に終了した模様).
ということで,MediaWiki 1.27 を自前でインストールする(sid の package を持ってくることも考えたが php5 ではなく php 依存するらしく,混乱しそうなので断念).
1.19 では日本語検索のためにBruteSearchを導入していたのであるが,同ページの情報によると1.23.xで動作しないとのことで,導入を見送る.
BruteSearch のかわりにElasticsearchを導入.Install は https://www.mediawiki.org/wiki/Extension:CirrusSearch参照.設定(index生成)等はhttps://phabricator.wikimedia.org/diffusion/ECIR/browse/master/README参照.
別途 elasticsearch (java で動く deamon)を導入する必要があるが,これは Debian package でインストールする.ただし jessie で提供される 1.0.3 だと,検索してみても
An error has occurred while searching: We could not complete your search due to a temporary problem. Please try again later.
などと表示されるだけで検索できない.backports から 1.6.2+dfsg-1~bpo8+1 を install すれば (jessie でも)ちゃんと動く.
なんだかいろいろあってわけがわからない.
BUG: unable to handle kernel NULL pointer dereference at 0000000000000098 IP: [<ffffffff8127343f>] cachefiles_mark_object_inactive+0x4f/0xa0 PGD 0 Oops: 0000 [#1] SMP Modules linked in: dm_crypt dm_mod algif_skcipher af_alg rpcsec_gss_krb5 overlay squashfs ext4 crc16 jbd2 mbcache loop cpufreq_powersave cpufreq_userspace cpufreq_conservative cpufreq_ondemand cpufreq_stats binfmt_misc nfsd btrfs xor raid6_pq sg sr_mod cdrom sd_mod intel_rapl x86_pkg_temp_thermal intel_powerclamp kvm_intel kvm irqbypass crct10dif_pclmul crct10dif_common crc32_pclmul ghash_clmulni_intel sha256_ssse3 sha256_generic snd_hda_codec_hdmi drbg ansi_cprng hid_generic uas usbhid snd_hda_codec_realtek usb_storage snd_hda_codec_generic hid snd_hda_intel aesni_intel snd_hda_codec aes_x86_64 iTCO_wdt snd_hda_core ablk_helper iTCO_vendor_support snd_pcm ahci cryptd snd_timer libahci lrw nvidiafb evdev snd gf128mul libata vgastate soundcore glue_helper lpc_ich mei_me scsi_mod pcspkr acpi_cpufreq serio_raw i2c_i801 mfd_core mei shpchp tpm_tis rtc_cmos tpm button processor md_mod fbcon bitblit fbcon_rotate fbcon_ccw fbcon_ud fbcon_cw softcursor tileblit lm78 hwmon_vid f71882fg i5k_amb coretemp msr nvidia(PO) drm agpgart fuse autofs4 crc32c_intel xhci_pci ehci_pci xhci_hcd ehci_hcd usbcore usb_common CPU: 2 PID: 926 Comm: kworker/u16:4 Tainted: P O 4.6.4-myn-01+ #95 Hardware name: OEM something Workqueue: fscache_object fscache_object_work_func task: ffff88042c02f2c0 ti: ffff880425fa4000 task.ti: ffff880425fa4000 RIP: 0010:[<ffffffff8127343f>] [<ffffffff8127343f>] cachefiles_mark_object_inactive+0x4f/0xa0 RSP: 0018:ffff880425fa7d90 EFLAGS: 00010286 RAX: 0000000000000000 RBX: ffff88042ac14400 RCX: 0000000000000034 RDX: ffff88043f7ceb10 RSI: ffff8803c219f390 RDI: ffff88043f7ceb08 RBP: ffff8803c219f280 R08: 0000000000000000 R09: 00000000000000ec R10: 0000000000000000 R11: 0000000000000000 R12: ffff88042ca2f000 R13: ffff88042ac14400 R14: 00000000ffffffff R15: 00000000ffffb96f FS: 0000000000000000(0000) GS:ffff88043f480000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000098 CR3: 0000000001c06000 CR4: 00000000000406e0 Stack: ffff8803c219f280 ffff88042ac14400 ffffffff81271c75 ffff8803c219f280 ffff880418c4c140 ffff8803bf985a50 ffffffff8120a74a ffff8803c219f310 ffffffff81827580 ffff8803c219f280 000000000000006d ffffffff8120aae9 Call Trace: [<ffffffff81271c75>] ? cachefiles_drop_object+0xd5/0x180 [<ffffffff8120a74a>] ? fscache_drop_object+0xda/0x260 [<ffffffff8120aae9>] ? fscache_object_work_func+0xf9/0x460 [<ffffffff8106e925>] ? process_one_work+0x135/0x3c0 [<ffffffff8106ec0d>] ? worker_thread+0x5d/0x470 [<ffffffff8106ebb0>] ? process_one_work+0x3c0/0x3c0 [<ffffffff81073e2a>] ? kthread+0xca/0xe0 [<ffffffff81603402>] ? ret_from_fork+0x22/0x40 [<ffffffff81073d60>] ? kthread_create_on_node+0x170/0x170 Code: 11 09 00 48 8d bd 10 01 00 00 f0 80 a5 10 01 00 00 fe c6 83 20 01 00 00 00 31 f6 e8 7c b7 e1 ff 48 8b 85 f8 00 00 00 48 8b 40 30 <48> 8b 80 98 00 00 00 f0 48 01 83 30 01 00 00 b8 01 00 00 00 f0 RIP [<ffffffff8127343f>] cachefiles_mark_object_inactive+0x4f/0xa0 RSP <ffff880425fa7d90> CR2: 0000000000000098 ---[ end trace 0b204b8eafde5e55 ]---
Function cachefiles_mark_object_inactive is introduced at CacheFiles: Provide read-and-reset release counters for cachefilesd. So when I revert this commit, my linux 4.6.4 system works fine.
My system is Debian GNU/Linux stable (jessie). The version of cachefilesd is 0.10.5-1. I may need to update this to the latest one, 0.10.9, which includes Suspend/resume culling based on recently released file/block counts.
Altough it seems that this patch (4.7.2 version) might be related to this issue, I still got the following Oops.
BUG: unable to handle kernel NULL pointer dereference at 0000000000000098 IP: [<ffffffffa0bc386c>] cachefiles_mark_object_inactive+0x1c/0xa0 [cachefiles] PGD 0 Oops: 0000 [#1] SMP Modules linked in: rpcsec_gss_krb5 overlay squashfs ext4 crc16 jbd2 mbcache dm_crypt loop algif_skcipher af_alg dm_mod cpufreq_powersave cpufreq_userspace cpufreq_conservative cpufreq_ondemand cpufreq_stats binfmt_misc nfsd btrfs xor raid6_pq sg sr_mod cdrom sd_mod intel_rapl x86_pkg_temp_thermal intel_powerclamp kvm_intel kvm irqbypass crct10dif_pclmul crct10dif_common crc32_pclmul ghash_clmulni_intel drbg snd_hda_codec_hdmi ansi_cprng hid_generic usbhid uas snd_hda_codec_realtek snd_hda_codec_generic hid usb_storage snd_hda_intel aesni_intel snd_hda_codec aes_x86_64 snd_hda_core ablk_helper cryptd snd_pcm iTCO_wdt lrw ahci iTCO_vendor_support snd_timer gf128mul nvidiafb libahci evdev snd glue_helper libata vgastate soundcore pcspkr serio_raw mei_me i2c_i801 scsi_mod acpi_cpufreq lpc_ich mei shpchp mfd_core rtc_cmos tpm_tis tpm button processor cachefiles fbcon bitblit fbcon_rotate fbcon_ccw fbcon_ud fbcon_cw softcursor tileblit md_mod lm78 hwmon_vid f71882fg i5k_amb coretemp msr nvidia(PO) drm agpgart fuse autofs4 crc32c_intel xhci_pci ehci_pci xhci_hcd ehci_hcd usbcore usb_common CPU: 2 PID: 938 Comm: kworker/u16:6 Tainted: P O 4.7.2-myn-01+ #101 Hardware name: OEM something Workqueue: fscache_object fscache_object_work_func task: ffff88042c6a0f00 ti: ffff880426668000 task.ti: ffff880426668000 RIP: 0010:[<ffffffffa0bc386c>] [<ffffffffa0bc386c>] cachefiles_mark_object_inactive+0x1c/0xa0 [cachefiles] RSP: 0018:ffff88042666bd88 EFLAGS: 00010202 RAX: 0000000000000000 RBX: ffff88042a9b2200 RCX: 0000000200000000 RDX: ffff88042c6a0f00 RSI: ffff8803e8d122c0 RDI: ffff88042a9b2320 RBP: ffff8803e8d122c0 R08: 0000000000000000 R09: 00000000000000ec R10: 0000000000000000 R11: 0000000000000000 R12: ffff88042ca08f00 R13: ffff88042a9b2200 R14: 00000000ffffffff R15: 00000000ffff0e67 FS: 0000000000000000(0000) GS:ffff88043f480000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000098 CR3: 0000000001c06000 CR4: 00000000000406e0 Stack: ffff8803e8d122c0 ffff88042a9b2200 ffff88042ca08f00 ffffffffa0bc20d5 ffff8803e8d122c0 ffff88041a336780 ffff8800ae5fb230 ffffffff81213e7a ffff8803e8d12350 ffffffff8182d900 ffff8803e8d122c0 000000000000006d Call Trace: [<ffffffffa0bc20d5>] ? cachefiles_drop_object+0xd5/0x180 [cachefiles] [<ffffffff81213e7a>] ? fscache_drop_object+0xda/0x260 [<ffffffff81214219>] ? fscache_object_work_func+0xf9/0x460 [<ffffffff810738f5>] ? process_one_work+0x135/0x3c0 [<ffffffff81073bdd>] ? worker_thread+0x5d/0x470 [<ffffffff81073b80>] ? process_one_work+0x3c0/0x3c0 [<ffffffff81078dda>] ? kthread+0xca/0xe0 [<ffffffff8161063f>] ? ret_from_fork+0x1f/0x40 [<ffffffff81078d10>] ? kthread_create_on_node+0x170/0x170 Code: 8d fe ff ff 66 66 2e 0f 1f 84 00 00 00 00 00 41 54 55 48 89 f5 53 48 8b 86 f8 00 00 00 48 89 fb 48 8d bf 20 01 00 00 48 8b 40 30 <4c> 8b a0 98 00 00 00 e8 88 ca a4 e0 48 8d bd 28 01 00 00 48 8d RIP [<ffffffffa0bc386c>] cachefiles_mark_object_inactive+0x1c/0xa0 [cachefiles] RSP <ffff88042666bd88> CR2: 0000000000000098 ---[ end trace b0980ebb0851d8ca ]---
Root file system を RAID5 (software RAID w/Intel Rapid Storage Technology)にしていて,再起動時にうまく clean な状態で再起動できず verify flag が立ってしまうと,initramfs の時点で resync が開始されてしまい,いつまで経ってもまともに起動しないという話.ファイルサーバなのでさくっと起動してもらわないと困る.
なんとかする方法は以下.
grub でエントリ edit モードに入って(編集するエントリにカーソルをあわせて e),boot option に fastboot (もしくは fsck.mode=skip) と break=post-mdadm
(jessie の場合) を追加して起動(C-x)
注(2021/9/9): post-mdadm
という break point は stretch 以降は存在せず,bullseye で止められる箇所は以下のポイント.
% grep maybe_break /usr/share/initramfs-tools/init
maybe_break top
maybe_break modules
maybe_break premount
maybe_break mount
maybe_break mountroot
maybe_break bottom
maybe_break init
stretch の場合は break=mountroot
した後に以下の /sys/block/md126/md/sync_action
にアクセスできていた(他を試したかどうか失念).bullseye の場合は break=mount
の段階で /sys/block/md126/md/sync_action
にアクセスできる(fastboot
option なしでも問題なし).
initramfs の shell が起動するので,
cat /sys/block/md126/md/sync_action
が resync になっていて,HDD のアクセスランプがついている状態を確認,
echo frozen > /sys/block/md126/md/sync_action
して,HDD のアクセスランプが消えることを確認する(resync が止まる).
C-d で initramfs shell を抜ける
これでひとまずは起動するはず.起動した後は
# echo 5000 > /sys/block/md126/md/sync_speed_max
# echo idle > /sys/block/md126/md/sync_action
# ionice -c 3 -p (md126_resync's pid)
とかをしてじっくり resync する.resync の状況は /proc/mdstat で
md126 : active raid5 sda[3] sdb[2] sdc[1] sdd[0]
8351277056 blocks super external:/md127/0 level 5, 128k chunk, algorithm 0 [4/4] [UUUU]
[============>........] resync = 63.3% (1763918288/2783759232) finish=3019.9min speed=5627K/sec
の様に確認できる.以下,試行錯誤の経緯.
Root file system は RAID5 かつ btrfs なのだが,当初は fsck.btrfs の箇所でなかなか終わらない状況だった.fastboot で fsck を skip しても,起動のあらゆるステップで時間がかかってしまい
INFO: task something blocked for more than 120 seconds.
的な warning が連発する.ということで resync を止めざるを得ないということになった.幸い initrd の backup があったので,適当な directory を掘ってそこで,
zcat /somewhere/initrd.img-4.X.X-something-amd64 | cpio -i
して眺めた感じ,boot option break の存在と
[scripts/local-top/mdadm] の最後の箇所
maybe_break post-mdadm
exit 0
というように RAID の認識が終わったところで,break=post-mdadm で break point を設定できることがわかったので,それでなんとか対処することにした.
注(2021/9/9): bullseyd では scripts/local-top/mdadm
は存在しない.scripts/local-bottom/mdadm
と scripts/local-block/mdadm
は存在するが,ここに maybe_break は含まれない.
RAID の resync を中断する方法は man mdadm 等で調査.mdadm 自体 initrd に含まれているが,直接/sys/block/md126/md/sync_action
にアクセスする方が簡便.ちなみにfrozenだと中断され,idle だと中断されはするがすぐに再開される.
あとはbtrfsのfsckがskipされて気持ち悪いが,
% sudo btrfs scrub start -r -c3 /
で scrub をして,しばらくの後に
% sudo btrfs scrub status /
scrub status for XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
scrub started at XXXX and finished after 11487 seconds
total bytes scrubbed: 2.96TiB with 0 errors
のように 0 errors を確認しておく.
新たにクリーンインストールする時とかのために.
aptitude search '?and(~i !~M)'
インストールを指示したもので Upgradable なものは以下でリスト.
aptitude search '?and(~U !~M)'
Let’s Note CF-AX2を未だに使っているのであるが,付属の(専用)ACアダプタを使っているのに「指定以外のACアダプターが使用されています」というメッセージが表示され始めた.
エラー検出のお知らせ
指定以外のACアダプターが使用されています
指定のACアダプターをご使用ください。
指定以外のACアダプターを使用すると、正しく動作しない場合があります。
※指定のACアダプターを使用時にこのお知らせが表示された場合は、ACアダプターがパソコン本体に正しく奥まで挿し込まれていない可能性があります。
一度パソコン本体よりACアダプターを抜いてから奥まで挿し直してください。
まあ普通に使えていたので放置していたのであるが,ついに充電できなくなってしまったので仕方なくACアダプタを購入することとした.
調べてみると専用アダプタでなければ上手く使えないような細工がされているらしく,互換アダプタは見つけられず,仕方なく純正を購入(CF-AA62J2CJS).
というか,そもそもACアダプタ側の故障か,本体電源端子部分の故障か,問題の切り分けができていない状態でかなり不安だったが,購入したACアダプタで無事動作.
この状態で故障したと思っていたACアダプタを接続してみると同じようなメッセージが表示されはするものの充電はできた.どちらにせよ壊れているのだろうけど,本体バッテリー残量が極端に不足していると(この壊れたっぽい)ACアダプタは動作しない模様.
ちなみにテスタで測ってみたところ,新しく購入したACアダプタは15V強(定格16V)の出力があるが,この故障したらしいACアダプタはほぼ0Vで,10mVまでのところで電圧が微妙に変動している(専用のものかどうかを識別するための信号が電源側に漏れて来ている?).
IPアドレスが特定のものであれば,認証なしでコンテンツを見せて,そうでなければベーシック認証を行うという設定(BASIC認証とIPアドレス制限の併用?)について,以下のように Satisfy Any を用いる設定が各所で紹介されているが,
Satisfy Any Order Deny,Allow Deny from all Allow from XXX.XXX.XXX.XXX Allow from XXX.XXX.XXX.YYY AuthType Basic AuthName "Local Informatin for Hoge" AuthUserFile "/var/www/hoge/.htpasswd" require valid-user
これは Apache 2.2 までの書き方で,Apache 2.4 では上記とは異なる認証機構が導入されていて,古い書き方も一応動くが,新しい記述に改めたほうが良い.上記の場合は以下のようになる.
AuthType Basic AuthName "Local Informatin for Hoge" AuthUserFile "/var/www/hoge/.htpasswd" <RequireAny> Require ip XXX.XXX.XXX.XXX Require ip XXX.XXX.XXX.YYY Require valid-user </RequireAny>
詳細は
などを参照.ちなみに当方の環境(apache2 2.4.10-10+deb8u4)ではSatisfy Anyの設定で一応は動作しているものの,BASIC認証時にPOSTメソッドがタイムアウトを起こすという現象が発生していた.
ちなみに2013/06/03 13:25 / apache 2.2 → 2.4の記事にも微妙に書いてあるが,すっかり失念していた.
「BASIC認証時にPOSTメソッドがタイムアウトを起こす」はどうやら解決していなかった.具体的には Debian GNU/Linux jessie の MediaWiki なのだが,ファイルのアップロードはできるが記事の更新ができない(Show preview/changes も).
aptitude upgrade で tex-common が以下で上がってくれないというか configure されない.
% sudo /var/lib/dpkg/info/tex-common.postinst configure
Running mktexlsr. This may take some time... done.
Running updmap-sys. This may take some time... done.
Running mktexlsr /var/lib/texmf ... done.
Building format(s) --all.
This may take some time...
fmtutil failed. Output has been stored in
/tmp/fmtutil.R5YhUP3w
Please include this file if you report a bug.
[/tmp/fmtutil.R5YhUP3w]
fmtutil [INFO]: /var/lib/texmf/web2c/pdftex/latex.fmt installed.
fmtutil [ERROR]: running `pdftex -ini -jobname=mptopdf -progname=context -translate-file=cp227.tcx mptopdf.tex </dev/null' return status 1
fmtutil [ERROR]: return error due to options --strict
fmtutil [INFO]: Disabled formats: 3
fmtutil [INFO]: Successfully rebuilt formats: 18
fmtutil [INFO]: Failed to build: 1 (pdftex/mptopdf)
fmtutil [INFO]: Total formats: 22
fmtutil [INFO]: exiting with status 1
fmtutil の箇所で止まっているらしく,とりあえずの解決策は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=824889 にあるように /var/lib/dpkg/info/tex-common.postinst
で fmtutil の option から --string
を消すというもの.
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=824853 にあるように,mptopdf の箇所でコケているのはsyst-tex.mkiiがtexlive-latex-baseからcontext (ConTeXt) packageに移動した(?)のが原因で,そもそもmptopdf自体contextに移すべき,とう話ならしい.
ということで context package を install しても解決する.
texlive-latex-base (2016.20160523-1)で修正された模様で,syst-tex.mkii が texlive-latex-base に含まれるように修正された模様.
aptitude upgrade で octave が以下で上がってくれない.
/usr/lib/x86_64-linux-gnu/octave/4.0.2/exec/x86_64-pc-linux-gnu/octave-gui: error while loading shared libraries: libgl2ps.so.0: cannot open shared object file: No such file or directory
付近のバグレポートにあるとおりなぜか libgl2ps.so.0 が libgl2ps.so.1 になってしまった(libgl2ps0 1.3.8-2)のが原因.libgl2ps0 1.3.8-3 で直るらしいがまだ download できないようなので,とりあえずlibgl2ps0_1.3.8-1.3_amd64.debをdpkg -iして解決
Twenty Twelve とか Twenty Thirteen ぐらいだと,Menu を手動で作成していない状態だと,自動で Menu を生成してくれたような気がするのだが,Twenty Sixteen だと上手くいかない.結局うまく行かないという話なのだが,以下調べた内容.
Twenty Twelve だと wp_nav_menu() location が1箇所,Twenty Sixteenは2箇所.
[wp-content/themes/twentytwelve/functions.php] register_nav_menu( 'primary', __( 'Primary Menu', 'twentytwelve' ) ); [wp-content/themes/twentysixteen/functions.php] register_nav_menus( array( 'primary' => __( 'Primary Menu', 'twentysixteen' ), 'social' => __( 'Social Links Menu', 'twentysixteen' ), ) );
適当に以下をすれば(子テーマの function.php に書いておく) Twenty Sixteen の wp_nav_menu() location を1つ(primary)のみにできて,wp-admin/nav-menus.php を開いた時でメニューが存在しない場合に$one_theme_location_no_menus がアサートされて,自動でメニューのテンプレートが作成される(保存はされない).でもこれは比較的どうでもいい.
function remove_social() { unregister_nav_menu( 'social' ); } add_action( 'after_setup_theme', 'remove_social' , 20);
header.phpから呼ばれるwp_nav_menu() (nav-menu-template.php) でメニューを表示するのだが,メニューを作っていない状態だとfallback_cbのwp_page_menu() (post-template.php)が呼び出される.これがメニューを自動で作る部分で,以下のファイルを開いてみたりすると確認できる(wp_nav_menu を wp_page_menu に置き換えたりしてみる).
[test.php] <?php require_once( dirname(__FILE__) . '/wp-load.php' ); wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) );
メニューを作っていない状態だとやはり Twenty Sixteen ではメニューが表示されない.これは header.php で if ( has_nav_menu( 'primary' ) ) という条件付で wp_nav_menu() が呼び出されるから.ということで,header.php を修正して無理やり wp_nav_menu() を呼び出してみると,メニューは自動で生成されるが,手動で作成したメニューと体裁が異なる(右側に縦積みになってしまう).
手動で作ったメニュー(通常のメニュー)の場合<div class="menu-menu-1-container"> として生成されるが,wp_page_menu() が生成するのは<div class="nav-menu"> で,これで見た目が違ってくるらしい.あまりthemeをいじりたくないので,仕方なく手動でメニューを生成することにして,項目が多くなってきたらなにがしかpluginを導入するしかなさげ.
いつも Link Manager を Enable するやりかたを忘れるので備忘メモ.
WordPress (現在 Version 4.5.1) だが,以前は Link Manager なるものが存在してこれでリンク一覧を管理できたのだが,Version 3.5 以降はこの機能が Off になっている.
で,これを Enable する(だけの)Plug-in が Link Manager.中身は以下のみ.
add_filter( 'pre_option_link_manager_enabled', '__return_true' );
ちなみに link list を sort するには「評価 (rating)」を使うと比較的自由に並び替えができる(なにで sort するかは Widgets の設定の箇所で行う).ただし rating の値は 0 から 10 まで.
lftpだが,4.6.4から4.7.0でいろいろ変わったらしくmirrorに躓く.
まず以下のようにEPSVコマンド(RFC 2428)を発行してしまい,私が使っているサーバでは以下のような感じでコケる.
---> EPSV <--- 501 EPSV: Not owner ---- Switching passive mode off ---> LIST -a ---> ABOR ---- Closing aborted data socket ---- Closing control socket
ftp:prefer-epsv trueがdefaultになったらしく,EPSVではなくPASVを使うようにするには,以下の設定が必要.
set ftp:prefer-epsv false
あと,どうもmirrorコマンドを実行した際に一部ファイルでタイムスタンプが「適切に」取れない気配があって,最新版になっているのに無駄にファイルを転送してしまう.サーバとの相性もあるのかもしれないが.これはMLSDコマンドをdefaultで使うようになったかららしい.これを元の挙動,つまり4.6.4のdefaultに戻すには以下の設定をする.
set ftp:use-mlsd false
これでMLSDのかわりに,LIST -aして各ファイル/ディレクトリに対してMDTMでタイムスタンプを取得するようになる.もちろんmirror速度は落ちる.MLSDもMDTMもRFC 3659のコマンドなのだが,なにやら実装がいろいろあるらしい.
以上,該当するchangelogは以下のような感じになっている.
[/usr/share/doc/lftp/changelog.gz] Version 4.7.0 - 2016-03-28 (snip) * ftp: prefer EPSV by default. * ftp: enable MLSD by default (when supported). (snip)
Android Studioの Install メモ.基本的には android-studio-ide-141.2456560-linux.zip を拾ってきて,bin/studio.sh を起動するだけなのだが,JDKがopenjdk-8-jdkだと Oracle の JDK にした方が Performance が出る云々言われる.ということで,Oracle JDK の install からスタート.
https://wiki.debian.org/JavaPackageを参照しつつ Oracle JDK の .deb file を作成,dpkg -i する.jdk-8u77-linux-x64.tar.gz を事前にダウンロードしておいて,以下をする.
% sudo aptitude install java-package % make-jpkg jdk-8u77-linux-x64.tar.gz % sudo dpkg -i oracle-java8-jdk_8u77_amd64.deb
このままだと Android Studio が Oracle JDK を見付けてくれないので,.zshrc 等に以下を書いておく.
export JAVA_HOME=/usr/lib/jvm/oracle-java8-jdk-amd64
snmpdのupgradeで以下のように失敗する.
Setting up snmpd (5.7.3+dfsg-1.1) ... adduser: Please enter a username matching the regular expression configured via the NAME_REGEX configuration variable. Use the `--force-badname' option to relax this check or reconfigure NAME_REGEX. dpkg: error processing package snmpd (--configure): subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: snmpd E: Sub-process /usr/bin/dpkg returned an error code (1) Setting up snmpd (5.7.3+dfsg-1.1) ... adduser: Please enter a username matching the regular expression configured via the NAME_REGEX configuration variable. Use the `--force-badname' option to relax this check or reconfigure NAME_REGEX. dpkg: error processing package snmpd (--configure): subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: snmpd
sudo /var/lib/dpkg/info/snmpd.postinst configure で追ってみると,実際のadduser commandは以下のようなもので,これ自体には一見問題なさげなのだが,
adduser --quiet --system --group --home /var/lib/snmp --disabled-password --disabled-login --shell /bin/false Debian-snmp
/etc/adduser.conf にある NAME_REGEX という変数で username に対して制限をかけているらしく Default では NAME_REGEX="^[a-z][-a-z0-9_]*\$" となっている模様.ということで Debian-snmp はこれにマッチしないのでコケている様子.同様に Debian- が prefix になっている username としては,手元の計算機では既に Debian-gdm というのがあって,/var/lib/dpkg/info/gdm3.postinst ではadduserを--force-badname option 付きで呼んでいる.ということで/var/lib/dpkg/info/snmpd.postinstのadduserの箇所に--force-badname optionを追加して解決.
ちなみに,これより前のバージョンでは snmp の pseudo user は snmp.
なおこの問題は既にhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=819531のように解決されているらしく,5.7.3+dfsg-1.2 で直る見込み(使っているミラーサイトにはまだ来ていない).
写真はすべてGoogle Photosに集約しているのであるが,デジカメで撮った写真をDrag and DropでGoogle Photosに突っ込んだら,思っていた日付の箇所に写真が現れず悩む.アップロード直後その写真をAlbumに追加して,様子を見てみたら,(デジカメの)日付が1年ずれていたことが判明.ということでGoogle Photos上の該当ファイルを削除して,JPEGのExifを操作して再アップロード.
以前は知り合いからもらったPerl ScriptでExifをいじったりしていたのだが,発掘が面倒だったので jhead というコマンドを使うことにした(Debian package も存在する).
いろいろ試行錯誤をしたが,1年のずれを修正するのは至って簡単で,以下のとおり修正後の年を指定すれば良いだけ(他の情報はそのまま保持される).man によると「Date is specified as: yyyy:mm:dd, yyyy:mm, or yyyy」とのことなので,日付を修正するだけならこれが一番シンプル.
[Single file]
% jhead -ds 2016 DSC01448.JPG
[Bulk mode]
% jhead -ds 2016 DSC*.JPG
以下は -ts という Exif に保持されている『時刻』を変更するオプションを使おうとして試行錯誤した際の情報.以下のようにダンプした Exif 情報を sed で修正して -ts で突っ込む,というようなことも可能,というぐらい.
% jhead DSC01448.JPG
File name : DSC01448.JPG
File size : 3427630 bytes
File date : 2015:03:18 13:07:24
Camera make : SONY
Camera model : DSLR-A200
Date/Time : 2015:03:18 13:07:24
Resolution : 3872 x 2592
Flash used : Yes (auto)
Focal length : 18.0mm (35mm equivalent: 27mm)
Exposure time: 0.013 s (1/80)
Aperture : f/5.6
ISO equiv. : 250
Whitebalance : Auto
Metering Mode: pattern
Exposure : program (auto)
JPEG Quality : 95
% jhead DSC01448.JPG | sed '/^Date/!d;s/.*: //;s/ /-/'
2015:03:18-13:07:24
% jhead DSC01448.JPG | sed '/^Date/!d;s/.*: //;s/ /-/;s/^2015/2016/'
2016:03:18-13:07:24
% jhead -ts`jhead DSC01448.JPG | sed '/^Date/!d;s/.*: //;s/ /-/;s/^2015/2016/'` DSC01448.JPG
Modified: DSC01448.JPG
% jhead DSC01448.JPG | grep ^Date
Date/Time : 2016:03:18 13:07:24
% for i in *.JPG ; do
j=`jhead $i | sed '/^Date/!d;s/.*: //;s/ /-/;s/^2015/2016/'`
jhead -ts$j $i
done
いつも忘れるのでメモ.LDAP は動いていて,Samba の認証を LDAP で行う,というだけの話.ただし Samba は LDAP サーバとは別のホストで動かしていて,Windows 認証のための設定(smbldap-tools)は LDAP と同じホストで適切に動いているという前提.手順ザックリ以下.
smb.conf 設定 (他のページを参考に)
sudo smbpasswd -w [LDAPのAdminPW] (samba に LDAP の AdminPW を教えてあげないと,認証できない)
ldapseach -x で dn: sambaDomainName=NEWSAMBA ...
のエントリの SID を確認.大抵現状使っている sambaDomainName とは異なるエントリが作成される.この SID を 現状使っている sambaDomainName のそれに合わせる(ldapmodifyする).
samba 再起動
上手く動かない場合は smb.conf で log level = 3 とかしてログを追う.SIDが異なっていると /var/log/samba/log.smbd に
The primary group domain sid(S-1-略1)
does not match the domain sid(S-1-略2) for
myn(S-1-略2-XXXX)
とかがNT_STATUS_INVALID_SID
とともにログられる.smbclient
で接続を試すとNT_STATUS_INVALID_SID
と表示される.
いつのまにかお名前.comレンタルサーバーの共用サーバーSDでSSH接続が可能になっていた.https://www.onamae-server.com/news/150616.htmlによると2015/06/16から提供していたらしい.コントロールパネルで有効化できるのだが,公開鍵認証(authorized_keys
)が使えずちょっと辛い.気づいた点は以下のとおり.
公開鍵認証が使えない.そもそも mkdir ~/.ssh/
できない.これ深刻.
ログインに失敗すると接続元IP Addressに対して一定時間接続制限がかけられる模様(公開鍵認証が使えないため ssh-agent も使えず,かなりつらい)
ssh -x しないと接続時に以下のように timeout 待ちが発生する
/usr/openwin/bin/xauth: timeout in locking authority file /export/(snip)/.Xauthority
password を毎回打たなくて良いように,以下のように sshpass を利用すれば,かなり幸せ.Makefile や mirror 用 script に password を含めることになるが.
sshpass -pPASSWORD ssh -x YYYY@gmoserver.jp@XXXX.gmoserver.jp
ちなみに上記,XXXX.gmoserver.jp というホスト名で,YYYY@gmoserver.jp というユーザー名を想定.
phpMyAdmin 4.5.5 を頑張って ftp しか繋がらない共用サーバにインストールしたのだが,インストールした翌日に 4.5.5.1 がリリースされた.癪だったので Adminer に乗り換えることにした.
というか,実際のところは ftp しか繋がらないサーバに,大量のファイルからなる phpMyAdmin を転送するのが面倒で (lftp で mirror するので,バッチ処理ではあるが),1つのファイルだけの Adminer に惹かれて乗り換えた.
Mysql のみ対応,英語インターフェースのみ,でよければ https://www.adminer.org/latest-mysql-en.php を Download して適当な directory に index.php として配置するだけでいい(ただし念の為 Basic 認証をかけておいた).
Debian GNU/Linux sid でタイミング的には私の環境では php7.0-cli 7.0.3-3 -> 7.0.3-5 の upgrade 付近なのだが,それ以降
% php -v Cannot load Zend OPcache - it was already loaded PHP 7.0.3-9 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
みたいな感じで Cannot load Zend OPcache - it was already loaded という Warning が出るようになった.かつ cron から起動される /usr/lib/php/sessionclean でも同じ Warning を吐くので,いちいち root 宛にメールが届く.
原因は何らかの拍子に以下のように /etc/php/7.0/cli/conf.d/に 2つの opcache.ini が存在するようになってしまったため.
% ls -l /etc/php/7.0/cli/conf.d/*opcache* lrwxrwxrwx 1 root root 35 Feb 18 13:13 /etc/php/7.0/cli/conf.d/10-opcache.ini -> /etc/php/mods-available/opcache.ini lrwxrwxrwx 1 root root 35 Feb 9 10:12 /etc/php/7.0/cli/conf.d/20-opcache.ini -> /etc/php/mods-available/opcache.ini
/var/lib/dpkg/info/php7.0-cli.postinst は以下のように 20-opcache.ini を削除するように細工されているようだが,うまく削除できなかった模様.20-opcache.ini を削除すれば解決する.
[/var/lib/dpkg/info/php7.0-cli.postinst] if [ -n "$2" ] && dpkg --compare-versions "$2" lt "7.0.3-2~"; then rm -f /etc/php/7.0/cli/conf.d/20-opcache.ini; fi
もしくは以下で /etc/php/7.0/cli/conf.d/ を作りなおす.
# rm -rf /etc/php/7.0/cli/conf.d/ # mkdir /etc/php/7.0/cli/conf.d/ # /var/lib/dpkg/info/php7.0-cli.postinst configure
As follows, I've tested directory removal in overlayfs over several filesystems, such as ext4, btrfs, and xfs. It seems that it is better not to use btrfs as an upper (and work; *1) directory of overlayfs.
*1: overlayfs: workdir and upperdir must reside under the same mount
% cat <<EOF > /tmp/test.sh cd /tmp/test/ rm -rf * mkdir -p lower/dir mkdir -p upper/ mkdir -p work/ mkdir -p overlay/ touch lower/dir/a touch lower/dir/b touch lower/dir/c EOF % cat <<EOF > /tmp/test2.sh rm -f /tmp/test.img fallocate -l 100M /tmp/test.img if ! \$1 /tmp/test.img > /dev/null 2>&1 ; then echo failed exit fi mkdir -p /tmp/test sudo mount /tmp/test.img /tmp/test sudo chmod 777 /tmp/test sh /tmp/test.sh sudo mount overlayfs -t overlay -o lowerdir=/tmp/test/lower,upperdir=/tmp/test/upper,workdir=/tmp/test/work /tmp/test/overlay rm -r /tmp/test/overlay/dir ls -Rla /tmp/test/upper sudo umount /tmp/test/overlay sudo umount /tmp/test EOF % sh /tmp/test2.sh /sbin/mkfs.ext4 /tmp/test/upper: total 2 drwxr-xr-x 2 myn users 1024 Feb 20 23:25 . drwxrwxrwx 6 root root 1024 Feb 20 23:25 .. c--------- 1 myn users 0, 0 Feb 20 23:25 dir % sh /tmp/test2.sh /sbin/mkfs.xfs /tmp/test/upper: total 0 drwxr-xr-x 2 myn users 17 Feb 20 23:25 . drwxrwxrwx 6 root root 59 Feb 20 23:25 .. c--------- 1 myn users 0, 0 Feb 20 23:25 dir % sh /tmp/test2.sh /bin/mkfs.btrfs rm: cannot remove '/tmp/test/overlay/dir': Invalid argument /tmp/test/upper: total 16 drwxr-xr-x 1 myn users 6 Feb 20 23:25 . drwxrwxrwx 1 root root 42 Feb 20 23:25 .. drwxr-xr-x 1 myn users 6 Feb 20 23:25 dir /tmp/test/upper/dir: total 0 drwxr-xr-x 1 myn users 6 Feb 20 23:25 . drwxr-xr-x 1 myn users 6 Feb 20 23:25 .. c--------- 1 myn users 0, 0 Feb 20 23:25 a c--------- 1 myn users 0, 0 Feb 20 23:25 b c--------- 1 myn users 0, 0 Feb 20 23:25 c
In the cases of ext4 and xfs, the whiteout directory can be successfully generated. But btrfs fails.
I traced the overlayfs's behavior using debugfs (Documentation/dynamic-debug-howto.txt) as follows.
% sudo sh -c 'echo -n "module overlay +p" > /sys/kernel/debug/dynamic_debug/control' % sh /tmp/test2.sh /sbin/mkfs.ext4 > /dev/null % dmesg [208788.770416] mkdir(work/work, 040000) = 0 [208788.773640] mkdir(work/#ffff8800bb3c5618, 040000) = 0 [208788.773648] rename2(work/#ffff8800bb3c5618, upper/dir, 0x0) [208788.773664] whiteout(work/#ffff88007579a9d8) = 0 [208788.773666] rename2(work/#ffff88007579a9d8, dir/b, 0x0) [208788.773693] whiteout(work/#ffff8800bb3b3798) = 0 [208788.773695] rename2(work/#ffff8800bb3b3798, dir/a, 0x0) [208788.773712] whiteout(work/#ffff880094ef2cd8) = 0 [208788.773713] rename2(work/#ffff880094ef2cd8, dir/c, 0x0) [208788.773753] mkdir(work/#ffff8800bb3c5618, 040755) = 0 [208788.773765] setxattr(work/#ffff8800bb3c5618, "trusted.overlay.opaque", "y", 0x0) = 0 [208788.773770] rename2(work/#ffff8800bb3c5618, upper/dir, 0x2) [208788.773780] unlink(#ffff8800bb3c5618/b) = 0 [208788.773789] unlink(#ffff8800bb3c5618/a) = 0 [208788.773794] unlink(#ffff8800bb3c5618/c) = 0 [208788.773821] rmdir(work/#ffff8800bb3c5618) = 0 [208788.773828] whiteout(work/#ffff8800bb3c5618) = 0 [208788.773829] rename2(work/#ffff8800bb3c5618, upper/dir, 0x2) [208788.773837] rmdir(work/#ffff8800bb3c5618) = 0 % sh /tmp/test2.sh /bin/mkfs.btrfs > /dev/null 2>&1 % dmesg [208822.019517] mkdir(work/work, 040000) = 0 [208822.022430] mkdir(work/#ffff88009d74b858, 040000) = 0 [208822.022439] rename2(work/#ffff88009d74b858, upper/dir, 0x0) [208822.022520] whiteout(work/#ffff88009d68e558) = 0 [208822.022523] rename2(work/#ffff88009d68e558, dir/a, 0x0) [208822.022564] whiteout(work/#ffff8800aea6e9d8) = 0 [208822.022565] rename2(work/#ffff8800aea6e9d8, dir/b, 0x0) [208822.022592] whiteout(work/#ffff8800877e83d8) = 0 [208822.022593] rename2(work/#ffff8800877e83d8, dir/c, 0x0) [208822.022634] mkdir(work/#ffff88009d74b858, 040755) = 0 [208822.022640] setxattr(work/#ffff88009d74b858, "trusted.overlay.opaque", "y", 0x0) = 0 [208822.022643] rename2(work/#ffff88009d74b858, upper/dir, 0x2) [208822.022657] ...rename2(work/#ffff88009d74b858, upper/dir, ...) = -22 [208822.022669] rmdir(work/#ffff88009d74b858) = 0
rename2's 0x2 means RENAME_EXCHANGE (1 << 1) (see include/uapi/linux/fs.h) and its return value -22 means EINVAL (see include/uapi/asm-generic/errno-base.h). According to Documentation/filesystems/vfs.txt, it seems that btrfs does not support RENAME_EXCHANGE.
rename2: this has an additional flags argument compared to rename. If no flags are supported by the filesystem then this method need not be implemented. If some flags are supported then the filesystem must return -EINVAL for any unsupported or unknown flags. Currently the following flags are implemented: (1) RENAME_NOREPLACE: this flag indicates that if the target of the rename exists the rename should fail with -EEXIST instead of replacing the target. The VFS already checks for existence, so for local filesystems the RENAME_NOREPLACE implementation is equivalent to plain rename. (2) RENAME_EXCHANGE: exchange source and target. Both must exist; this is checked by the VFS. Unlike plain rename, source and target may be of different type.
Note that I tested the above on linux-image-4.3.0-1-amd64 4.3.5-1 Debian package and my Linux 4.4.2 build.
According to Btrfs Wiki, this issue is not claimed yet.
Implement new RENAME_* modes Not claimed — no patches yet — Not in kernel yet There are new modes of rename syscall. * RENAME_EXCHANGE * RENAME_WHITEOUT
This issue seems to be already reported to LKML and CentOS/RedHat BTS as follows.
It seems that a patch for RENAME_EXCHANGE implementation is available as follows. It might be merged into Linux 4.7 according to http://www.spinics.net/lists/linux-btrfs/msg53206.html.
Feedを受け取る側で以下のようなエラーが出てFeedできないという話(受け取る側は業者で,こちらはFeedする側).
Failed to fetch the RSS feed. Error: This XML document is invalid, likely due to invalid characters. XML error: Not well-formed (invalid token) at line 1, column 1
Feed XML は Validator をとおっていて,かつ手元の simplepie で XML をパースしてみても問題がない.
そもそも line 1, column 1 でコケているので,受け取る側の問題なのだが,対応してくれないので,こちらで対応することにした.
原因はサーバ側が deflate (gzip) されたデータを正しくハンドリングできないこと.つまり,
[S->C] GET /?feed=rss2 HTTP/1.1 Host: client.example.org User-Agent: SimplePie/1.3.1 (Feed Parser; http://simplepie.org; Allow like Gecko) Build/2015XXXXXXXXXX Accept-Encoding: x-gzip,gzip,deflate Accept: application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1 Connection: Close
のリクエストに対して
[C->S] HTTP/1.1 200 OK Date: Fri, 05 Feb 2016 XX:XX:XX GMT Server: Apache Set-Cookie: qtrans_front_language=ja; expires=Sat, 04-Feb-2017 XX:XX:XX GMT; Max-Age=31536000; path=/ Last-Modified: Mon, 01 Feb 2016 XX:XX:XX GMT ETag: (snip) Link: <http://client.example.org/?rest_route=/>; rel="https://api.w.org/" Content-Length: 8000 Connection: close Content-Type: application/rss+xml; charset=UTF-8 XMLデータ
のように Accept-Encoding: x-gzip,gzip,deflate を無視して RAW データ(といってもテキスト)を返す場合は OK だが,
[C->S] HTTP/1.1 200 OK Date: Fri, 05 Feb 2016 XX:XX:XX GMT Server: Apache Set-Cookie: qtrans_front_language=ja; expires=Sat, 04-Feb-2017 XX:XX:XX GMT; Max-Age=31536000; path=/ Last-Modified: Mon, 01 Feb 2016 XX:XX:XX GMT ETag: (snip) Link: <http://client.example.org/?rest_route=/>; rel="https://api.w.org/" Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 2000 Connection: close Content-Type: application/rss+xml; charset=UTF-8 圧縮されたXMLデータ
のように律儀に(というか apache のデフォルト) Content-Encoding: gzip で返すとコケる.クライアントというか Feed する側にて,この特定のサーバに対して,以下のように圧縮しないように設定すれば解決./?feed=rss2 が Feed URL なので,以下のように RewriteCond/RewriteRule で対処(RewriteEngine Onとかはこの上付近にあることを想定).
RewriteCond %{QUERY_STRING} feed=rss2 RewriteCond %{REMOTE_HOST} XXX.XXX.XXX.XXX RewriteRule ^ - [E=no-gzip]
先方のサーバの設定が不明だが,Google で検索してもこの問題(の上記のような解決策)は出てこないようなので,かなりのコーナーケースな模様.
WordPress の SimplePie の(サーバ側)該当箇所は wp-includes/SimplePie/File.php の以下の付近,だろうと思われる.
if (extension_loaded('zlib')) { $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n"; } // snip case 'gzip': case 'x-gzip': $decoder = new SimplePie_gzdecode($this->body); if (!$decoder->parse()) { $this->error = 'Unable to decode HTTP "gzip" stream'; $this->success = false; } else { $this->body = $decoder->data; } break; // snip
$decoder->parse()前後でコケているのだと思われるが (上流のエラーハンドリングまでは今回追わず),上のような問題が発生するような状況では if (extension_loaded('zlib')) の if 文まるごと削除してしまってもよいのかもしれない.
先日のCPU Fanが壊れた件,だましだまし使っていたが,なかなかつらいものがあるので,CPU Fanを交換した.Note PC 自体は Let’s Note CF-AX2 で,その CPU Fan は台湾AVC社のMODEL BAAA0505R5UPC01.適当に入手して交換.以下備忘.
バッテリー(取り外し可能な方)を外す.ここにSIMのスロットがある(使ってない).
PC底部のネジを外して,蓋を取る(ヒンジ近くの2箇所だけ異なるサイズのネジ).取り外したバッテリー部分にシールがあって,この時点で VOID になってしまう(分解したことの印が付く).
CPU Fan 付近.ネジは裏側からのようなので,メインボードを剥がす必要がある.メインボード左手はネジ2つ.
機内モードスイッチとバッテリーを引っ掛けるもの.取れるので注意.
下の方,バッテリーコネクタとそこそこ幅のあるリボンケーブル.
メインボード,バッテリーコネクタの部分のネジ外した.ここだけネジが長い.
その部分をよく見ると,画像ヒンジの左付近にメインボードを固定しているネジがある.ケーブルに隠れていて見えにくい.
メインボードが収まっていた部分.太いリボンケーブルの右付近に少し粘着質の部分があってメインボードをとりはずす時かなりビクビクしながら取り外す...
CPU Fan.メインボードとの接続ネジ(裏側)をとったところ.FANのうえのところにあるシールは剥がす必要がない(一度剥がしてしまった).
ひっくり返してFANをとったところ.FANは2つのネジとちょっとした突起でFAN枠に固定されている.この枠だが(とうか熱を伝える導体も...),簡単に曲げたりできるので,突起の部分は簡単に取れる.
逆の手順で新しいCPU Fanを装着して,元に戻すだけ.なお,小さめのドライバー(写真に写り込んでいるもの)と指だけで基本なんとかなった.あとエアダスターで適宜ほこりを飛ばす.
ブラウザの言語に応じてページが切り替わる(英語・日本語)場合があって,普段ブラウザを英語で使っているつもりなのだが,たとえば Google Forms 等は別の言語設定を見て言語を切り替えているらしい.
というのは,設定(Settings)→詳細設定を表示(Show advanced settings…)→言語(Languages)の箇所は英語を一番上に設定しているのだが(かつ Google のアカウントの設定も英語),なぜか日本語で表示される.表示言語が「日本語」になっているのが問題らしい.Windows の場合は同じ設定の箇所に「Google Chrome をこの言語で表示(Display Google Chrome in this language)」という設定があるのだが(https://support.google.com/chrome/answer/173424),Linux の場合は存在しない.
いろいろ調べた結果,LANG=en_US.UTF-8
もしくは LANGUAGE=en
で google-chrome を起動しないとダメならしい.
数日前にCPU Fanが異音を発していたような気がしたが,それが収まって,どうやら本格的にFanが壊れたらしい.微妙に回転はしているものの,冷却性能は殆どなさげ.ちなみに Let’s Note.
OS は Win10Pro (Win8Pro からアップグレード)なのだが,「電源オプション」で高パフォーマンス(最小のプロセッサの状態: 100%; つまり周波数を最大値で固定)にしても,頑張らせると 800MHz ぐらいまで落ちてしまい,仕事にならない(あれこれ4時間ぐらい格闘したがどうにもならないと悟った).
ということで,Core i7 の CPU が手元にある状態で,軽い作業は VMWare 上の端末+Emacs,重い作業は ssh で入った先,Chrome (←こいつが重い) は RDP で接続した先(もしくは Android 携帯)で,という謎の環境に...
なんというか,やはり持ち歩くということもあっていつかは壊れるということを想定すると,安めのものにするか(頻繁に買い換える),高いやつを選ぶ場合でもできるだけ駆動部が少ないものにしたほうが良いような気がしてきた.そもそも VMWare (Linux) 上の Emacs と LaTeX,Host (Windows) 上の MS Office と Chrome,を使うぐらいなので,8G メモリ搭載を最低条件にして安いものを選択しても良いようなきがしつつある.
Debian GNU/Linux unstable (sid) 環境では GSL が 2.1 になっており,軒並みに GSL に依存する package (inkscape や bogofilter-bdb)がこれに移行している.
がしかし,ruby-gsl が GSL 1.16 に依存したままでなかなか移行できない.かつ上流も動く気配なし.https://github.com/SciRuby/rb-gsl/issues/25.testing も GSL 2.1 に移行しているようなので,これはまずいような.
VMWare で運用している Debian/GNU Linux sid で dig が正常な応答を返さなくなった.
% dig
; <<>> DiG 9.9.5-12+b1-Debian <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: FORMERR, id: 46970
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; WARNING: EDNS query returned status FORMERR - retry with '+noedns'
;; QUESTION SECTION:
;. IN NS
;; Query time: 1 msec
;; SERVER: 192.168.40.2#53(192.168.40.2)
;; WHEN: Sat Dec 05 10:34:16 JST 2015
;; MSG SIZE rcvd: 17
どうやら dig +noedns で query しないとだめならしい.もしくは ~/.digrc
に +noedns
を書いておけば良いらしい.
EDNS RFC6891 Extension Mechanisms for DNS (EDNS(0)) なわけで,どうやら VMWare (の NAT モードのネットワーク)が独自に持っている DNS サーバ(基本的には上流に転送するのみ)は EDNS0 をサポートしていないのか?...と思ったが,上流の DNS (ホテルの DNS サーバ)に問い合わせても同じだったので,上流のブロードバンドルータかなにかがEDNS0をサポートしていないということらしい.
参考:
sid で ~/.ssh/id_dsa を用いた passphrase での login ができなくなった.ssh -v で調べてみると
debug1: Skipping ssh-dss key /home/myn/.ssh/id_dsa for not in PubkeyAcceptedKeyTypes
とのこと.とのことで,~/.ssh/config に
Host * PubkeyAcceptedKeyTypes +ssh-dss
とかを書いておけば id_dsa による共通鍵認証が利用できるようになる./usr/share/doc/openssh-client/changelog.Debian.gz によれば
openssh (1:7.1p1-1) unstable; urgency=medium * New upstream release (http://www.openssh.com/txt/release-7.0, closes: #785190): - Support for the legacy SSH version 1 protocol is disabled by default at compile time. - Support for the 1024-bit diffie-hellman-group1-sha1 key exchange is disabled by default at run-time. It may be re-enabled using the instructions at http://www.openssh.com/legacy.html - Support for ssh-dss, ssh-dss-cert-* host and user keys is disabled by default at run-time. These may be re-enabled using the instructions at http://www.openssh.com/legacy.html (snip) <pre> <p><a href="http://www.openssh.com/legacy.html">http://www.openssh.com/legacy.html</a>によると <pre> OpenSSH 7.0 and greater similarly disables the ssh-dss (DSA) public key algorithm. It too is weak and we recommend against its use. It can be re-enabled using the HostkeyAlgorithms configuration option:
とのこと.どうやら鍵ペアを作りなおす時期になったらしい.確かに10年以上同じ鍵を使っている.
MediaWiki で SVG (scalable vector graphics) を利用するには https://www.mediawiki.org/wiki/Manual:Image_administration#SVG を参照しつつ設定すれば良いわけだが,Preview 作成に ImageMagick (convert) を利用するらしくその部分で少しはまる.
具体的には inkscape が install されていると convert コマンドは svg から png の生成に inkscape を利用するのだが,svg のファイル名に !
(exclamation mark)が含まれているとうまく変換できない.strace で追った感じだと,以下のように !
を _
だと解釈して inkscape を起動するのだが,そのファイルが見つからなくてタイムアウトまで何度も inkscape を起動する.
% strace -f convert 't!s.svg' t.png
[pid 20817] execve("/bin/sh", ["sh", "-c", "\"inkscape\" \"t_s.svg\" --export-ep"...], [/* 48 vars */]) = 0
これの何が問題かというと,svg を MediaWiki に upload した後にそのファイルの差替を行うと,古いファイルが images/thumb/archive/f/fa/201512010XXXXX!hoge.svg
のようなファイル名で保存され,ファイル名に!
が含まれてしまいうまく変換できない.
解決策は$wgSVGConverterにinkscapeを直接指定してしまえば良いらしい.DefaultだとImageMagick (convert).
[/etc/mediawiki/LocalSettings.php]
$wgFileExtensions[] = 'svg';
$wgAllowTitlesInSVG = true;
$wgSVGConverter = 'inkscape';
ちなみにImageMagickをpurgeしてしまうという手もあるが,これだと日本語がうまく変換できない.なお,手元の imagemagick の version は8:6.8.9.9-5.
Debian GNU/Linux sid で最近 gitk が以下のような感じで起動してくれない.一瞬ウィンドウが表示されるが,すぐにコケる.
% gitk .
Error in startup script: bad menu entry index "ビュー編集..."
while executing
".bar.view entryconf [mca "Edit view..."] -state normal"
invoked from within
"if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} {
# create a view for the files/dirs specified on the command line
se..."
(file "/usr/bin/gitk" line 12442)
「ビュー編集」ということなので,メニューのLANG関連なような気がするのだが,詳細は追えず.ちなみに
% gitk
であれば正常に起動する(とはいえ特定のファイルに関する履歴のみ追いたい場合もある).
Workaround は
% LANG=en_US.UTF-8 gitk .
で起動するか,UTF-8 以外の文字コードを取り扱っている場合は
% LC_MESSAGES=C gitk .
でメニューの部分のLANGのみを(英語に)設定する.
FS-Cache や cachefilesd 等に関しては他のページを参照のこと.ここでは / 自体が NFS な環境でそれを有効にすることを考える.
http://askubuntu.com/questions/23767/using-the-fsc-mount-option-with-nfsroot-kernel-parameter-to-allow-fs-cache に情報があるが,これだとうまく動かない.というのは /sbin/mount.nfs
を /usr/lib/klibc/bin/
に copy するだけだと /sbin/mount.nfs
が依存するライブラリが initrd に含まれない.
私の環境(Debian GNU/Linux)では以下のようにした.
% sudo vi /usr/share/initramfs-tools/scripts/nfs
(nfs_mount_root_impl()の箇所)
- nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
+ mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}
nfsmount は klibc に含まれるものだが,これが fsc option を解釈してくれない.ということで mount.nfs を使うように書き換える.引数の順も変更になるので注意.これは askubuntu.comと同じ.
% sudo vi /usr/share/initramfs-tools/hooks/klibc
(以下をファイル末に追加)
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/mount.nfs /bin/mount.nfs
実際は /usr/share/initramfs-tools/hooks/klibc
ではなく,新しいファイルを用意したほうが良いような気もするが,面倒だったので copy_exec
で依存するライブラリも含めて initrd に含まれるようになる.
あとは,update-initramfs -u -k 3.XX.XX-2015XXXX+
で initrd 再生成,tftp に配置,pxelinux.cfg/default
等 PXE での起動 option の nfsroot=10.0.0.XX:/export/diskless,rw
みたいな箇所を nfsroot=10.0.0.XX:/export/diskless,rw,fsc
として fsc option を追加,という感じ.で,再起動.
% cat /proc/fs/nfsfs/volumes
NV SERVER PORT DEV FSID FSC
v4 0a08000a 801 0:16 0:0 yes
v4 0a08000a 801 0:48 0:0 yes
v4 0a080002 801 0:49 0:0 yes
とかで全ての NFS mount point で cache が有効になっていることが確認できる.
nfsroot なので,kernel の option に注意が必要.多分以下ぐらいが必要.
CONFIG_FSCACHE=y
CONFIG_CACHEFILES=y
CONFIG_NFS_FSCACHE=y
http://askubuntu.com/questions/23767/using-the-fsc-mount-option-with-nfsroot-kernel-parameter-to-allow-fs-cacheにcopy_exec
を利用して/sbin/mount.nfs
をinitrdに含める手法が(追加)紹介されている.
slapd が以下のように syslog になにやら大量に吐くので,対処する.http://d.hatena.ne.jp/labunix/20130421にある手法で対処.
slapd[6000]: <= bdb_equality_candidates: (cn) not indexed
slapd[6000]: <= bdb_equality_candidates: (gidNumber) not indexed
slapd[6000]: <= bdb_equality_candidates: (member) not indexed
slapd[6000]: <= bdb_equality_candidates: (memberUid) not indexed
slapd[6000]: <= bdb_equality_candidates: (ou) not indexed
slapd[6000]: <= bdb_equality_candidates: (sambaGroupType) not indexed
slapd[6000]: <= bdb_equality_candidates: (sambaSIDList) not indexed
slapd[6000]: <= bdb_equality_candidates: (sambaSID) not indexed
slapd[6000]: <= bdb_equality_candidates: (uid) not indexed
slapd[6000]: <= bdb_equality_candidates: (uidNumber) not indexed
具体的には ldapmodify で ldif を読ませる.
http://blog.remibergsma.com/2012/03/05/howto-solve-openldap-bdb_equality_candidates-errors/ にあるように /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif
を直接修正する手もあるが,Debian GNU/Linux の場合 /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif
の冒頭に以下のように書かれていて,ldapmodify を使うことになっている.
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
しばらく再起動していなかったのだが,なんだか挙動がおかしくなってきたので再起動すると,Xが起動しないという Debian GNU/Linux sid (unstable) に良くあるいつものパタン.
以下のような環境で,まず gdm3 が起動しない.
/var/log/messages
によると /usr/lib/gdm3/gdm-x-session
がこけて gnome-shell の起動に失敗している.これがひたすら繰り返されて画面とログが結構大変なことになっていた.
以下死ぬところの様子.
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-x-session[22290]: (EE) Please also check the log file at "/var/lib/gdm3/.local/share/xorg/Xorg.0.log" for additional information.
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-x-session[22290]: (EE)
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-x-session[22290]: (EE) Server terminated with error (1). Closing log file.
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-x-session[22290]: Unable to run X server
Oct 14 13:47:34 hoge gdm3: Child process -22290 was already dead.
Oct 14 13:47:34 hoge gdm3: Child process 22287 was already dead.
Oct 14 13:47:34 hoge gdm3: Unable to kill session worker process
Oct 14 13:47:34 hoge gnome-session[22300]: gnome-session[22300]: WARNING: Could not parse desktop file orca-autostart.desktop or it references a not found TryExec binary
Oct 14 13:47:34 hoge gnome-session[22300]: (gnome-shell:22306): Clutter-CRITICAL **: Unable to initialize Clutter: Unable to initialize the Clutter backend
Oct 14 13:47:34 hoge gnome-session[22300]: (gnome-shell:22306): mutter-ERROR **: Unable to initialize Clutter.
Oct 14 13:47:34 hoge kernel: [ 1110.944017] traps: gnome-shell[22306] trap int3 ip:7f8679b9388b sp:7ffec7c23a50 error:0
Oct 14 13:47:34 hoge gnome-session[22300]: gnome-session[22300]: WARNING: Application 'gnome-shell-wayland.desktop' killed by signal 5
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-wayland-session[22297]: Activating service name='ca.desrt.dconf'
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-wayland-session[22297]: Successfully activated service 'ca.desrt.dconf'
Oct 14 13:47:34 hoge gdm3: GdmDisplay: display lasted 0.105362 seconds
Oct 14 13:47:34 hoge gdm3: Child process -22297 was already dead.
Oct 14 13:47:34 hoge gdm3: Child process 22294 was already dead.
Oct 14 13:47:34 hoge gdm3: Unable to kill session worker process
最近は /var/log/Xorg.0.log
ではなく(ユーザ毎に) /var/lib/gdm3/.local/share/xorg/Xorg.0.log
にログが保存されるらしい.一般ユーザが startx したら ~/.local/share/xorg/Xorg.0.log
にログが保存される.
% startx -- -verbose n -logverbose n
(n は適当に大きめの数)
上とかで verbose にログを吐かせて調べてみると /dev/dri/card0
が開けなくて死んでいるらしい.ちなみに GPU は NVIDIA.
% ls -arlt /dev/dri/card0
crw-rw----+ 1 root video 226, 0 Oct 14 14:02 /dev/dri/card0
chmod 666
等してもなぜかうまく行かなかったので sudo vigr
で video group に Debian-gdm (gdm3を起動する pseudo user)を追加.これで gdm3 を restart したら,gdm3 が起動してくれた.
がしかし,ログインができない.ということでログインユーザも video group に追加.
あと,Windows 機上の VMWare で飼っている Debian GNU/Linux sid (unstable) は vmmouse (xserver-xorg-input-vmmouse)が動いてくれない.Xorg は起動するが,マウスが反応しない.
こちらもいろいろ試したがダメだったので,以下をして,通常の mouse driver で使うことにした.ただしこれだと Guest と Host をマウスで行ったり来たりする際に,マウスがかなりの頻度であらぬところに飛ぶ.
% sudo aptitude purge xserver-xorg-input-vmmouse
xserver-xorg-input-vmmouse の件,sudo startx だと mouse が動くので,user で起動した場合と root で起動した場合との差分をとってみた.
- xf86EnableIOPorts: failed to set IOPL for I/O (Operation not permitted)
- (EE) PreInit returned 2 for "ImPS/2 Generic Wheel Mouse"
- (II) VMWARE(0): VMMouseUnInit
- (II) UnloadModule: "vmmouse"
+ (II) VMWARE(0): vmmouse is available
+ (**) Option "Device" "/dev/input/event5"
+ (**) ImPS/2 Generic Wheel Mouse: ZAxisMapping: buttons 4 and 5
+ (**) Option "config_info" "udev:/sys/devices/platform/i8042/serio1/input/input10/event5"
+ (II) XINPUT: Adding extended input device "ImPS/2 Generic Wheel Mouse" (type: MOUSE, id 10)
+