xrdp でRDP Proxy ゲートウェイ を作る話(3)　〜debian用dpkg作成編〜

# xrdp でRDP Proxy ゲートウェイ を作る話(3)　〜debian用dpkg作成編〜

## [前回](https://qiita.com/JUNKER_TOMATO/items/b566fdf092efb9f1c0e3)まで
RockyLinux 上で rpmbuildでRPMパッケージを作成する方法を書きました。<br>

今回はdebian系ディストリビューション用のdpkg形式パッケージを作成する方法をご紹介します。
## 対象ディストリビューション
ここでは debian GNU/Linux 11.5 を対象とします。
(docker hubにある debian:stable-20221205コンテナを利用して記事を書きました)

## 対象バージョン
記事執筆時点(2022/12/8)で、以下バージョンを対象とします。
* xrdp v0.9.20 
* NeutrinoRDP git hash #836b738

## build　環境の準備
build 環境をインストールします。
インストール直後の状態を想定しています。
rootユーザーにて実行してください。

### 最低限必要なdpkgを追加
リポジトリをupdateして基本的に必要なコマンドをインストールします。
```bash
apt update
apt install sudo wget curl vim git
```

#### build用ユーザ追加
build用ユーザ`builduser`を作成し、パスワード不要で`sudo` できるようにしておきます。

```bash
useradd -m -s /bin/bash builduser 
usermod -aG sudo builduser
echo "builduser:<任意のパスワード>" | chpasswd
echo "ALL ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/builduser

su - builduser
```
以降は `builduser` で作業します。

### dpkg-devのインストールと初期設定

deb パッケージを作成するための`dpkg-dev`をインストールし、初期設定として環境変数にメールアドレスと名前をセットします。これはパッケージ作成の際に使われます。

```bash
sudo apt install dpkg-dev

export DEBEMAIL="hoge@example.com"
export DEBFULLNAME="Hoge Hoge"

```

### quilt コマンドの準備とalias設定
deb pkg のパッチ管理コマンドのquilt をインストールしaliasを作ります。
```bash
sudo apt install quilt 

alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
. /usr/share/bash-completion/completions/quilt
complete -F _quilt_completion -o filenames dquilt
```
### quiltコマンドの初期設定ファイルを作成します。
以下内容で `${HOME}/.quiltrc-dpkg` を作成します。
```bash
d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done
if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then
    QUILT_PATCHES="debian/patches"
    QUILT_PATCH_OPTS="--reject-format=unified"
    QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
    QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
    QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
    if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
fi
```
これで準備は整いました。

---
## NeutrinoRDP　のbuild
xrdpのbuildに先立ち、RDP Proxy機能の依存ライブラリである NeutrinoRDPをbuildします。

### buildに必要なpkgを追加
NeutrinoRDPをbuildするために必要なpkgを追加インストールします。
```bash
sudo apt-get install build-essential git-core cmake libssl-dev libx11-dev libxext-dev libxinerama-dev \
libxcursor-dev libxdamage-dev libxv-dev libxkbfile-dev libasound2-dev libcups2-dev libxml2 libxml2-dev \
libxrandr-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libavutil-dev  libavcodec-dev dh-make devscripts lintian git-buildpackage quilt pbuilder \
dput debhelper debmake fakeroot equivs cdbs  libpcsclite-dev libpulse-dev xmlto
```
### srcpkg を取得
私のgithubのリポジトリから必要なファイルをダウンロードしてください。
```bash
wget https://github.com/TOMATO-ONE/xrdp-proxy/raw/devel/debian/sources/neutrinordp-836b738.tar.gz
wget https://github.com/TOMATO-ONE/xrdp-proxy/raw/devel/debian/debian11/srcpkg/neutrinordp_1.0.1%2B836b738-1.debian.tar.xz
wget https://github.com/TOMATO-ONE/xrdp-proxy/raw/devel/debian/debian11/srcpkg/neutrinordp_1.0.1%2B836b738-1.dsc
ln -s ./neutrinordp-836b738.tar.gz neutrinordp_1.0.1+836b738.orig.tar.gz
```

### Source 展開
dpkg-source コマンドを使ってソースコードを展開してください。

```bash
dpkg-source -x neutrinordp_1.0.1+836b738-1.dsc
cd neutrinordp-1.0.1+836b738/
```
### patch 適用
追加でpatchを適用する場合は以下を実行してください。
(既に生成済みのdebian source packageをそのままbuildする場合は不要です)
```bash
while dquilt push; do dquilt refresh; done
```
### build
`dokg-buildpackage`コマンドでdeb pkgをbuildします。
```bash
dpkg-buildpackage -us -uc
```
作業ディレクトリの親ディレクトリに、debファイルとソースpkgが生成されます。

