คอนไพล์ซอร์ซโค้ดและติดตั้ง CoovaChilli บน Ubuntu 18.04

CoovaChilli เป็นโปรแกรมบริหารจัดการ ควบคุมการเข้าใช้งานระบบเครือข่าย เช่นสามารถกำหนดให้ผู้ใช้งาน WiFi ต้องล็อกอินก่อนจะใช้งานอินเทอร์เน็ตได้ หรือที่เรียกว่า Captive Portal

เรามาดูวิธีการดาวน์โหลด คอมไพล์ซอร์ซโค้ด CoovaChilli แล้วสร้างเป็นไฟล์ .deb เพื่อติดตั้ง บน Ubuntu 18.04 กัน

ในที่นี้จะทดลองติดตั้งบน Ubuntu 18.04 ที่เพิ่งลงเสร็จใหม่ๆ

ติดตั้งแพ็คเกจที่ใช้ในการคอมไพล์

ก่อนอื่นต้องติดตั้งแพ็คเกจ Ubuntu ที่จำเป็นต้องใช้ในการคอมไพล์ซอร์ซโค้ด CoovaChilli

alice@coova:~$ sudo apt install -y haserl
alice@coova:~$ sudo apt install -y devscripts debhelper
alice@coova:~$ sudo apt install -y gengetopt
alice@coova:~$ sudo apt install -y libssl-dev libjson-c-dev

ดาวน์โหลดซอร์ซโค้ด CoovaChilli

เข้าเว็บไซต์ CoovaChilli คลิกที่ลิงก์ Download

แล้วคลิกลิงก์ดาวน์โหลด Source code (tar.gz)

เวอร์ชันล่าสุด ณ ตอนที่เขียนบทความนี้ คือ 1.4

ใช้คำสั่ง tar เพื่อแตกไฟล์ที่ดาวน์โหลดมา

alice@coova:~$ tar zxf coova-chilli-1.4.tar.gz
alice@coova:~$ cd coova-chilli-1.4/

คอมไพล์ซอร์ซโค้ด

รันคำสั่ง debuild เพื่อคอมไพล์ซอร์ซโค้ดแล้วสร้างเป็นไฟล์ .deb

alice@coova:~/coova-chilli-1.4$ debuild
dpkg-buildpackage -rfakeroot -us -uc -ui
dpkg-buildpackage: info: source package coova-chilli
dpkg-buildpackage: info: source version 1.3.0
dpkg-buildpackage: info: source distribution unstable
dpkg-buildpackage: info: source changed by David Bird (Coova Technologies) <support@coova.com>
dpkg-source --before-build coova-chilli-1.4
dpkg-buildpackage: info: host architecture amd64
fakeroot debian/rules clean
...

^~~~~~~~~~~
DES_set_key
ms_chap.c:110:3: error: implicit declaration of function ‘des_ecb_encrypt’; did you mean ‘DES_ecb_encrypt’? [-Werror=implicit-function-declaration]
des_ecb_encrypt((des_cblock *)clear, (des_cblock *)cipher, key_schedule, 1);
^~~~~~~~~~~~~~~
DES_ecb_encrypt
ms_chap.c:110:20: error: ‘des_cblock’ undeclared (first use in this function); did you mean ‘DES_cblock’?
des_ecb_encrypt((des_cblock *)clear, (des_cblock *)cipher, key_schedule, 1);
^~~~~~~~~~
DES_cblock
ms_chap.c:110:32: error: expected expression before ‘)’ token
des_ecb_encrypt((des_cblock *)clear, (des_cblock *)cipher, key_schedule, 1);
^
cc1: all warnings being treated as errors
Makefile:938: recipe for target 'ms_chap.lo' failed
make[4]: *** [ms_chap.lo] Error 1
make[4]: Leaving directory '/home/alice/coova-chilli-1.4/src'
Makefile:981: recipe for target 'all-recursive' failed
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory '/home/alice/coova-chilli-1.4/src'
Makefile:417: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/home/alice/coova-chilli-1.4'
Makefile:345: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/home/alice/coova-chilli-1.4'
debian/rules:34: recipe for target 'build' failed
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2
debuild: fatal error at line 1152:
dpkg-buildpackage -rfakeroot -us -uc -ui failed

หากคอมไพล์แล้วขึ้นข้อความ error เหมือนด้านบน สาเหตุเป็นเพราะว่า ตัว CoovaChilli ยังคงใช้ OpenSSL 1.0

ลองติดตั้งแพ็คเกจ libssl1.0-dev

alice@portal:~/coova-chilli-1.4$ sudo apt install -y libssl1.0-dev

หมายเหตุ การติดตั้ง libssl1.0-dev จะลบ libssl-dev ออกจากระบบ

รันคำสั่ง debuild อีกครั้ง

