動かざることバグの如し

近づきたいよ 君の理想に

Ubuntuのupdate-alternativesでコマンド切り替えする

環境

やりたいこと

サーバー運用していると1つのコマンドで、複数のバージョンを1つのサーバーにインストールしたくなる。

が、切り替えをエイリアスでやると管理がわからなくなって破滅に向かう。そこでUbuntu標準にあるupdate-alternativesコマンドを使ってみたのメモ

やり方

例としてPythonのバージョンが複数インストールされているとする

$ which python3.8
/usr/bin/python3.8
$ which python3.10
/usr/bin/python3.10

デフォルトだとPython3.8がインストールされているのでそっちが使われている状態 今回はPython3.10をデフォルトにするのがゴール

$ python3 -V
Python 3.8.10

update-alternativesコマンドを実行

# update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
update-alternatives: /usr/bin/python3 (python3) を提供するために自動モードで /usr/bin/python3.10 を使います

引数の意味は update-alternatives --install [作成するシンボリックのパス] [グループ名] [実体へのパス] [優先度]

これで3.10がデフォルトになる 優先度は高ければ高いほど優先される

$ python3.10 -V
Python 3.10.4

設定確認

# update-alternatives --display python3
python3 - 自動モード
最適なリンクのバージョンは '/usr/bin/python3.10' です
リンクは現在 /usr/bin/python3.10 を指しています
リンク python3 は /usr/bin/python3 です

このままだとメインのPython3.8への切り替えができなくなってしまうのでそっちも設定する

# update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2

優先度が1より高い2を指定したのでPythonは3.8が使われるようになる

$ python3 -V
Python 3.8.10

インタラクティブにコマンド切り替えする場合は --config を使う

# update-alternatives --config python3
alternative python3 (/usr/bin/python3 を提供) には 2 個の選択肢があります。

  選択肢    パス               優先度  状態
------------------------------------------------------------
* 0            /usr/bin/python3.8    2         自動モード
  1            /usr/bin/python3.10   1         手動モード
  2            /usr/bin/python3.8    2         手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 1

これで Python3.10が使えるようになる

おまけ

結局UbuntuでPython3のバージョンを書き換えるのは良くなかったっぽくて、aptコマンドが使えなくなってしまった

のでPythonコマンドにエイリアス張った

sudo update-alternatives --install /usr/bin/python my-python /usr/bin/python3.10 1

おわり

参考リンク

Ubuntuでadd-apt-repositoryを使わずにPPAを追加する方法

環境

やりたいこと

Ubuntuで公式以外のパッケージ群(PPA)を使いたい場合は add-apt-repository コマンドを使用するように公式では推奨されている。

が、add-apt-repository コマンドは標準では入っておらず、apt install software-properties-common でインストールする必要がある。

依存パッケージが多く結構厄介なので、今回はadd-apt-repositoryコマンドを使用せずにPPAを追加するメモ

やり方

例としてNginx公式のPPAである ppa:nginx/stable を例にやってみる

通常であればリンク先に書いてあるように

sudo add-apt-repository ppa:nginx/stable
sudo apt-get update

が一般的である

まずは鍵を追加する必要がある。https://launchpad.net/~nginx/+archive/ubuntu/stable より、「Adding this PPA to your system」項目の「Technical details about this PPA」をクリック

すると「Signing key」が表示されるのでそのキーのリンクをクリック

Search results for 'XXXX'と書かれたページが表示されるはずなので、keyIDを取得する。

今回だと

pub rsa1024/8b3981e7a6852f782cc4951600a6f0a3c300ee8c

と書かれてあるのでKeyIDは「8b3981e7a6852f782cc4951600a6f0a3c300ee8c」になる

そして実際にUbuntuに登録する

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv [KEYID]

今回は「apt-key adv --keyserver keyserver.ubuntu.com --recv 8b3981e7a6852f782cc4951600a6f0a3c300ee8c」になる

最後にPPAを/etc/apt/source.d/XXX.list(ファイル名は任意)に記述

# cat /etc/apt/sources.list.d/nginx.list 
deb https://ppa.launchpadcontent.net/nginx/stable/ubuntu focal main 
deb-src https://ppa.launchpadcontent.net/nginx/stable/ubuntu focal main 

必要なURLはppa:nginx/stableに記載されている

コマンド一発とはいかないので面倒ちゃ面倒だがDockerイメージ構築とか軽量目指しているならおすすめ