以下のようなファイルが生成されているはずです。
```bash
cd ..
ls .
libneutrinordp-dbgsym_1.0.1+836b738-1_amd64.deb
libneutrinordp-dev_1.0.1+836b738-1_amd64.deb
libneutrinordp-plugins-dbgsym_1.0.1+836b738-1_amd64.deb
libneutrinordp-plugins_1.0.1+836b738-1_amd64.deb
libneutrinordp_1.0.1+836b738-1_amd64.deb
neutrinordp-1.0.1+836b738
neutrinordp-836b738.tar.gz
neutrinordp-dbgsym_1.0.1+836b738-1_amd64.deb
neutrinordp_1.0.1+836b738-1.debian.tar.xz
neutrinordp_1.0.1+836b738-1.dsc
neutrinordp_1.0.1+836b738-1_amd64.buildinfo
neutrinordp_1.0.1+836b738-1_amd64.changes
neutrinordp_1.0.1+836b738-1_amd64.deb
neutrinordp_1.0.1+836b738.orig.tar.gz

```
RDP Proxy 可能な xrdpをbuildするためには `libneutrinordp-dev` と `libneutrinordp` が必要になります。

---
## xrdpのbuild

続いてxrdpのbuildを行います。

### 前段で作成したNutrinoRDPをインストールする
RDP Proxy機能のために必要な NeutrinoRDPのライブラリをインストールします。
```bash
sudo apt install \
./libneutrinordp_1.0.1+836b738-1_amd64.deb \
./libneutrinordp-dev_1.0.1+836b738-1_amd64.deb
```
### buildに必要なpkgを追加
xrdpのbuildに必要なpkgをインストールします。
```bash
sudo apt install \
dh-make devscripts lintian git-buildpackage quilt pbuilder \
dput debhelper debmake fakeroot equivs cdbs check libfuse-dev libopus-dev \
libpam0g-dev libssl-dev nasm systemd libfuse2 libsubunit-dev libsubunit0
```

### srcpkg を取得
私のgithub のリポジトリから以下ファイルを取得してください。<br>
標準のdebian source pkgとの主な差分は xrdpのバージョンを引き上げていることと、`--enable-neutrinordp` オプションを加えていることです。
```bash
wget https://github.com/TOMATO-ONE/xrdp-proxy/raw/devel/debian/sources/xrdp-0.9.20.tar.gz
wget https://github.com/TOMATO-ONE/xrdp-proxy/raw/devel/debian/debian11/srcpkg/xrdp_0.9.20-1.debian.tar.xz
wget https://github.com/TOMATO-ONE/xrdp-proxy/raw/devel/debian/debian11/srcpkg/xrdp_0.9.20-1.dsc
ln -s ./xrdp-0.9.20.tar.gz xrdp_0.9.20.orig.tar.gz
```
### xrdpのSource 展開
dpkg-source コマンドでソースファイルを展開します。
```bash
dpkg-source -x xrdp_0.9.20-1.dsc
cd xrdp-0.9.20
```
### patch 適用
追加でpatchを適用する場合は以下を実行してください。
(既に生成済みのdebian source packageをそのままbuildする場合は不要です)
```bash
while dquilt push; do dquilt refresh; done
```
### xrdpのbuild
`dpkg-buildpackage`コマンドでbuildします。
```bash
dpkg-buildpackage -us -uc
```
親ディレクトリに、debファイルとソースpkgが展開されます。

```bash
cd ..
ls 
xrdp-0.9.20
xrdp-0.9.20.tar.gz
xrdp-dbgsym_0.9.20-1_amd64.deb
xrdp_0.9.20-1.debian.tar.xz
xrdp_0.9.20-1.dsc
xrdp_0.9.20-1_amd64.buildinfo
xrdp_0.9.20-1_amd64.changes
xrdp_0.9.20-1_amd64.deb
xrdp_0.9.20.orig.tar.gz
```

`xrdp_0.9.20-1_amd64.deb` が RDP Proxy 機能を持った xrdp となります。

これを以下のようにインストールします。
```bash
sudo apt install ./xrdp_0.9.20-1_amd64.deb
```

以上で終了です。

## 補足
私のgithubリポジトリでは ubuntu [20.04LTS用](https://github.com/TOMATO-ONE/xrdp-proxy/tree/devel/debian/ubuntu2004/srcpkg)と [22.04LTS用](https://github.com/TOMATO-ONE/xrdp-proxy/tree/devel/debian/ubuntu2204/srcpkg)のsrcpkgも公開しておりますので、よろしければご参考ください。wgetで取得するファイルを差し替えていただければ手順は今回ご紹介したのと同様の方法で可能です。

---
## まとめ

今回はdebian11での package build方法をご紹介しました。<br>


## 次回予告
xrdp の RDP Proxy 設定についてご紹介する予定です。


## 参考とさせていただいたURL
https://qiita.com/miyase256/items/4eeab35a9e69195d1a66

https://www.debian.org/doc/manuals/maint-guide/update.ja.html#newupstream

https://wiki.debian.org/SimpleBackportCreation