Kali LinuxでのPythonバージョンアップ方法[upgrade-alternatives]

Kali Linux上のPythonのバージョン設定で手こずったのでメモ。


###背景
Virtual Box上にKali Linuxをインストールし、Kali Linux上でsqlmapというツールを利用していた。そこでKali LinuxのPythonのバージョンを変更しようと思ったところドツボにハマった。

####Pythonのバージョンアップ
Kali Linux上のPython系のツール(sqlmap)がうまく動かないため、バージョンが原因と思い、Python2系からPython3系へバージョンアップしようと思い立った。(この浅はかな考えがまずかった)


```terminal:KaliLinux
┌──(root💀kali)-[~/bin]
└─# which python 
/usr/bin/python

┌──(root💀kali)-[~/bin]
└─# which python2
/usr/bin/python2

┌──(root💀kali)-[~/bin]
└─# which python3
/usr/bin/python3    

┌──(root💀kali)-[/home/kali]
└─# python --version                        
Python 2.7.18

┌──(root💀kali)-[/home/kali]
└─# python3 -V                              
Python 3.8.6     //すでにインストール済みであった

┌──(root💀kali)-[/home/kali]
└─# python2 -V                              
Python 2.7.18
```

確認したところ、現在は```Python2.7.18```が適用されているが、```Python3.8.6```もインストール済みであった。
####/usr/bin/python配下のファイルを確認

```terminal:KaliLinux
┌──(root💀kali)-[/home/kali]
└─# ls /usr/bin/python*                                            2 ⨯
/usr/bin/python            /usr/bin/python3-config
/usr/bin/python2           /usr/bin/python3-futurize
/usr/bin/python2.7         /usr/bin/python3-pasteurize
/usr/bin/python3           /usr/bin/python3-qr
/usr/bin/python3.8         /usr/bin/python3-tor-prompt
/usr/bin/python3.8-config  /usr/bin/python3-wsdump
/usr/bin/python3.9         /usr/bin/python-faraday
```

####Pythonバージョン変更
バージョン変更方法は```update-alternatives```を利用する。```Python2.7```と```Python3.8```の優先度(Priority)を変更することでバージョンを変更する。

```terminal:KaliLinux
┌──(root💀kali)-[/home/kali]
└─# sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 2  
update-alternatives: renaming python link from /usr/bin/python3 to /usr/bin/python
//最後を2にする

┌──(root💀kali)-[/home/kali]
└─# sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
//最後を1にする

#update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.8   2         auto mode
* 1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.8   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 0
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in manual mode

```
####変更確認

```
┌──(root💀kali)-[/home/kali]
└─# python --version
Python 3.8.6
```


###ここで思わぬエラーに遭遇
バージョンアップした目的であったsqlmapを動かそうとすると以下のエラーが出て動かなくなる事態に。。。

```terminal:KaliLinux
┌──(root💀kali)-[/home/kali]
└─# sqlmap --version                        
zsh: /usr/bin/sqlmap: bad interpreter: /usr/bin/python3: no such file or directory
```

また、sqlmapはPython3系に対応していないということにここで気づく。(先にしっかり調べるべきだった)
ということで、```update-alternatives```を使ってバージョンを元に戻す。

```terminal:KaliLinux
┌──(root💀kali)-[/home/kali]
└─# sudo update-alternatives --config python                     127 ⨯
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.8   2         auto mode
  1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.8   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in manual mode
```

####バージョン確認
```terminal:KaliLinux
┌──(root💀kali)-[/home/kali]
└─# python --version                        
Python 2.7.18
```
無事に```Python2.7.18```に戻りました。しかし、、、

```terminal:KaliLinux
┌──(root💀kali)-[/home/kali]
└─# sqlmap                                  
zsh: /usr/bin/sqlmap: bad interpreter: /usr/bin/python3: no such file or directory
```

**sqlmapが動かない！！！**
```Python2.7.18```に戻したのに、```bad interpreter: /usr/bin/python3: ```と出てくるのが怪しい。。。

####バージョン確認
```
┌──(root💀kali)-[/home/kali]
└─# which python3      
python3 not found
                                                                       
┌──(root💀kali)-[/home/kali]
└─# python3 -V                                                     1 ⨯
zsh: command not found: python3
```
Python3が見つからないとなるのが原因と思われる。


###解決方法
以下のコマンドを打つことで解決。

```terminal:KaliLinux
┌──(root💀kali)-[~/bin]
└─# ln -s /usr/bin/python /usr/bin/python3                                           127 ⨯
```

####確認
もう一度Python2.7.18に戻してから、無事sqlmapが動いた。

```terminal:KaliLinux
┌──(root💀kali)-[~/bin]
└─# sqlmap                                
        ___
       __H__                                                                               
 ___ ___[.]_____ ___ ___  {1.4.11#stable}                                                  
|_ -| . [']     | .'| . |                                                                  
|___|_  ["]_|_|_|__,|  _|                                                                  
      |_|V...       |_|   http://sqlmap.org                                                

Usage: python3 sqlmap [options]

sqlmap: error: missing a mandatory option (-d, -u, -l, -m, -r, -g, -c, --list-tampers, --wizard, --update, --purge or --dependencies). Use -h for basic and -hh for advanced help
```


参考
>[UbuntuでPythonのバージョンを変更する方法](https://codechacha.com/ja/change-python-version/ )