WPP
Linux Mint 22 で RabbitVCS を使う

さて、今度のプロジェクトでは Subversion (SVN) を使うようなので GUI クライアントの RabbitVCS をインストールしてみた。本体 ? のインストールはパッケージマネージャでインストールできるがそれだけでは、Nemo で TortoiseSVN みたいなことはできない。

パッケージのインストールはこんな感じ

$ sudo apt install rabbitvcs-core

これだけだと Nemo になんの変化もない。 >> つまり使うことができない。

参考リンクの Github のページから RabbitVCS.py をダウンロードして Nemo が認識できるようにする必要がある。

説明に従い /usr/share/nemo-python/extentsions にコピーする

$ sudo cp ./RabbitVCS.py /usr/share/nemo-python/extensions

$ nemo -q
$ pgrep -f service.py | xargs kill
$ nohup nemo > /dev/null &

自分の環境では、該当するプロセスがな存在しないようで xargs kill はエラーになった。心配なら再起動なり、X から一旦ログインすれば多分大丈夫。

最後の nohup nemo … は RabbitVCS のログがコンソールに流れないようになるようだ。普通に Nemo を起動しても動作に支障はなさそう。

使ってみて思い出したが、そもそも TortoiseSVN の動きが感覚的に好きでないのと、右クリックするとップアップメニューに RabbitVCS の項目が追加されるのだが、かなりの頻度でメニューの改変がされないことがありストレスを感じた。この現象は、PCのスペック不足が原因かもしれないので問題ない人は気にしなくていい。

で結局削除して kdesvn をインストールすることにした。こっちは、SrouceTree のような感じといったらわかりやすいだろうか。

参考