参考リンク

Essential Phone(PH-1)にMagiskをインストールする

Essential Phone(PH-1)にRoot環境入れたのでメモ

環境

  • Essential Phone(PH-1)
  • Magisk v24.3
  • LineageOS 18.1

大まかな流れはLineageOSの公式Wikiが一番が詳しい

wiki.lineageos.org

TWRPはインストールしないの?

LineageOSのリカバリーイメージで最低限の作業ができるので、あえて不完全(タッチが効かないなど)なTWRPをインストールする必要がない

Bootloaderのアンロック

  • https://storage.googleapis.com/essential-static/Essential-PH1-WindowsDrivers.exe をダウンロードしてPCにインストール
  • 端末の「開発オプション」を有効化。
  • 端末の「開発者オプション」内のOEMロック解除を有効化、ADBが使えるようにしておく。
  • adb reboot bootloaderブートローダー起動(または電源を落とした後に電源ボタン+ 音量マイナスボタン同時押しで起動
  • fastboot flashing unlock でBootloaderアンロック完了 この時端末のユーザーデータは初期化されるので注意

リカバリイメージのインストール

公式ROMからカスタムであるLineageOSを導入する

download.lineageos.org

ROMはzip形式だが、公式ROMからインストールはできないので、先にリカバリーイメージを焼く必要がある。

最新のリカバリーイメージをダウンロードしてきて

fastboot flash boot_a <recovery_filename>.img

LineageOSのインストール

リカバリーモードを起動して、

adb sideload <filename>.zip

Magiskのインストール

Releases · topjohnwu/Magiskから最新版のMagiskをダウンロード

再度リカバリーモードにして同様にインストール

おまけ

フォントを変更して文字を見やすくした

Roboto & M+の合成フォントMejiroをリリース。MagiskモジュールやXiaomi/OPPOテーマストアで配布中 - AndroPlus

参考リンク

Linuxでルーティングの設定が正しいか確認する方法

環境

やりたいこと

WireGuardでスタティックルーティング設定したのに全然pingが通らなくて困った

thr3a.hatenablog.com

結果から言うと受信側のルーティングの話で送信側は正しかったわけだが、それを確認するためのコマンドがあったのでメモ

$ ip route get 192.168.16.99
192.168.16.99 via 10.0.0.100 dev wg0 src 10.0.0.1 uid 0
    cache

当然認知していないルーティングの場合はデフォルトゲートウェイを通ろうとする

# ip route get 192.168.17.1
192.168.17.1 via 139.162.79.1 dev eth0 src 139.162.79.161 uid 0
    cache

参考リンク

RaspiでWireGuard VPN環境作ったのに外部から他のLANIPにアクセスできない件

状況

家の光回線が固定IPでないためポート開放して自宅サーバー、ってのができない

そこで固定IPを持つVPSサーバーを契約 WireGuardのVPNサーバーを設定

自宅にLANIPをもたせたRaspiを構築 WireGuardのクライアントインストールしてVPNの接続までは成功

だが

  • VPSサーバー → RaspiのWireGuard専用プライベートIP
  • VPSサーバー → Raspiの自宅ローカルIP

pingは通るが

  • VPSサーバー → 自宅のルーターのローカルIP(192.168.1.1とか)
  • VPSサーバー → 自宅のNASのローカルIP

pingが通らない

ローカルIPまでは到達してるが、その先の自宅ローカルネットワーク越しで通信ができない

解決策

以下のコマンドをRaspi上で実行する

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o wlan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s WireGuard専用プライベートネットワーク -o RaspiのNIC -j MASQUERADE
  • -t nat natテーブルはNetwork Address Translationの通りネットワークアドレス変換を行う。
  • -A POSTROUTING POSTROUTINGチェインに新しいルールを追加 POSTROUTINGチェインとはルーティングの後に実行される送信時に送信元アドレス/ポートを変換するチェイン
  • -s パケットの送信元
  • -o パケットを送信するインタフェース
  • -j jampの略 MASQUERADEはパケットの送信元アドレスを修正する

WireGuardの起動時に自動でコマンド実行してほしいのでRaspiの設定は以下になった

[Interface]
PrivateKey = xxx
Address = 10.0.0.100/24
PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o wlan0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o wlan0 -j MASQUERADE
DNS = 94.140.14.14
MTU = 1420

[Peer]
PublicKey = xxxx
Endpoint = xxxxxx:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25

参考リンク