QNAPで更新できないアプリの削除。

 QNAPを新しくしたら、更新もアンインストールもできないアプリが表示されてうっとうしいので削除する方法を検索しました。


古いQNAPのOSバージョンは QTS 4.3.4.2814 build 20240618 で、バージョン4.3.4です。一方新しい方は QTS 5.2.4.3079 build 20250321 で、メジャーバージョンも違っています。ここらへんが原因なのか、更新をしようとしてもエラーになってしまい、削除もできず、という状況です。

検索してみたら、フォーラムにやり方が出ていました。

まず、sshログインします。幸い sudo があるので、sudo 権限のあるユーザでログインすればOKです。

次に削除したいパッケージ情報を /etc/config/qpkg.conf から探します。less で眺めてもいいし、grep -i でキーワード検索してもいいですが、たとえば

[kats@~]$ grep -i download /etc/config/qpkg.conf
Name = DownloadStation
Display_Name = Download Station
QPKG_File = DownloadStation.qpkg
Shell = /share/CACHEDEV1_DATA/.qpkg/DownloadStation/qpkg_ds.sh
Install_Path = /share/CACHEDEV1_DATA/.qpkg/DownloadStation
WebUI = /downloadstation/
[kats@~]$ 

みたいにします。 

そうしたら、ここの Install_Path に .uninstall.sh というスクリプトがあるので、それを sudo実行してやります。

[kats@~]$ sudo /share/CACHEDEV1_DATA/.qpkg/DownloadStation/.uninstall.sh 
Remove DownloadStation
[kats@~]$

 次に qpkg.conf から該当箇所を削除します。が、それをやるコマンドがあるようです。

[kats@~]$ sudo rmcfg DownloadStation -f /etc/config/qpkg.conf
[kats@~]$ grep -i download /etc/config/qpkg.conf
[kats@~]$ 
ということで削除できました。App Centerからも消えています。よかよか。
あ、一応名前がわかっていれば、
[kats@~]$ sudo $(getcfg DownloadStation Install_Path -f /etc/config/qpkg.conf)/.uninstall.sh
などということもできるようです。

そういえばWSLカーネルの6.6はいつになったら出るのだろう。

 …と思ってぐぐってみたら、githubのほうでは linux-msft-wsl-6.6.84.1 なんてのが4月4日にリリースされていたようです。

その直前の6.6.75.3では、

  • Release rolling-lts/wsl/6.6.36.3

なんてリリースノートがあるんだけど、なんかの間違いかな。2024年7月に6.6がリリースされたときの番号が6.6.36.3だったので、コピペミス?

いずれにしても wsl --update で降りてこないので、やりたければ自分でビルドして入れ替えろってことかしら。


NASがおかしくなったので買い替えた。

 買い替えた、というか、新規に購入して中身を移し替えた話。

長年お世話になってきた TS-669L が調子悪くなっちゃって、どうにもおかしいから TS-664 に買い替えたというお話。

669Lってそもそもいつ買ったんだっけ、とメールをひっくり返してみたら、2013年6月1日にAmazonで購入してました。HDD レスで 68,845円。たしか他のが HDD レスでも10万以上してたのにこれだけ安かったんですわ。最初は 4TBx6 とかやってて、現在は 16TBx6 まで拡張してました。1台ずつ取り替えていくので、容量拡張は時間かかりましたね。ちなみに 16TB は東芝の MG08ACA16TE です。

TS-669Lの症状は、GbEの速度が300Mbps程度まで落ちてしまい、ログを見るとパケットエラーが大量に記録されていました。ケーブルとかはいじってないので、PHYが壊れた?
ともあれ、TCPだからなんとか使えてるけど実効速度が落ちて使い物にならないのと、やっぱりファイルが壊れるとやなので買い替えることにしたのです。ちなみに約13万円。

TS-669L が QTS なのに対して、TS-664 のOSはQTS/QuTS heroの2種類。QTS が ext4fs なのに対して QuTS hero は zfs と互換性がないため、万が一 QuTS hero だったらまずいので、QTS のイメージをあらかじめダウンロードして準備しておきます。

