Kali Linux 2024.4 Release (Python 3.12, Goodbye i386, Raspberry Pi Imager & Kali NetHunter)

# はじめに
2024年12月16日、[Kali Linux 2024.4 Release (Python 3.12, Goodbye i386, Raspberry Pi Imager & Kali NetHunter)](https://www.kali.org/blog/kali-linux-2024-4-release/)の通りにKaliの新しいリリースが公開されています。

今回のリリースでは、デフォルトのPythonインタープリタとして、Python3.12が採用されています。詳細については、上記公式のブログ記事をご参照ください。

本記事では、今回のアップデート内容の一部について記載しています。

## アップデート方法
公式ドキュメントの[Updating Kali](https://www.kali.org/docs/general-use/updating-kali/)を踏まえて、Kaliのアップデート方法を以下に記載します。

前提として、`/etc/apt/sources.list`が適切に設定されていることを確認した上で以下のコマンドを実行します。

`$ sudo apt update`
`$ sudo apt full-upgrade -y`

上記コマンド実行後、OS再起動を行います。
OS再起動後、`/etc/os-release`ファイルを参照してディストリビューションのバージョンが更新されたことを確認します。

`$ grep VERSION /etc/os-release`

```console
VERSION_ID="2024.4"
VERSION="2024.4"
VERSION_CODENAME=kali-rolling
```
## Python3.12
Kaliのアップデート後、pythonを起動すると、Python3.12に更新されていることが確認できます。

```
Python 3.12.8 (main, Dec 13 2024, 13:19:48) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
```

Python3.12で追加された機能については、以下Pythonの公式ドキュメントをご参照ください。

https://docs.python.org/3/whatsnew/3.12.html

今回のリリースで注目すべき変更点は、サードパーティのPythonパッケージのインストールについて、pipの使用が制限されることです。背景については、過去のブログ記事より確認できます。

https://www.kali.org/blog/python-externally-managed/

## Raspberry Pi Imager
Raspberry PiでKaliを利用するユーザーの場合、良いニュースです。

KaliのRaspberry Piイメージが、Raspberry Pi Imagerから直接カスタマイズを適用できるようになりました。

Raspberry Pi Imagerについては、以前書いた以下の記事をご参照ください。

- [Raspberry Pi ImagerでRaspberry Piをセットアップする](https://qiita.com/Brutus/items/94aea19c7add688fece9)

## Kaliフォーラムの更新
Kaliフォーラムが新しくなりました。

https://forums.kali.org/

コミュニティ運営について色々検討及び改善に取り組んでいることが分かります。

## New Tools
今回も色々なツールが追加されましたが、本記事ではpipの振替pipxについて紹介します。

pipxは、Pythonで書かれたエンドユーザーアプリケーションのインストールと実行を支援するツールです。macOS のbrew、JavaScriptのnpx、Linuxのaptに相当します。

特徴として、仮想環境を自動的に作成した上でパッケージをインストールします。また、インストールは通常のユーザー権限で実行されることです。従って`sudo pip install`などによる危険を回避することができます。

::: note
pipxは、[pipx](https://pipx.pypa.io/stable/)で学ぶことができます。
:::

### pipx
Python 3.12以降、pipを使用してシステム全体のインストール (`sudo pip install`) またはユーザーのホームディレクトリのインストール (`pip install --user`) を実行すると、次のメッセージが表示されます。

`$ sudo pip install xyz`

```
error: externally-managed-environment

× This environment is externally managed
└──> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Kali-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have pypy3-venv installed.
    
    If you wish to install a non-Kali-packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.
    
    For more information, refer to the following:
    * https://www.kali.org/docs/general-use/python3-external-packages/
    * /usr/share/doc/python3.12/README.venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
```

上記を踏まえて、パッケージ化されている場合は、APTを使用してインストールします。パッケージ化さてない場合は、pipxを使用します。

以下はXSStrikeをインストールする例です。

`$ pipx install xsstrike`

```
installed package xsstrike 3.2.2, installed using Python 3.12.8
These apps are now globally available
  - xsstrike
done! ✨ 🌟 ✨
```

pipxでインストールされたパッケージのリストを確認したい場合は、`pipx list`を実行します。


`$ pipx list`

```
venvs are in /home/kali/.local/share/pipx/venvs
apps are exposed on your $PATH at /home/kali/.local/bin
manual pages are exposed at /home/kali/.local/share/man
   package xsstrike 3.2.2, installed using Python 3.12.8
    - xsstrike
```

# おわりに
2024年の最後に大きなリリースがありましたが、2025年も楽しみです。

## 参考
- [Installing Python Applications via pipx](https://www.kali.org/docs/general-use/python3-external-packages/)
- [PEP 668 – Marking Python base environments as “externally managed”](https://peps.python.org/pep-0668/)