labunix's blog

labunixのラボUnix

SoftEther VPNのソースコード(GPLv2)が公開されたので、debパッケージにしてみる。

■SoftEtherのソースコード(GPLv2)が公開されたので、debパッケージにしてみる。

 設定や起動方法はマニュアルの通りなので、今回は特に記載しない。

 参考:SoftEther VPN のソースコードを GPLv2 オープンソース・ライセンスで公開 
 http://ja.softether.org/9-about/news/800-open-source

 コンパイル環境とdebパッケージ作成ツール、
 前提条件のツールの導入。

■Wheezyでコンパイル、debパッケージ作成ツール、前提条件パッケージを導入する。

$ echo "build-essential dh-make debhelper devscripts
        checkinstall
        libssl-dev libreadline6-dev" | sudo apt-get install -y `xargs`

■とりあえず、ソースコードをgitからダウンロード。

$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git
$ cd SoftEtherVPN

■「Makefile」が無いので作る。

$ ./configure 
---------------------------------------------------------------------
SoftEther VPN for Unix

Copyright (c) SoftEther VPN Project at University of Tsukuba, Japan.
Copyright (c) Daiyuu Nobori. All Rights Reserved.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation.
---------------------------------------------------------------------

Welcome to the corner-cutting configure script !

Select your operating system below:
 1: Linux
 2: FreeBSD
 3: Solaris
 4: Mac OS X

Which is your operating system (1 - 4) ? : 1

Select your CPU bits below:
 1: 32-bit
 2: 64-bit

Which is the type of your CPU (1 - 2) ? : 2

The Makefile is generated. Run 'make' to build SoftEther VPN.

■とりあえずcheckinstall

$ sudo checkinstall

checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
           このソフトウェアはGNU GPLの下でリリースしています。



*****************************************
**** Debian package creation selected ***
*****************************************

*** Warning: The package name "SoftEtherVPN" contains upper case
*** Warning: letters. dpkg might not like that so I changed
*** Warning: them to lower case.

このパッケージは以下の内容で構成されます: 