まずは起動してみようかと、KVMスイッチのHDMIとUSBを繋いで、なにもドライブを付けずに電源をいれると、「ドライブつけてちょ」(意訳)というメッセージが出ます。しかたないので以前にドライブ交換で外してあった12TBを2つばかりセットして起動すると、初期設定画面が出ました。

いちおうストレージ設定をJBODにして動作確認とかして、QTSであることが確認できたので、一旦電源を落とし、TS-669Lからドライブを抜き出して番号順に入れていきます。あとでテプラで番号貼らなきゃ。

TS-664を再起動するとしばらくカリカリやってましたが、そのうちビープ音がしてアクセスできるようになりました。

App Centerを見ると、更新が必要なアプリ(Malware RemoverとかLicense Centerとか)の更新が必要と出るんですが、更新しようとしても「デジタル署名がありません」とのエラーで更新できません。これはそのうち調べよう。

LANが 2.5GbEなので、そのうち10GハブとかPCにも10Gカードとか用意すればさらに速度が上がる予定。メインPCは Asrock Z690 Extreme WiFi 6Eなので2.5GbEポートがあるため、まずはスイッチングハブかな。

Ubuntu on WSL2を好きなディレクトリにインストールする。

 ARM の、というよりも Nordic の Bluetooth モジュール nRF52832 の開発環境を作りたくて、Segger Embedded Studioをインストールしようと思い立ちました。手元には PCA10056 nRF52840 DK がありまして、SES は登録すれば無料で使えます。PCA10056 には同じく Nordic の nRF5340 が載ってまして、こちらが J-Link デバッガ/プログラマとして動作します。nRF5340 は Cortex-M33 DualCore のかなり贅沢なチップです。中身はアプリケーション用として 128MHz M33 + 512KB RAM + 1MB Flash、ネットワーク用として 64MHz M33 + 64KB RAM + 256KB Flash。対する nRF52840 は 64MHz M4 + 256KB RAM + 1MB Flash のシングルコア。うーむ。

それはさておき、実は母艦というかメイン PC のほうが起動に2分近くかかるようになったので Windows 11をクリーンインストールしたばかりということもあり、環境を汚さずにコンテナみたいな形で実行できないかな、と考えまして。

ひとつは docker イメージを使ってやるもの、もう一つは WSL 上の Ubuntu などにインストールして WSLg でアプリを動かすもの。

dockerイメージの方は dockerhub で segger で検索するといくつか出てきますが、まずは WSL でやってみようかと。docker よくわからんし。

と枕はそのくらいにして、Ubuntuのインストールですが、Microsoft Store には Ubuntu がいくつかあります。その中で、LTS な 24.04 を使ってみることにしました。apt とかよくわからんけど。ここで素直に wsl --install Ubuntu-24.04 とかすると、*どこかのディレクトリ* に自動的にインストールしてくれます。でも、あとで消しちゃうかもしれないし、できれば自分で指定したディレクトリにインストールしたい。ということで調べながらやってみました。

まず、Manual installation steps for older versions of WSL の Step 6 - Install your Linux distribution of choice から…と思ったらそこには 24.04 はないですね。なので公式からダウンロードします。Download Ubuntu on WSL をクリックするとダウンロードが始まります。

Ubuntu2404-240425.AppxBundle というファイルがダウンロードできたら、7zipで展開します。

このなかで、*_scale_*というのはアイコンイメージが入っているので、使いたければあとで展開してショートカット用のアイコンとして使用できます。ARM64用のイメージもありますね。ここでは Ubuntu_2404.0.5.0_x64.appx というファイルをさらに 7zip で展開します。するとこんな感じになります。


この中で必要なのは下にある2つ、ubuntu2404.exe と install.tar.gz です。これを好きなディレクトリにコピーして、そこで ubuntu2404.exe を実行すると、install.tar.gz を自分で展開して ext4.vhdx を作成してインストールは完了です。新しいユーザを作成して、というメッセージが出るので、ユーザを作っておしまいです。

