Thứ Ba, 18 tháng 8, 2020

Cài đặt Tomcat trong Ubuntu

Ubuntu cung cấp các gói tomcat, cập nhật thông tin các gói có thể cài đặt :

$ sudo apt-get update

Lệnh sau cho biết Ubuntu có những gói tomcat nào
$ sudo apt-cache search tomcat

Chẳng hạn ta chọn tomcat7, cài đặt nó với lệnh sau :
$ sudo apt-get install tomcat7

Sau khi cài đặt, các tập tin cấu hình của Tomcat nằm trong thư mục /etc/tomcat7

Mặc định, Tomcat dùng cổng 8080 cho kết nối HTTP, thông tin này được định trong tập tin /etc/tomcat7/server.xml , chẳng hạn:
<Connector port="8080" protocol="HTTP/1.1" 
			connectionTimeout="20000"  redirectPort="8443" />
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


Nếu cổng 8080, đã có dịch vụ khác dùng rồi thì phải thay đổi cổng HTTP này cho tomcat với lệnh sau chẳng hạn :
$ sudo vi /etc/tomcat7/server.xml

Mặc định, Tomcat sẽ tìm JVM OpenJDK, rồi đến JVM Sun rồi mới tới các JVM khác. Ta có thể buộc Tomcat dùng một JVM nhất định bằng cách định nghĩa JAVA_HOME trong tập tin /etc/default/tomcat7 chẳng hạn mở tập tin này:
$ sudo vi /etc/default/tomcat7

Rồi định nghĩa JAVA_HOME
JAVA_HOME=/usr/lib/jvm/java-7-oracle

Các user và role (nhóm) được định nghĩa trong tập tin /etc/tomcat7/tomcat-users.xml chẳng hạn :
<role rolename="admin"/>
<user username="tomcat" password="tomcat7" roles="admin"/>

Khi cài đặt gói tomcat7 như trên thì một user và nhóm tomcat7 cũng được thêm vào trong Ubuntu, ta có thể thấy cụ thể điều này như sau :

Danh sách các group nằm trong tập tin /etc/group ta xem nó với lệnh sau chẳng hạn :
$ cat /etc/group
Xem danh sách các user :
$ cat /etc/passwd

Vì lý do an toàn, mặc định user tomcat7 không có quyền viết trong thư mục /etc/tomcat7 . Một số chức năng quản trị ứng dụng web cần có quyền viết trong thư mục này, ta cần phải trao quyền cần thiết này cho các user của nhóm tomcat7 :
$ sudo chgrp -R tomcat7 /etc/tomcat7
$ sudo chmod -R g+w /etc/tomcat7 


* Để kiểm tra xem tomcat sau khi cài đặt có hoạt động không có lỗi hay không, ta có thể cài một gói ví dụ sau để kiểm tra :
$ sudo apt-get install tomcat7-examples

Sau đó kiểm tra có thể xem ứng dụng này tại địa chỉ :
http://localhost:8080/examples


Trong trường hợp bị lỗi, xem thêm thông tin lỗi với lệnh :
$ sudo service tomcat7 status

Hoặc xem chi tiết log :
$ sudo cat /var/log/tomcat7/catalina.out


Kiểm tra xem port 8080 đã có dịch vụ nào dùng chưa :
$ netstat -lntu | grep 8080

Nếu có dịch vụ khác xài rồi thì phải đổi port này.



* Các lệnh khởi động và dừng tomcat :

$ sudo service tomcat7 stop
$ sudo service tomcat7 start

Các tập tin/thư mục liên quan đến tomcat :
/etc/init.d/tomcat7
/usr/share/tomcat7
/var/lib/tomcat7/
/var/log/tomcat7/
/var/cache/tomcat7/

 

* Đổi người dùng cho tomcat

Khi cài đặt gói tomcat7 trong Ubuntu, người dùng  và nhóm mặc định của tomcat được cấu hình là tomcat7:tomcat7. Chẳng hạn ta muốn chọn người dùng 'toan' cho Tomcat, trước hết dừng Tomcat.

$ sudo service tomcat7 stop

Ta có thể đổi người dùng bằng cách cấu hình lại quyền cho các thư mục sau như dưới đây :
$ sudo chgrp -R toan /etc/tomcat7

$ sudo chown -R toan:toan /var/lib/tomcat7
$ sudo chown -R toan:toan /var/cache/tomcat7
$ sudo chown -R toan:toan /var/log/tomcat7

 

Định nghĩa lại người dùng trong tập tin cấu hình của tomcat :

$ sudo vi /etc/default/tomcat7
Cập nhật thông tin như sau :
TOMCAT7_USER=toan
TOMCAT7_GROUP=toan

Sau đó khởi động lại Tomcat :
$ sudo service tomcat7 start

 

* Đôi lúc khi khởi động, tomcat không tìm thấy một số thư mục, ta có thể tạo đường dẫn liên kết đến chúng theo cú pháp :

$ ln -s source link_symb

Ví dụ tạo đường trong /usr/share/tomcat7 đường dẫn conf đến thư mục /etc/tomcat7 và nối logs đến /var/log/tomcat7:
$ cd /usr/share/tomcat7

$ sudo ln -s /etc/tomcat7 conf
$ sudo ln -s /var/log/tomcat7 logs

Có thể xóa đường dẫn liên kết này bằng lện unlink :
$ sudo unlink conf
 

* Ta có thể thay đổi host name trong /etc/tomcat7/server.xml:

$ sudo vi /etc/tomcat7/server.xml
Rồi thay đổi defaultHost và name như ý muốn :
<Engine name="Catalina" defaultHost="172.0.0.1">
<Host name="172.0.0.1"  appBase="webapps"
 unpackWARs="true" autoDeploy="true">


 

* Khởi động Tomcat bằng script

Ta có thể khởi động Tomcat bằng startup.sh và ngừng nó bằng shutdown.sh như sau :

$ sudo /usr/share/tomcat7/bin/startup.sh
$ sudo /usr/share/tomcat7/bin/shutdown.sh

Hai script này gọi đến script catalina.sh, ta nên kiểm tra các biến environment CATALINA_HOME và CATALINA_BASE, để khi khởi động không bị lỗi như sau :
$ /usr/share/tomcat7/bin/catalina.sh version

Cách khác để kiểm tra hai biến này có được định nghĩa đúng không :
$ ps aux | grep catalina

Mặc định thì CATALINA_BASE (configurations) và CATALINA_HOME (binaries) trỏ đến cùng một thư mục. Nhưng khi cài đặt gói tomcat7 trong Ubuntu nó sẽ cài ở hai thư mục để cho phép chạy nhiều instance của Tomcat mà không cần phải copy lại phần binaires. Ta phải định nghĩa lại hai biến này : CATALINA_HOME trỏ đến /usr/share/tomcat7, và CATALINA_BASE trỏ đến /var/lib/tomcat7.

Để làm điều này ta tạo tập tin setenv.sh định nghĩa hai biến này trong /usr/share/tomcat7/bin/
$ cd /usr/share/tomcat7/bin

Tạo tập tin setenv.sh và đổi quyền để có thể thực thi nó :
$ sudo touch setenv.sh
$ sudo chmod 755 setenv.sh


Nội dung của tập tin setenv.sh :
#! /bin/sh

# Directory where the Tomcat binary distribution resides
CATALINA_HOME=/usr/share/tomcat7

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/tomcat7


Sau đó khởi động lại Tomcat ta sẽ thấy hai biến này đã được cập nhật
$ sudo /usr/share/tomcat7/bin/startup.sh


Thứ Tư, 12 tháng 8, 2020

Cài đặt Jenkins trên Ubuntu

* Dùng apt-get để cài đặt Jenkins trong Ubuntu

- Thêm debian-stable apt repository
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'

- Cập nhật nguồn trước khi cài đặt
# sudo apt-get update

- Lệnh sau sẽ cài đặt jenkins (nếu Jenkins đã được cài đặt trước rồi, thì lệnh này sẽ update Jenkins lên phiên bản mới)
# sudo apt-get install jenkins


 

* Chạy Jenkins với một user khác trong Ubuntu

- Liệt kê tất cả các user trên máy để chọn một user khác user jenkins để thay. Chẳng hạn trong máy có user toan, ta chọn user này.

$ cat /etc/passwd

- Dừng service jenkins
$ sudo service jenkins stop

- Thay JENKINS_USER, JENKINS_GROUP trong cấu hình :
$ sudo vi /etc/default/jenkins

Rồi trong tập tin này thay user và group thành toan :
JENKINS_USER=toan
JENKINS_GROUP=toan

- Thay quyền làm chủ cho Jenkins home, Jenkins webroot và logs cho user toan :
$ sudo chown -R toan:toan /var/lib/jenkins
$ sudo chown -R toan:toan /var/cache/jenkins
$ sudo chown -R toan:toan /var/log/jenkins

- Sau đó khởi động lại jenkins :
$ sudo service jenkins start

- Nếu có lỗi khi khởi động lại thì ta có thể xem logs với lệnh, rồi tìm cách sửa :
$ sudo service jenkins status


 

* Content Security Policy trong Jenkins làm cho kết quả test (HTMLReport) không hiển thị như mong muốn. Một cách giải quyết vấn đề này là không dùng Content Security Policy : -Dhudson.model.DirectoryBrowserSupport.CSP=

- Trong tập tin cấu hình jenkins

$ sudo vi /etc/default/jenkins

- Gán giá trị rỗng cho DirectoryBrowserSupport.CSP:
JAVA_ARGS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP= "


Tạo một user với quyền root trong Ubuntu

- Khi tạo user mới với lệnh useradd thì home directory thường không được tạo cùng lúc. Dùng option -m(--create-home) để tạo home directory chẳng hạn /home/username :

# sudo useradd -m toan

Thư mục /home/toan được tạo đồng thời với user toan


- Nếu liệt kê các tập tin trong thư  /home/toan , bạn sẽ thấy các tập tin khởi tạo :

# ls -la /home/toan/


- Để đăng nhập với user vừa tạo, ta cần phải cài password với lệnh passwd như sau :

# sudo passwd toan


- Dùng lệnh usermod để thêm user vào nhóm sudo (quyền root)

# sudo usermod -aG sudo toan

Trên Ubuntu, mặc định là các thành viên của nhóm sudo có quyền như sudo.



- Kiểm tra quyền truy xuất sudo trên user mới tạo. Dùng lệnh su để chuyển sang user toan :

# su - toan


- Với user này, kiểm xem nó có quyền "sudo" như khi chạy lệnh với quyền superuser hay không. Chẳng hạn, liệt kê nội dung của thư mục /root vì chỉ user root mới có quyền này :
# sudo ls -la /root



* Trong trường hợp muốn xóa user, dùng lệnh userdel. Dùng option -r(--remove) để buộc userdel xóa thư mục home và mail spool của user
# sudo userdel -r toan