0 -  Maintainer: [ root@vmx-rdebian ]
1 -  Summary: [ Package created with checkinstall 1.6.2 ]
2 -  Name:    [ softethervpn ]
3 -  Version: [ 20140105 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ SoftEtherVPN ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ softethervpn ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

変更するものの番号を入力してください。Enterで続行します: 

Installing with make install...

========================= インストールの結果 ===========================
cp src/bin/BuiltHamcoreFiles/unix/hamcore.se2 bin/vpnserver/hamcore.se2
cp: 通常ファイル 'bin/vpnserver/hamcore.se2' を作成できません: そのようなファイルやディレクトリはありません
make: *** [bin/vpnserver/hamcore.se2] エラー 1

****  インストールは失敗しました。パッケージの作成を中断します

クリーンアップ..OK

Bye.

■ディレクトリを作成して再度実行。

$ mkdir -p bin/vpnserver
$ sudo checkinstall

■一度削除

$ sudo dpkg -r softethervpn
$ ls *.deb 
softethervpn_20140105-1_amd64.deb

debパッケージを使ってインストール。

$ sudo dpkg -i softethervpn_20140105-1_amd64.deb 

$ dpkg -L softethervpn 
/.
/usr
/usr/bin
/usr/bin/vpncmd
/usr/bin/vpnbridge
/usr/bin/vpnserver
/usr/bin/vpnclient
/usr/vpncmd
/usr/vpncmd/hamcore.se2
/usr/vpncmd/vpncmd
/usr/vpnbridge
/usr/vpnbridge/hamcore.se2
/usr/vpnbridge/vpnbridge
/usr/share
/usr/share/doc
/usr/share/doc/softethervpn
/usr/share/doc/softethervpn/LICENSE
/usr/share/doc/softethervpn/README.TXT
/usr/share/doc/softethervpn/README
/usr/vpnserver
/usr/vpnserver/hamcore.se2
/usr/vpnserver/vpnserver
/usr/vpnclient
/usr/vpnclient/hamcore.se2
/usr/vpnclient/vpnclient

■お片付け

$ sudo make clean
$ sudo rm Makefile
$ sudo rm -fr bin/

32bit版のdebパッケージの作成

$ ./configure
... 
Select your operating system below:
 1: Linux
 2: FreeBSD
 3: Solaris
 4: Mac OS X

Which is your operating system (1 - 4) ? : 1

Select your CPU bits below:
 1: 32-bit
 2: 64-bit

Which is the type of your CPU (1 - 2) ? : 1

■64bit版なので、32bit版のdpkgインストールには失敗するが、
 パッケージは出来る。

$ mkdir -p bin/vpnserver
$ sudo checkinstall
変更するものの番号を入力してください。Enterで続行します: 7
アーキテクチャを入力: 
>> i386

find /var/tmp/ -type -f -name "dpkginstall.log" -exec cat {}\;
$ ls *.deb
softethervpn_20140105-1_amd64.deb  softethervpn_20140105-1_i386.deb

■32bit版はインストールされないので、
 debパッケージ情報を確認。

$ dpkg -I softethervpn_20140105-1_i386.deb 
 新形式 debian パッケージ、バージョン 2.0。
 サイズ 7148614 バイト: コントロールアーカイブ = 311 バイト。
       0 バイト、    0 行      conffiles            
     226 バイト、    9 行      control              
 Package: softethervpn
 Priority: extra
 Section: checkinstall
 Installed-Size: 10672
 Maintainer: root@vmx-rdebian
 Architecture: i386
 Version: 20140105-1
 Provides: softethervpn
 Description: Package created with checkinstall 1.6.2

■debパッケージに含まれるファイルの一覧の確認。

$ dpkg -c softethervpn_20140105-1_i386.deb | awk '{print $NF}'
./
./usr/
./usr/bin/
./usr/bin/vpncmd
./usr/bin/vpnbridge
./usr/bin/vpnserver
./usr/bin/vpnclient
./usr/vpncmd/
./usr/vpncmd/hamcore.se2
./usr/vpncmd/vpncmd
./usr/vpnbridge/
./usr/vpnbridge/hamcore.se2
./usr/vpnbridge/vpnbridge
./usr/share/
./usr/share/doc/
./usr/share/doc/softethervpn/
./usr/share/doc/softethervpn/LICENSE
./usr/share/doc/softethervpn/README.TXT
./usr/share/doc/softethervpn/README
./usr/vpnserver/
./usr/vpnserver/hamcore.se2
./usr/vpnserver/vpnserver
./usr/vpnclient/
./usr/vpnclient/hamcore.se2
./usr/vpnclient/vpnclient

■別の環境に依存関係を解決してインストール

$ sudo apt-get install -y gdebi
$ sudo gdebi softethervpn_20140105-1_amd64.deb 
Reading package lists... Done
Building dependency tree        
Reading state information... Done
Building data structures... Done 
Building data structures... Done 


Package created with checkinstall 1.6.2
ソフトウェアパッケージをインストールしますか? [y/N]:y
以前に未選択のパッケージ softethervpn を選択しています。
(データベースを読み込んでいます ... 現在 71050 個のファイルとディレクトリがインストールされています。)
(softethervpn_20140105-1_amd64.deb から) softethervpn を展開しています...
softethervpn (20140105-1) を設定しています ...


■RPM化してみる。

$ sudo apt-get install -y alien
$ sudo alien -r softethervpn_20140105-1_amd64.deb 
softethervpn-20140105-2.x86_64.rpm generated

$ sudo alien -r softethervpn_20140105-1_i386.deb 
softethervpn-20140105-2.i386.rpm generated

■rpmの情報を確認してみる。

$ rpm -qip softethervpn-20140105-2.x86_64.rpm 
Name        : softethervpn
Version     : 20140105
Release     : 2
Architecture: x86_64
Install Date: (not installed)
Group       : Converted/checkinstall
Size        : 10847333
License     : see /usr/share/doc/softethervpn/copyright
Signature   : (none)
Source RPM  : softethervpn-20140105-2.src.rpm
Build Date  : 20140105053924秒
Build Host  : vmx-rdebian.labunix.net
Relocations : (not relocatable)
Summary     : Package created with checkinstall 1.6.2
Description :


(Converted from a deb package by alien version 8.87.)

■依存関係の確認。

$ rpm -qRp softethervpn-20140105-2.x86_64.rpm 
/bin/sh
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libcrypto.so.1.0.0()(64bit)
libcrypto.so.1.0.0(OPENSSL_1.0.0)(64bit)
libdl.so.2()(64bit)
libm.so.6()(64bit)
libncurses.so.5()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
libreadline.so.6()(64bit)
librt.so.1()(64bit)
librt.so.1(GLIBC_2.2.5)(64bit)
libssl.so.1.0.0()(64bit)
libssl.so.1.0.0(OPENSSL_1.0.0)(64bit)
libtinfo.so.5()(64bit)
libz.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

■余談。

■「bin/vpnserver」はインストールディレクトリの他にカレントディレクトリにも作る
 「checkinstall」実行時の固有の問題。
 普通に「./configure;make;make install」する場合、
 「make」時にも「/tmp」の為にroot権限が必要。
 また、「make uninstall」の代わりに「make -n install」でアンインストールだったりする。

$ make
Fatal error: can’t create tmp/objs/Mayaqua/Cfg.o: Permission denied
make: *** [tmp/objs/Mayaqua/Cfg.o] エラー 1

$ ls -ld /tmp/
drwxrwxrwt 13 root root 4096  15 06:39 /tmp/

$ sudo make -n install
echo
echo "--------------------------------------------------------------------"
echo "Installation completed successfully."
echo
echo "Execute 'vpnserver start' to run the SoftEther VPN Server background service."
echo "Execute 'vpnbridge start' to run the SoftEther VPN Bridge background service."
echo "Execute 'vpnclient start' to run the SoftEther VPN Client background service."
echo "Execute 'vpncmd' to run SoftEther VPN Command-Line Utility to configure VPN Server, VPN Bridge or VPN Client."
echo "--------------------------------------------------------------------"
echo

■dpkgで、debパッケージをインストールする前に、
 依存関係を確認する方法が分からなかったので、半ば無理やり確認した。
 以下のようなシンプルなコマンドだったので、とても助かった。

$ which vpnserver | grep . `xargs`
#!/bin/sh
/usr/vpnserver/vpnserver "$@"
exit $?

■apt-fileを使った依存関係の一覧

$ ldd /usr/vpnserver/vpnserver | \
  awk '($(NF-1) != "=>") {print $(NF-1)}' | \
  for list in `xargs`;do apt-file search "$list";done | 
  awk -F\: '{print $1}' | sort -u
libc6
libncurses5
libncurses5-dbg
libreadline6
libreadline6-dbg
libssl1.0.0
libssl1.0.0-dbg
libtinfo5
zlib1g
zlib1g-dbg

■dbg関連が入っていないが、aptで入れる事は出来る。
 ライブラリの名前が同じなので、dbgにしかない呼び出しがなければ、
 動作に特に影響はなさそう。

 以下の「必要なソフトウェア」にもdbgパッケージが必要とは記載されていない。

 参考:SoftEther VPN を UNIX 上でビルドする方法
 http://ja.softether.org/5-download/src/2.unix

$ echo \
"
libc6
libncurses5
libncurses5-dbg
libreadline6
libreadline6-dbg
libssl1.0.0
libssl1.0.0-dbg
libtinfo5
zlib1g
zlib1g-dbg
" | for list in `xargs`;do dpkg -l | \
    awk '{print $2}' | grep "${list}" || apt-cache show "$list" | grep ^Package; \
  done | sort
Package: libncurses5-dbg
Package: libreadline6-dbg
Package: libssl1.0.0-dbg
Package: zlib1g-dbg
libc6-dev:amd64
libc6:amd64
libncurses5:amd64
libreadline6:amd64
libssl1.0.0:amd64
libtinfo5:amd64
zlib1g-dev:amd64
zlib1g:amd64

■依存関係の詳細は以下。

$ ldd /usr/vpnserver/vpnserver | \
  awk '($(NF-1) != "=>") {print $(NF-1)}' | \
  for list in `xargs`;do apt-file search "$list";done | sort
libc6: /lib/x86_64-linux-gnu/libc.so.6
libc6: /lib/x86_64-linux-gnu/libdl.so.2
libc6: /lib/x86_64-linux-gnu/libm.so.6
libc6: /lib/x86_64-linux-gnu/libpthread.so.0
libc6: /lib/x86_64-linux-gnu/librt.so.1
libc6: /lib64/ld-linux-x86-64.so.2
libncurses5-dbg: /usr/lib/debug/lib/x86_64-linux-gnu/libncurses.so.5.9
libncurses5-dbg: /usr/lib/debug/lib/x86_64-linux-gnu/libtinfo.so.5.9
libncurses5: /lib/x86_64-linux-gnu/libncurses.so.5
libncurses5: /lib/x86_64-linux-gnu/libncurses.so.5.9
libreadline6-dbg: /usr/lib/debug/lib/x86_64-linux-gnu/libreadline.so.6.2
libreadline6: /lib/x86_64-linux-gnu/libreadline.so.6
libreadline6: /lib/x86_64-linux-gnu/libreadline.so.6.2
libssl1.0.0-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
libssl1.0.0-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
libssl1.0.0: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
libssl1.0.0: /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
libtinfo5: /lib/x86_64-linux-gnu/libtinfo.so.5
libtinfo5: /lib/x86_64-linux-gnu/libtinfo.so.5.9
zlib1g-dbg: /usr/lib/debug/lib/x86_64-linux-gnu/libz.so.1.2.7
zlib1g: /lib/x86_64-linux-gnu/libz.so.1
zlib1g: /lib/x86_64-linux-gnu/libz.so.1.2.7