このあとはUSB を WSLから使えるようにして、Linux 用の Segger Embedded Studio をインストールして、ライセンス登録すればOKという流れになります。

LIXILのシャワートイレの電源ランプ。

年明け早々あれですが。

昨年末から、うちのLIXILのシャワートイレの電源ランプが、チカチカと鬱陶しい点滅を始めました。型番はDV-E116Hで2015年製。LIXILの取説では点検サービスを受けてくださいと書いてあり、この電源ランプの点滅をやめさせる方法はありません。ちなみに出張サービスと点検で約1万円。修理ならともかく、ランプチカチカを解除するために1万はないでしょうということで、ネットで調べてみるといわゆるLIXIL10年タイマーのようです。壁リモコンのシャワーとビデを同時押しで20秒とかありましたが、いずれも不発。解除できません。

ジャンパー線をカット、という情報もあったので、ものは試しと開けてみました。

両サイドのネジ穴の穴隠し(グロメットとか穴埋めキャップとか)を外し、計4か所のネジを外せばカバーが外れます。

向かって左側は脱臭装置の横。

右側はこんな感じ。


すると便座を含めた上部分がごそっと外れます。あ、作業時は電源コンセントを外すのをお忘れなく。

上部を外すと、基板やら配水チューブやらがあります。ケーブルも何本もあるので、引きちぎらぬよう。写真を撮り忘れましたが、基板を固定しているネジを取り外す必要があります。ケーブルがごちゃごちゃしているのでネジを落とさないように気をつけつつ外すとこんな感じ。

サービスマンが簡単に見つけられるように、だと思いますがニッパでカットできる抵抗ジャンパが1つだけありました。その他のものは防水のためと思いますが樹脂でしっかりカバーされており、面実装抵抗やICチップなどなど。アキシャルタイプの抵抗はこれ1つだけそびえ立っていました。ので、迷うこともなくニッパでカット。

ついでにシャワー装置周りの汚れを歯ブラシなどで落としてから組み付けて、電源ONで作業終了。電源ランプの点滅は止まりました。

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3で、ddc-tabnineが使えそうです、などと書いたのですが、早速やってみました。

まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、tabnine-nvimにあるダウンロードスクリプトを利用させてもらいます。
(あるいはこちらのdl-binaries.shを単独でダウンロードして実行しても良いかもしれません)

すると最新バージョンのtabnineがbinaries/4.194.0/x86_64-unknown-linux-musl以下に展開されます。

ddc-tabnineでもダウンロードの仕組みはあるのですが、ちゃんと動かないようです。また、あまりメンテもされていないっぽいです。が、ddcプラグイン自体は動きます。

ちなみzipファイルを展開して出てきたTabNineを実行すると、.config/TabNineというディレクトリが作成されて設定などはここに入るようです。

次にddc-tabnineをdein.vimでインストールします。

call dein#add('LumaKernel/ddc-tabnine')  

でもって、そのページにある設定もvimrcにコピーしておきます。

call ddc#custom#patch_global('sources', ['tabnine'])
call ddc#custom#patch_global('sourceOptions', {
    \ 'tabnine': {
    \   'mark': 'TN',
    \   'maxCandidates': 5,
    \   'isVolatile': v:true,
    \ }})

ここで注意。sourceOptionsのmaxCandidatesは、2022年2月22日にmaxItemsに変更されています。

2022.02.22
* Rename maxCandidates to maxItems.
* Rename ddc#map#insert_candidate() to ddc#map#insert_item().
* Deprecate gatherCandidates attribute.

ですので、そのように修正。

また、sourcesにtabnineを追加します。正直、aroundはいらないかなとも思いますが。

call ddc#custom#patch_global('sources', ['vim-lsp', 'tabnine', 'around'])

ここでVimを終了して再起動すると、TabNineが見つからないとかのエラーが出ます。なので、先程ダウンロードしたbinariesディレクトリをそのまま ~/.cache/ddc-tabnine/以下に移動します。

たぶんここまでくれば動くと思いますが、動かない場合(TabNineがまだ見つからないとか)は、

