2
1

More than 1 year has passed since last update.

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

Posted at

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

前回まで

RockyLinux 上で rpmbuildでRPMパッケージを作成する方法を書きました。

今回は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して基本的に必要なコマンドをインストールします。

apt update
apt install sudo wget curl vim git

build用ユーザ追加

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

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をインストールし、初期設定として環境変数にメールアドレスと名前をセットします。これはパッケージ作成の際に使われます。

sudo apt install dpkg-dev

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

quilt コマンドの準備とalias設定

deb pkg のパッチ管理コマンドのquilt をインストールしaliasを作ります。

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 を作成します。

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を追加インストールします。

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のリポジトリから必要なファイルをダウンロードしてください。

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 コマンドを使ってソースコードを展開してください。

dpkg-source -x neutrinordp_1.0.1+836b738-1.dsc
cd neutrinordp-1.0.1+836b738/

patch 適用

追加でpatchを適用する場合は以下を実行してください。
(既に生成済みのdebian source packageをそのままbuildする場合は不要です)

while dquilt push; do dquilt refresh; done

build

dokg-buildpackageコマンドでdeb pkgをbuildします。

dpkg-buildpackage -us -uc

作業ディレクトリの親ディレクトリに、debファイルとソースpkgが生成されます。

以下のようなファイルが生成されているはずです。

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-devlibneutrinordp が必要になります。


xrdpのbuild

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

前段で作成したNutrinoRDPをインストールする

RDP Proxy機能のために必要な NeutrinoRDPのライブラリをインストールします。

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をインストールします。

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 のリポジトリから以下ファイルを取得してください。

標準のdebian source pkgとの主な差分は xrdpのバージョンを引き上げていることと、--enable-neutrinordp オプションを加えていることです。

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 コマンドでソースファイルを展開します。

dpkg-source -x xrdp_0.9.20-1.dsc
cd xrdp-0.9.20

patch 適用

追加でpatchを適用する場合は以下を実行してください。
(既に生成済みのdebian source packageをそのままbuildする場合は不要です)

while dquilt push; do dquilt refresh; done

xrdpのbuild

dpkg-buildpackageコマンドでbuildします。

dpkg-buildpackage -us -uc

親ディレクトリに、debファイルとソースpkgが展開されます。

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 となります。

これを以下のようにインストールします。

sudo apt install ./xrdp_0.9.20-1_amd64.deb

以上で終了です。

補足

私のgithubリポジトリでは ubuntu 20.04LTS用22.04LTS用のsrcpkgも公開しておりますので、よろしければご参考ください。wgetで取得するファイルを差し替えていただければ手順は今回ご紹介したのと同様の方法で可能です。


まとめ

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

次回予告

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

参考とさせていただいたURL

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1