# Apache guacamole 安裝 -Ubuntu 20.04 LTS
### Apache guacamole簡介
- guacamole是一個免費開源並可以透過Web瀏覽器操控遠端電腦的閘道器(gateway),它支援多種的連線,如ssh、rdp,在此說明的是本地安裝且只安裝ssh、rdp的連線方式,如想使用docker安裝可以參考官方的說明 https://guacamole.apache.org/doc/gug/guacamole-docker.html
### 安裝流程
- 更新apt
- `sudo apt update`
- 安裝必備套件
- `sudo apt install libcairo2-dev` #libguac會使用Cairo進行圖形渲染
- `sudo apt install libjpeg-turbo8-dev` #libguac會使用libjpeg-turbo支援JPEG
- `sudo apt install libpng-dev` #libpng12-dev 不適用於16.04後的版本,ibguac會使用llibpng編譯PNG
- `sudo apt install libtool-bin` #libtool用於創建Guacamole所需的編譯庫
- `sudo apt install uuid-dev`
- FFmpeg
- 如果不需要將對話紀錄轉換成影片檔的話,可不用安裝
- `sudo apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev`
- libwebp
- `sudo apt install libwebp-dev`
- 使用rdp protocol
- freerdp
- `sudo apt install freerdp2-dev`
- 使用ssh protocol
- libssh2
- `sudo apt install libssh2-1-dev`
- libssl-dev
- `sudo apt install libssl-dev`
- libpango1.0-dev
- `sudo apt install libpango1.0-dev`
- 到官網下載guacamole Server
- `wget https://apache.org/dyn/closer.lua/guacamole/1.4.0/source/guacamole-server-1.4.0.tar.gz`
- 解壓縮guacamole-server-1.4.0.tar.gz
- `tar -xzf guacamole-server-1.4.0.tar.gz`
- 建立guacamole Server
- `cd guacamole-server-1.4.0`
- `./configure --with-init-dir=/etc/init.d`
- 執行configure 會得知有哪些library 已安裝還有已確定應該建置哪些library 的列表,`--with-init-dir=/etc/init.d`準備將 guacd 的啟動shell安裝到`/etc/init.d`目錄中,稍後可以輕鬆地將 guacd 配置為在啟動時自動啟動。如果不希望guacd自動啟動可移除`--with-init-dir=`。
- 當發現有一些library未安裝(顯示為no),可將這些library安裝完成後再次執行configure 即可
- 如不想要檢查是否相依可在指令後加上 `--disable-dependency-tracking`
- `make` 開始編譯
- `sudo make install` 安裝剛剛已經建好的模組
- `sudo ldconfig` 更新已安裝的library
- 到官網下載guacamole Client
- `cd ..`
- ` wget https://apache.org/dyn/closer.lua/guacamole/1.4.0/source/guacamole-client-1.4.0.tar.gz`
- 解壓縮guacamole-client1.4.0.tar.gz
- `tar -xzf guacamole-client-1.4.0.tar.gz`
- 建立guacamole Client
- 如無Maven需先安裝 `sudo apt install maven`
- ` mvn package`
- 上方指令會使用Maven 自動建立和打包所有元件,在guacamole/target/產生一個包含整個Web的文件: .war
- <font color=red>使用Maven 需要使用java編譯器可先使用 `javac -version` 查看是否有安裝,如無安裝所需的java編譯器在此安裝的是openjdk-16-jdk-headless,請注意要看是否與目前Maven的版本有沒有衝突</font>
- 刪除java參考文件:https://www.codegrepper.com/code-examples/java/uninstall+java+17+ubuntu
- 安裝maven參考文件:https://linuxize.com/post/how-to-install-apache-maven-on-ubuntu-20-04/
- Deploy guacamole
- 將war檔複製到tomcat的目錄下(可能會因tomcat安裝方式,tomcat9名稱可能會有所不同)
- ` cp guacamole-1.4.0.war /var/lib/tomcat9/webapps/guacamole.war`
- 如需安裝tomcat `sudo apt install tomcat9`
tomcat9的9為版本如需安裝其他版本可修改成其他數字
- 重啟tomcat並啟動guacd
- `systemctl restart tomcat9`
- `/etc/init.d/guacd start`
- 建置guacamole的配置目錄
- `sudo mkdir /etc/guacamole`
- `sudo mkdir /usr/share/tomcat9/.guacamole`
- 定義Guacamole如何連接guacd,需在/etc/guacamole創建guacamole.properties
- `sudo vim /etc/guacamole/guacamole.properties`
- 讓Tomcat可以讀guacamole.properties
- ` sudo ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat9/.guacamole/`
- 建立user-mapping.xml
- `sudo nano /etc/guacamole/user-mapping.xml`
- 配置內容參考
```xml
<user-mapping>
<authorize
username="username"
password="md5password"
encoding="md5">
<connection name="Ubuntu">
<protocol>ssh</protocol>
<param name="hostname">xxx.xx.x.xx</param>
<param name="port">xx</param>
<param name="username">yourusename</param>
</connection>
</authorize>
</user-mapping>
```
- 重啟Tomcat 與guacd
- `systemctl restart tomcat9`
- `systemctl restart suacd`
### 測試連接
- 登入畫面(http://Ip:8080/guacamole)

- 登入畫面

### 參考資料
- https://guacamole.apache.org/doc/gug/installing-guacamole.html
- https://guacamole.apache.org/doc/gug/configuring-guacamole.html
- https://www.tecmint.com/guacamole-access-remote-linux-windows-machines-via-web-browser/
- https://kifarunix.com/install-apache-guacamole-on-ubuntu/
###### tags: `Apache guacamole`