call ddc#custom#patch_global('sourceParams', {
            \ 'tabnine': {
            \   'maxNumResults': 10,
            \   'storageDir': expand('~/.cache/ddc-tabnine/binaries'),
            \ }})

が必要かもしれません。これはddc-tabnine.txtに書いてあります。

 ということでソースを編集してみると、


ちゃんとTabNineが動いているようです。右のほうに "TN" とありますし。

めでたしめでたし、なんですが、あとはRuffでのisortとか試さないと。

Vimの補完プラグインをインストール。その3

Vimの補完プラグインをインストール。その1でRuffは高速でBlackとFlake8とその他もろもろを置き換えできるという件を書きましたが、ちょっと気になったのでインストールしてみます。

Ruffの公式ブログでは、The Ruff Language Serverで、

Ruff can be used to replace Black, Flake8 (plus dozens of plugins), isort, pydocstyle, pyupgrade, and more, all while executing tens or hundreds of times faster than any individual tool.

isortやその他もろもろを置き換えて、さらに数十倍から数百倍も速い、とうたっています。 githubでは、python-lsp-ruffがありますが、0.4.5以降でRuffは "ruff server" でLSPサーバとして動作するとのことで、それなら直接vim-lspとお話できるはずです。

Ruffのドキュメントでは、もういきなりvim-lspから使用するためにvimrcに記載するコードが書かれていました。

if executable('ruff')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'ruff',
        \ 'cmd': {server_info->['ruff', 'server']},
        \ 'allowlist': ['python'],
        \ 'workspace_config': {},
        \ })
endif

さらに、他のLSP(Pyrightなど)の特定の機能を使いたいために、Ruffと組み合わせて使う場合には、

function! s:on_lsp_buffer_enabled() abort
    " add your keybindings here (see https://github.com/prabirshrestha/vim-lsp?tab=readme-ov-file#registering-servers)

    let l:capabilities = lsp#get_server_capabilities('ruff')
    if !empty(l:capabilities)
      let l:capabilities.hoverProvider = v:false
    endif
endfunction

などとするとよい、という設定も書かれています。tabnineなども使えるのかな?

余談ですが、tabnine-vimはdeprecatedになって、tabnine-nvimに開発が移っているようですが、LSPはお話しないので残念ながらNeovimのみが対象のようです。が、LSP経由ではなくてddc.vim経由なら、ddc-tabnineが使えそうです。

閑話休題。

ArchLinuxではextra/ruffパッケージが用意されているので、pacman -S ruffでインストールできます。

次にvimrcからpylspの設定をコメントアウトして、ruffの設定を加えます。

if (executable('ruff'))
    augroup RuffServer
        autocmd!
        autocmd User lsp_setup call lsp#register_server({
            \ 'name': 'ruff',
            \ 'cmd': {server_info->['ruff', 'server']},
            \ 'allowlist': ['python'],
            \ 'languageId': {server_info->'python'}
            \ })
    augroup END
endif

languageIdはあってもなくても。

これでVimを再起動してtest.pyなどと開くと、ちゃんと使えています。

あと、Vimでの折りたたみをLSPにやらせる設定も変えました。

" folding
" LSPにfoldをやらせる
augroup lsp_folding
    autocmd!
    autocmd FileType * setlocal
        \ foldmethod=expr
        \ foldexpr=lsp#ui#vim#folding#foldexpr()
        \ foldtext=lsp#ui#vim#folding#foldexpr()
    autocmd FileType vim setlocal
        \ foldmethod=syntax
        \ foldlevel=0
augroup end

vimrcを編集するときにLSPに折りたたみをやらせるとなんかウザかったので、vimだけ別扱いにしています。というか、* じゃなくてpythonにしてもよかったかも。

ddc-tabnineはまたそのうち。

SWDなら3線でいいとはいうものの。

 安価で優秀なデバッグプローブはないかしら、と探したら、 Raspberry Pi Debug Probe というのがあったんですが、これは3線がにゅるんと出てるだけです。 もちろんSWDなら3線を繋げばいいのではありますが、汎用的に考えるなら5x2のリボンケーブルコネクタが欲し...