alice@coova:~/coova-chilli-1.4$ debuild
dpkg-buildpackage -rfakeroot -us -uc -ui
dpkg-buildpackage: info: source package coova-chilli
dpkg-buildpackage: info: source version 1.3.0
dpkg-buildpackage: info: source distribution unstable
dpkg-buildpackage: info: source changed by David Bird (Coova Technologies) <support@coova.com>
dpkg-source --before-build coova-chilli-1.4
dpkg-buildpackage: info: host architecture amd64
dpkg-checkbuilddeps: error: Unmet build dependencies: libssl-dev
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
debuild: fatal error at line 1152:
dpkg-buildpackage -rfakeroot -us -uc -ui failed

เจออีก error เป็นเพราะไฟล์ที่ใช้ในการคอมไพล์ระบุว่าต้องมีแพ็คเกจ libssl-dev ซึ่งตอนนี้เราดันติดตั้ง libssl1.0-dev ไปแทนที่

วิธีการแก้ไขคือระบุออปชัน -d เพื่อบังคับให้คอมไพล์ไปเลย

รันคำสั่ง debuild ระบุออปชัน -d

alice@coova:~/coova-chilli-1.4$ debuild -d
dpkg-buildpackage -rfakeroot -d -us -uc -ui
dpkg-buildpackage: info: source package coova-chilli
dpkg-buildpackage: info: source version 1.3.0
dpkg-buildpackage: info: source distribution unstable
dpkg-buildpackage: info: source changed by David Bird (Coova Technologies) <support@coova.com>
dpkg-source --before-build coova-chilli-1.4
dpkg-buildpackage: info: host architecture amd64
fakeroot debian/rules clean
...
dpkg-deb: warning: conffile name '/etc/default/chilli' is duplicated
dpkg-deb: warning: conffile name '/etc/init.d/chilli' is duplicated
dpkg-deb: warning: ignoring 2 warnings about the control file(s)
dpkg-deb: building package 'coova-chilli' in '../coova-chilli_1.3.0_amd64.deb'.
...

ผลลัพธ์ที่ได้จากการรันคำสั่ง debuild จะมีไฟล์ต่างๆ ถูกสร้างขึ้นมา อยู่ในไดเรกทอรีข้างนอกหนึ่งขั้น (../) โดยจะมีไฟล์ .deb ซึ่งเป็นไฟล์แพ็คเกจ ที่สามารถนำไปไปติดตั้งบน Ubuntu ได้

cd ออกไปหนึ่งขั้น เพื่อดูรายชื่อไฟล์ที่ถูกสร้างขึ้น

alice@coova:~/coova-chilli-1.4$ cd ..

alice@coova:~$ ls -1
coova-chilli_1.3.0_amd64.build
coova-chilli_1.3.0_amd64.buildinfo
coova-chilli_1.3.0_amd64.changes
coova-chilli_1.3.0_amd64.deb
coova-chilli_1.3.0.dsc
coova-chilli_1.3.0.tar.gz
coova-chilli-1.4
coova-chilli-1.4.tar.gz
coova-chilli-dbgsym_1.3.0_amd64.ddeb

หมายเหตุ ตัวเลขเวอร์ชันในชื่อไฟล์แสดงเป็น 1.3 ซึ่งไม่ตรงกับเวอร์ชันของซอร์ซโค้ดที่เราใช้คอมไพล์ แต่ในที่นี้ขอไม่แก้ไขละกัน

ติดตั้งแพ็คเกจ CoovaChilli

ใช้คำสั่ง dpkg -i ติดตั้งไฟล์ .deb

alice@coova:~$ sudo dpkg -i coova-chilli_1.3.0_amd64.deb
Selecting previously unselected package coova-chilli.
(Reading database ... 79850 files and directories currently installed.)
Preparing to unpack coova-chilli_1.3.0_amd64.deb ...
Unpacking coova-chilli (1.3.0) ...
Setting up coova-chilli (1.3.0) ...
Chilli default off. Look at /etc/default/chilli
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for systemd (237-3ubuntu10.15) ...
Processing triggers for ureadahead (0.100.0-20) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

หลังการรันคำสั่ง dpkg -i แนะนำให้รัน apt install -f

alice@coova:~$ sudo apt install -f
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
  libssl-doc
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

ลบแพ็คเกจที่ไม่จำเป็นออก

alice@coova:~$ sudo apt autoremove -y

ถึงตอนนี้เราก็มี CoovaChilli ติดตั้งเรียบร้อยแล้ว

ลองใช้คำสั่ง chilli ระบุออปชัน –version เพื่อดูข้อมูลเวอร์ชัน

alice@coova:~$ chilli --version
chilli[23315]: (Re)processing options [/var/run/chilli.23315.cfg.bin]
chilli[23316]: running chilli_opt on /var/run/chilli.23315.cfg.bin
coova-chilli 1.4

ข้อมูลอ้างอิง

Leave a Reply