SteamDeckで開発環境構築、ROSをインストールできた

### はじめに
ゲームのためsteamdeckを購入したが、ゲームだけするのはもったいないので
開発とゲーム両立できるの環境構築方法を探して
最終はdistroboxを利用して、steamOS　readonlyの状態でロボット開発環境を作った

例えばSteamDeckでgazebo

<iframe width="560" height="315" src="https://www.youtube.com/embed/0WwoCWkWTjU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

もしくはコントローラーとしてロボットをコントロール
<iframe width="560" height="315" src="https://www.youtube.com/embed/P8b5eKyK3n8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

### 1.事前準備
steammボタンを押して、「電源」で「デスクトップに切り替え」を選択デスクトップモデルに入れ
左下のapplicationでkonsoleを探す、これではdeckのterminal 
![Screenshot_20221230_174116.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/7df8f85d-2df8-10dd-34c0-e0c281eef7c9.png)

passwd命令で新暗号を作成
```shell-session
passwd
```


#### 1.1SSHサーバー(選択)
手元でbluetooth keyboardない人にオススメ

サーバー起動:
```shell
sudo systemctl start sshd
```
起動以降、パソコンから繋がって、commandの入力はやすくなる
パソコンでのssh client、オススメのはVS CodeとMOBAXTERM
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/169099ed-82a6-249a-7ed9-7f45e0a508ad.png)

### 2.Ubuntuコンテナを作る
直接steamOSでread onlyをoffして、ROSをインストールできた人もありますが
この操作は極めに不安定である、steamOS更新するときシステムが壊れる例もある

https://help.steampowered.com/ja/faqs/view/671A-4453-E8D2-323C

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/9b5d1388-2fd0-1214-3cfc-ae8494e0b775.png)

まだsteamOSはArch Linuxなので、無事にROSインストール成功しても、続き問題が起こる可能性がある
だからもっと簡単、安全の方法では、steamOSでUbuntuコンテナを作る、コンテナ中で開発環境を構築

![Screenshot_20221230_151925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/9f5b9612-5ed1-bb9d-d970-0596c2271ff6.png)


#### 2.1 distroboxをインストール
https://github.com/89luca89/distrobox

distroboxは簡単で任意linuxコンテナを作るのツール、windowsでのWSLみたい
これを利用してUbuntuコンテナを作る
steamdeckでインストールの手順参考は：

https://www.gamingonlinux.com/2022/09/distrobox-can-open-up-the-steam-deck-to-a-whole-new-world/

terlminal中で入力
```shell
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.local 
```
```shell
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/extras/install-podman | sh -s -- --prefix ~/.local 
```
環境変数を~/.bashrcに入れる
```
#distrobox
export PATH=$HOME/.local/bin:$PATH
export PATH=$HOME/.local/podman/bin:$PATH
xhost +si:localuser:$USER 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/1a8b9997-2789-3272-dca3-3b3ed5d3d667.png)

sourceもしくは新しいterminalを起動
```shell
source ~/.bashrc
```

#### 2.2 コンテナ作成
もうUbuntu 20.04コンテナを作ったので、こちらは18.04を作る
```
distrobox create -i ubuntu:18.04
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/b6826314-d0dc-f028-bbeb-4fc23ba98200.png)

秒でコンテナを作た

コンテナに入れる方法はterminal中で
```
distrobox enter ubuntu-18-04
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/10f11f41-03fd-e0cd-e68c-c0be81a3259f.png)

もしくはapplication中で直接開ける
![Screenshot_20221230_184706.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/6fa37c39-d35a-f7ef-956f-c077cfdb2455.png)

### 2.3注意点： 
コンテナに入れるとき複数のerror出たが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/4249e5de-0045-7fdd-3d67-73703f62640c.png)
原因はコンテナとコンテナ、コンテナとsteamOSが同じファイルシステムを共有
~/.bashrcも含めて共有したので、コンテナ0ための環境変数はコンテナ1もしくsteamOSでerrorになった
でも一応問題にはならないらしいので、無視すればよい

そしてコンテナをアンインストールしたいの場合
まずはコンテナを停止
```
distrobox stop ubuntu-18-04
```
そしてアンインストール
```
distrobox rm ubuntu-18-04
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/7222fb04-6ad5-6103-93bf-a2c4c48a80ca.png)


### 3.ROSをインストール
Ubuntuコンテナで普通のインストール手順にすればよい

http://wiki.ros.org/noetic/Installation/Ubuntu

こちらはUbuntu 20.04コンテナ、ROS noeticインストール中は何のエラーも出てない
要注意のはコンテナは軽量化のため、多くのデフォルトパッケージがインストールされていない
例え：git,pip,vim......など

インストール中でたまにパッケージがない原因で失敗、対応のパッケージをapt-getでインストールすればよい。
例えばROSインストール最初の
```shell
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
```

こちら　lsb_releaseなしで失敗したので
```
sudo apt-get install lsb-release
```
インストールしたら無事になる

ROSに関する環境変数ついては、ファイルシステムはsteamOS共有するため
同じ~/.bashrcで記入
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775186/3d38a9d0-53b2-f2f0-0766-7ccaf99f03c6.png)