[rabbitvcs/clients/nemo/README at master · rabbitvcs/rabbitvcs](https://github.com/rabbitvcs/rabbitvcs/blob/master/clients/nemo/README)

Linux Mint で btrfs にスワップファイルを作成する

Android エミュレータを起動するとメモリフルで張り付いてしまった。確認してみるとスワップファイルがなかったので再作成した話。

わかってしまえば簡単なのですが、btrfs の場合 ext4 の操作に追加して行うことがあるらしい。

この例では、/ が btrfs パーティションです。最初の 3 行を予め実行しておかないと swapon で
”swapon: swapfile2: swapon failed: Invalid argument” とエラーが出てスワップ領域が有効になりません。

# truncate -s 0 /swapfile
# chattr +C /swapfile
# btrfs property set /swapfile compression none
# fallocate -l 16G /swapfile
# chomod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile

参考

linux – Swapfile Swapon invalid argument – Unix & Linux Stack Exchange

Btrfs#スワップファイル – ArchWiki

Linux Mint 21にスワップスペースを追加する方法 >> ext4 ならこれだけでいい。

Android ワイアレスデバッグのショートカット設定

また、Android アプリの開発に戻ってきたがあまり好きになれないのは相変わらず。そんなことはさておき、wireless debug の設定画面が深すぎて面倒なのでショートカットを探した話。

しょーもない小ネタではあるのだが、自分用のメモとして残す。

開発者設定の [クイック設定開発者用タイル] で[ワイヤレスでバッグ] をオンにすると、ショートカットが設定できる。端末のメーカーによってはこの設定項目がないらしい。

設定をオンにするとどの画面でも上からスワイプで出てくる画面(これをクイックタイルと呼ぶ?)で切り替えられるようになる。

Synology NAS で Forgejo をちょっと試してみる

自宅 NAS では Gitlab を動かしています。これは機能しているのでいいといえばいいのですが、遅いです。それほど強力でない NAS 上の docker とはいえ起動して使い始めるまで大体 5 分位かかります。

それから、Gitlab のアップデートは異常に早いです。大抵 2、3 週間放置しているとアップデートされ、critical update も非常に頻繁です。そのたびにアップデートするのですが正直面倒なのと失敗するかもしれないというドキドキはあまり嬉しいものではありません。

なのでちょっと違うものを試してみることにしました。Gitea が良さそうと思いましたが、更に Forgejo が fork されているようです。なので Forgejo を動かしてみることにします。

Forgejo は dockerhub でホストされていないようなので、Project を作成します。

Create Project ダイアログは以下のように指定します。

Project name: 適当な名前
Path: NAS 上の composer.yaml を置く場所
Source: docker-compose.yaml の作成を選択する
テキストボックスに docker-compose.yaml の内容を指定して [Next] へ進む
Web ポータルの設定はせずに先に進む。

version: '3'

networks:
  forgejo:
    external: false

services:
  server:
    image: codeberg.org/forgejo/forgejo:7
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    networks:
      - forgejo
    volumes:
      - /volume1/docker/forgejo:/data
      #- /etc/timezone:/etc/timezone:ro
      #- /etc/localtime:/etc/localtime:ro
    ports:
      - '8002:3000'
      - '8003:22'

ポート番号は適当に変えています。適宜、状況に合わせて調整してください。

リバースプロキシ設定で https://forgejo.xxx.myds.me を 8002 に流して https の設定は終わり。

ssh 接続は確認していないので後ほど追記することになると思う。

参考

Installation with Docker | Forgejo – Beyond coding. We forge.

synology の Docker で code-server を動かす

タブレットをせっかく買ったので個人開発をタブレットでもできるようにということでいろいろと調べてみる。

coder っていう Web IDE が見つかり、それはどうやら VS Code を動かしているものっぽい。その coder が出している code-server ってので Docker で動くらしいのでやってみた。

自分の環境では、Docker と Synology NAS のリバースプロキシを使っているが Docker だけの場合は R.P. 部分は読み飛ばせばいい。リバースプロキシで SSL しているので Docker 側では何もしていない。

Docker 設定

Docker の設定は、 Synology NAS にならう感じで書いてくので、いい感じで読み替えて Dockerfile なりを書いてほしい。

イメージ

codercom/code-server を duckerhub からダウンロードする

ポート

ここでは、ホスト側 9001 をコンテナ側 8080 になるように expose した。

ボリューム

ここは、dockerhub の説明とは少し変えた。というのもボリュームリンクなしで起動してみると /home/config の中には、.config や、 .local の他にもいろいろ保存されそうなだったのでざっくりと指定した。まとめると

ホスト側はあくまで自分の環境でのことなので、好きな場所に変えてください。

ホスト側コンテナ側
/volume1/docker/code-server/config/home/coder
/volume1/docker/code-server/project/home/project

ここまでで、 9001 ポートに http アクセスすれば使えるようになっている。

ログインパスワード

コンテナははじめからパスワード認証が有効になっている。そのパスワードは初期値が config.yaml に生成されるようだ。

場所は上の例で行くと、/volume1/docker/code-server/config/.config/code-server/config.yaml です。

リバースプロキシ設定

ここも、synology NAS のでやる場合の内容です。

外側 443ポートに対しネームベースで振り分けるように設定します。また、code-server は WebSocket を使っているらしいので ws が通るように設定します。

xxx.myds.me は、NAS に付属の DDNS ホスト名です。そのサブドメインを作成し、コンテナに流す設定をします。

コンテナは、先程 9001 を開けたので 9001 に流します。

[ソース側]

Protocol: HTTPS
Hostname: code.xxx.myds.me
Port: 443

[転送先 (destination) ]

Protocol: HTTP
Hostname: localhost
Port: 9001

[カスタムヘッダー]

WebSocket を通すためにカスタムヘッダーを設定します。 Synology のリバースプロキシの実態は nginx なのでその設定と言ったらわかりやすいでしょうか?

Custom Header タブに行き Create > Websocket を選択すうと結果こうなります

Upgrade => $http_upgrade
Connection => $connection_upgrade

ここまで終えると、

https:/code.xxx.myds.me/ でアクセルすると、VS-Code っぽい画面がでてきます。初回はパスワード認証で先程のパスワードを入力すると認証をパスします。

エディタで開くフォルダは、 ?folder=/home/project とかすればいいようです。場所によってかけなかったり、コンテナ停止で消えたりするので注意が必要ですね。

code-server のコンテナには python とか入っていないので、ちゃんとやりたければ別のコンテナかサーバーに ssh したほうがよさそう。直接コンテナにインスールしても消えてしまう。(コンテナの / をどっかにマウントするのもちょっとなんだし)

参考

codercom/code-server – Docker Image | Docker Hub

Install – code-server Docs

Websoc kets for Synology DSM – Matthias Lohr – Synology のリバースプロキシで websocket を通す方法

ssh ログイン時に “no matching host key type found. Their offer: ssh-rsa” エラー

自宅 PC を Linux にスイッチして2ヶ月位が経ちました。この間小さなハマりは、たくさんありましたがこの話もその 1 つです。

今朝、NEC の ix ルーターに久しぶりにログインしようとするとログインできません。職場から支給されている Windows では問題なくできています。

実際にはこんな感じです。

$ ssh KANRISYA@192.168.1.222
Unable to negotiate with 192.168.1.222 port 22: no matching host key type found. Their offer: ssh-rsa

Qiita によると、ssh のいつかのバージョンから古い鍵タイプはデフォルトでオフされているようです。

解決するには、参考ページのように ~/.ssh/config に追記してやります。コマンドラインのオプションを追加してもいいのですが、ちょっと長いのでつらいです。

  Host ix
       Hostname 192.168.1.222
       HostKeyAlgorithms ssh-rsa

これで無事にアクセスできるようになりました。

参考

ssh 接続で no matching host key type found エラー #SSH – Qiita

Linux Mint に azure-cli をインストールする

例によって新しい仕事に関連して azure-cli をインスールする必要があったのでそのメモ。

Linux Mint の場合 lsb_release コマンドでは Ubuntu コードネームを返さないといいつものトラップがあるのでそれを回避す必要があるよという話。

手順

基本、Microsoft の公式の案内通りですが、Ubuntu のコードネームを手動で設定してやる必要があります。

Linux Mint 21.3 の場合は、 jammy にする必要があります。 このコードネームは /etc/os-release 見るのが一番手っ取り早いと思う。

$ cat  /etc/os-release 
NAME="Linux Mint"
VERSION="21.3 (Virginia)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 21.3"
VERSION_ID="21.3"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=virginia
UBUNTU_CODENAME=jammy

こんな感じで jammy とわかる

$ sudo apt update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
// 上の行はたいてい入っているはずだからいらない

// 鍵をダウンロードする
$ sudo mkdir -p /etc/apt/keyrings
$ curl -sLS https://packages.microsoft.com/keys/microsoft.asc |
  gpg --dearmor | sudo tee /etc/apt/keyrings/microsoft.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/microsoft.gpg

//$ AZ_DIST=$(lsb_release -cs) の代わりに直接指定する
$  AZ_DIST=jammy
echo "Types: deb
URIs: https://packages.microsoft.com/repos/azure-cli/
Suites: ${AZ_DIST}
Components: main
Architectures: $(dpkg --print-architecture)
Signed-by: /etc/apt/keyrings/microsoft.gpg" | sudo tee /etc/apt/sources.list.d/azure-cli.sources

$ sudo apt update
$ sudo apt install azure-cli

$ az -v
azure-cli                         2.61.0

core                              2.61.0
telemetry                          1.1.0

Dependencies:
msal                              1.28.0
azure-mgmt-resource               23.1.1

Python location '/opt/az/bin/python3'
Extensions directory '/home/mnishi/.azure/cliextensions'

Python (Linux) 3.11.8 (main, May 16 2024, 03:47:28) [GCC 11.4.0]

Legal docs and information: aka.ms/AzureCliLegal


Your CLI is up-to-date.

こんな感じで実行できる。

こういうケースでアップストリームのコードネームを取れるコマンドってきっとありそうだが、知らないので少し気にして調べてみよう。

今度のプロジェクトでは C#が必要らしいが、Linux の Mono でいいんか?んー、よくわかりません。

参考

Azure CLI を Linux にインストールする | Microsoft Learn

Windows updateが 0x80240438 で失敗する場合

数週間前から Windows update が失敗する現象が発生していて少し気になっていたが解決したので記録に残す。

現象の発生状況

問題の PC は、普段は Windows ドメイン (アクティブ ディレクトリ)に参加していて色々な設定がよしなにされている(有無を言わせず強制されている)。インターネットには正常に接続できている。

Windows Update を実行すると「更新サービスに接続できませんでした。。。。」というメッセージが表示され、

イベントビューアでは WindowsUpdateClient がエラー 0x80240438 で失敗している。

解決方法

はじめ、不用意にサービスを停止してしまって Windows update が失敗するのだと思い試行錯誤したが原因は他にあった。

Windows update の参照先が WSUS (Windows Server Update Services) に向いていてそこにアクセスできなくなっていることが問題だったようだ。WSUS はざっくりいうと Windows update のダウンロード元を社内サーバーなどに置くことができるソフト。利用すると会社の PC が一斉にアップデートを実施してインターネットのダウンロード帯域を食いつぶすことを防ぐことができる。

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate キー

デフォルト変更値
DoNotConnectToWindowsUpdateInternetLocations10
WUServer
WUStatusServer

グループポリシーかログイン時のスクリプトで上記レジストリが設定されているっぽいが、それを変更できちゃうのはちょっと解せない。がアップデートできたので OK。

まとめると、何らかの方法で WSUS を使う設定がされており、かつ WSUS にアクセスできない状況で今回のエラーが発生していた模様。エラーコード自身は他の原因とも共有されているらしいので WSUS 関連とは限らないっぽい。

大体、このケースにぶち当たる人は個人ユースでは皆無と思われる。なので検索で見つからないのも無理はない、参照ページがなかったらサービス周りを疑い続けたと思うのでとても助かった。

ついでに依存サービス

Windows update はいくつかのサービスに依存しているようで、サービス表示名のサービス名対応は以下のようになる。sc コマンドで BITS などのサービス名の方を使う。

  • Background Intelligent Transfer service – BITS
  • Windows Update – wuauserv
  • Windows Modules Installer – TrustedInstaller

参照

Windows Update 「更新サービスに接続できませんでした」エラーの解消 – A Memorandum

apt で “N: There are 2 additional versions. ….” が表示されて apt upgrade できないとき

今日 apt list –upgradable すると “N: There are 2 additional versions. …” とメッセージが表示され、upgrade できない現象に出会いました。

ネットを検索すると There are 2 の部分が 1 とか 3 とかで見つかったので一定数、同じ問題で困った人がいるようです。

今回 upgrade できなかったのは、snapd/jammy-updates ですが、その適宜メッセージでレポートされたパッケージにしてください。

$ sudo apt --only-upgrade install snapd/jammy-updates

参照

List Upgradable Packages With apt Command in Ubuntu

Firefox でページ上の QR をスキャンするアドオン “QR Lite”

最近は QR コードが URL の変わりに使われることが多くなりました。カメラ経由でスキャンするケースでは、スマホも PC も大して変わりません、楽ですよね。

今日はスライド共有サイトを見ていて表示された QR コードをなんとかしたいので QR Lite というアドオンを見つけたという話です。

QR Lite – Get this Extension for 🦊 Firefox (en-US)

機能

  • QR コードの生成
  • カメラから QR 読み込み
  • ブラウザ表示中の QR をスキャン

使い方は簡単なので、特に説明しません。

QR を生成するアドオンは無数にあり、多くが画像ファイルのスキャンができるようで。しかし、画面上のQR をスキャンできるものは少ないです。