2023年8月17日 星期四

Ubuntu Linux Install MariaDB

Unbutn Linux Install Mariadb

Ubuntu Linux 22.04 LTS 中可以直接安裝 MariaDB 10.6.12

MariaDB 安裝

# sudo apt install mariadb-server
apt install mariadb-server














安裝完成後,會自動啟動MariaDB service
#sudo systemctl status mariadb
sudo systemctl status mariadb





停止MariaDB service進行設定
#sudo systemctl stop mariadb
sudo systemctl stop mariadb






MariaDB 設定

基本設定

MariaDB Server安裝完成後,設定檔目錄為/etc/mysql/mariadb.conf.d/
主要設定檔為/etc/mysql/mariadb.conf.d/50-server.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf








Server主要設定項目在[mysqld]
mysqld basic setting






mysql basic setting character










預設資料存放資料為/var/lib/mysql
未開放主機連線,如要開放請改為 #bind-address =127.0.0.1

新增設定

在原廠說明中建議新增設定不要去更改原有設定檔,在目錄新增z-開頭的檔案,
如z-custom-my.cnf,將相關設定寫入,系統自動會去覆蓋舊有設定。
mariadb config








在目錄中/etc/mysql/mariadb.conf.d/,新增z-mytune.cnf
將修改的設定寫入,不修改原有的50-server.cnf
# sudo nano /etc/mysql/mariadb.conf.d/z-mytune.cnf
---
[mysqld]

datadir                 = /data/mysql
tmpdir                  = /tmp

skip-name-resolve

expire_logs_days        = 7

max_connections = 150
innodb_buffer_pool_size = 512M

#innodb-log-file-size = 128M
#innodb-log-buffer-size = 128M
innodb-file-per-table = 1

#innodb_buffer_pool_instances = 8
#innodb_old_blocks_time = 1000
#innodb_stats_on_metadata = off
#innodb-flush-method = O_DIRECT
#innodb-log-files-in-group = 2
#innodb-flush-log-at-trx-commit = 2

#tmp-table-size = 96M
#max-heap-table-size = 96M
#open_files_limit = 65535
#max_connect_errors = 1000000
#connect_timeout = 60
#wait_timeout = 28800
---
nano /etc/mysql/mariadb.conf.d/10-mytune.cnf













資料存放資料為/var/lib/mysql更改為/data/mysql
# sudo mkdir /data/mysql -p
#sudo chown mysql:mysql /data/mysql
mkdir /data/mysql



mysql_secure_installation

啟動maridb server,執行mysql_secure_installation,
進行設定root密碼及相關設定。
# sudo mysql_secure_installation
sudo mysql_secure_installation01














sudo mysql_secure_installation02


















設定完成後,使用sudo mysql 即可登入檢查MariaDB Server狀態。

sudo mysql status










2023年8月15日 星期二

Ubuntu Linux Install PHP

Unbutn Linux Install PHP

Ubuntu Linux 22 LTS中預設的php版本為8.1,可以直接安裝搭配Apache或Nginx等Web Server 使用。

PHP安裝

PHP8.1安裝

# sudo apt install php8.1

PHP8.1驗證

# php -v

# php -i | head

php81 version






使用php -i | grep head 檢查info,可以看到預設的php.ini位置,是在/etc/php/8.1/cli/php.ini

設置 php.ini中的時區為Asia/Taipei
# sudo vim /etc/php/8.1/apache2/php.ini
---
date.timezone = "Asia/Taipei"
---

依照需求安裝所需的 PHP Extensions

php8.1-cli php8.1-dev php8.1-phpdbg php8.1-bz2 php8.1-common php8.1-curl php8.1-gd php8.1-json php8.1-ldap php8.1-mbstring php8.1-mcrypt php8.1-mysql php8.1-readline php8.1-snmp php8.1-tidy php8.1-xml php8.1-xmlrpc php8.1-zip php8.1-fpm


2023年8月10日 星期四

Ubuntu Linux server locale setting

Ubuntu Linux server 變更系統語言環境

Ubuntu Linux server 使用最小安裝後,發現系統語言環境不是en_US.UTF-8
使用以下步驟變更

1.檢查目前系統語言環境

# sudo locale
system locale status









2.编辑配置文件

修改為en_US.UTF-8,新增LANGUAGE="en_US:en"
# cat /etc/default/locale
locale c-utf




# sudo nano /etc/default/locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
edit defalut locale





重新啟動

3..安裝系統語言

重新啟動,檢查未生效
new locale status










檢查目前系統安裝的locale語言
# locale -a
locale check





沒有安裝en_US.UTF-8

4.安裝en_US.UTF-8

# sudo locale-gen en_US.UTF-8

locale gen install en.uft8




5.重新啟動後,設定正常

locale change to enutf8












Ubuntu Linux time setting

Ubuntu Linux 時間及校時設定

Ubuntu Linux安裝完成後預設為UTC時區,需進行設置為本地時間

時區timezone設定

使用timedatectl可以檢查主機目前的時區設置
# sudo timedatectl 
timedatectl status







使用timedatectl list-timezones 可以列出所有的時區。
# sudo timedatectl list-timezones | grep Taipei
使用timedatectl set-timezone設定時區
# sudo timedatectl set-timezone Asia/Taipei
檢查時間設定
# sudo timedatectl 
timedatectl set-timezone









網路校時設定

網路校時是使用timedatectl set-ntp功能讓系統自動校時
開啟網路校時
# sudo timedatectl set-ntp yes
timedatectl timezone status








timedatectl的校時功能是經由systemctl-timesyncd服務執行 
當set-ntp yes,等於執行systemctl enable --now systemd-timesyncd
當set-ntp no,等於執行systemctl disable --now systemd-timesyncd
# sudo systemctl status systemctl-timesyncd
systemctl status systemctl-timesyncd













可以編輯/etc/systemd/timesyncd.conf設定檔,指定網路校時的NTP主機。
# sudo nano /etc/systemd/timesyncd.conf
edit /etc/systemd/timesyncd.conf




NTP主機用IP或網站都可以,以空白分隔多個主機
NTP= time.stdtime.gov.tw clock.stdtime.gov.tw
備用NTP主機用IP或網站都可以,以空白分隔多個主機
FallbackNTP=tick.stdtime.gov.tw tock.stdtime.gov.tw watch.stdtime.gov.tw

重啟systemctl-timesyncd讓設定生效
# sudo systemctl restar systemctl-timesyncd
systemctl restar systemctl-timesyncd











檢查時間同步
# sudo timedatectl timesync-status
timedatectl timesync-status

 








關閉網路校時
# sudo timedatectl set-ntp no






參考資料:



2023年8月9日 星期三

Ubuntu Linux UFW 防火牆配置

Ubuntu Linux UFW 防火牆配置

Ubuntu Server 22.04 LTS 預設安裝UFW防火牆 ( Uncomplicated Firewall )。
UFW 是iptables的前端程式,它簡化了 iptable 複雜的指令及參數,讓使用者能快速上手。

UFW 基礎操作

狀態查詢
# sudo ufw status
ufw default status








啟動 UFW 服務,自動設定開機時啟用
# sudo ufw enable
ufw enable




停用 UFW 服務,自動設定且開機停用
# sudo ufw disbale
ufwdisable




UFW 服務預設狀態
# sudo ufw status
# sudo ufw status verbose
ufw enable status






成功啟動 (active),設定 UFW 預設允許、拒絕所有連線,並開啟log紀錄(/var/log/ufw.log)


UFW 規則設定

UFW 服務預設拒絕所有連線(deny)

如果要允許所有連線, 設定為 allow
# sudo ufw default allow
改回拒絕所有連線 deny
# sudo ufw default deny
ufw default rule status









為了主機安全性,請先設定拒絕所有連線,再依需求開啟設定。
UFW 可以依服務、port、ip網段進行設定。

服務設定

語法: ufw <allow/deny> <service name>
使用allow/deny來允許/拒絕指定的服務
UFW支援的服務項目,可以在/etc/services 查看

允許 ssh service連線
# sudo ufw allow ssh
拒絕 ssh service連線
# sudo ufw allow ssh

ufw allow ssh









通訊埠設定

語法: ufw <allow/deny> <port>/<protocol>
使用allow/deny來允許/拒絕指定的port,也可單獨指定tcp/udp連線

允許 port 80 連線,包含tcp/udp
# sudo ufw allow 80
允許 port 80 連線,只限定tcp
# sudo ufw allow 80/tcp
允許 port 80 連線,只限定udp
# sudo ufw allow 80/udp

拒絕 port 80 連線,包含tcp/udp
# sudo ufw deny 8080
拒絕 port 80 連線,只限定tcp
# sudo ufw deny 8080/tcp
拒絕 port 80 連線,只限定udp
# sudo ufw deny 8080/udp
ufw allow port













指定 IP/網段 

語法: ufw <allow/deny>  from <ip/subnet>
指定 IP或網段 允許/拒絕連線所有 port 

允許特定IP或網段連線 
# sudo ufw allow from 192.168.1.100
# sudo ufw allow from 192.168.1.0/24

拒絕特定IP或網段連線
# sudo ufw deny from 192.168.2.100
# sudo ufw deny from 192.168.2.0/24

ufw allow ip













指定 IP或網段 連線特定 port 的tcp/udp

語法: ufw <allow/deny> from <target> to <destionation> port <port> prot <protocol>

允許特定IP或網段連線 port 80
# sudo ufw allow from 192.168.1.100 to any port 80
# sudo ufw allow from 192.168.1.0/24 to any port 80

拒絕特定IP或網段連線 port 80
# sudo ufw deny from 192.168.2.100 to any port 80 proto tcp
# sudo ufw deny from 192.168.2.0/24 to any port 80 proto tcp
ufw allow ip port













刪除 UFW 規則

UFW規則刪除有2個方法
1.依建立時的規則刪除

依服務刪除 
# sudo ufw delete allow ssh
依 port 刪除
# sudo ufw delete allow 80
# sudo ufw delete allow 8080/tcp

ufw rules delete







2.依規則序號刪除
列出所有UFW規則序號
#sudo ufw status numbered
依序號刪除 
#sudo ufw delete 1
ufw delete rule number













重設 UFW 規則

直接清空現有規則,重新設定UFW。
# sudo ufw reset
ufw reset rule














使用ufw reset清除規則後,UFW會變為inactive,需重新enable啟動服務

UFW log紀錄設置

語法: ufw logging < on|off|LEVEL >
UFW預設開啟log紀錄,位置為/var/log/ufw.log
UFW log LEVEL low、medium、high、full 四種,預設等級為low,可以依需求調整。
開啟 UFW log 紀錄
# sudo ufw logging on
關閉 UFW log 紀錄
# sudo ufw logging off
調整 UFW log LEVEL為medium
# sudo ufw logging medium
ufw logging










參考資料:

2023年8月5日 星期六

Ubuntu Linux system setting

Ubuntu Linux 系統設定

Ubuntu Linux安裝完成後, 依需求進行系統調整

調整項目

1.SWAP調整

2.時間及校時設定

3.語言環境設置

4.UFW防火牆設置

5.停用IPv6

6.Netplan或NetworkManager網路設定

7.停用自動更新

8.停用休眠

9.停用cloud-init

停用cloud-init有2個方式
1.創建空白文件 /etc/cloud/cloud-init.disabled 
開機過程,系統會檢查該文件是否存在。如果存在,則不會啟動cloud-init。
# sudo touch /etc/cloud/cloud-init.disabled

2.增加cloud-init=disabled到kernel 中,開機過程不啟動cloud-init
# sudo  echo 'GRUB_CMDLINE_LINUX=cloud-init.disabled' >> /etc/default/grub
# sudo  grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

3.移除cloud-init
# sudo dpkg-reconfigure cloud-init
# sudo apt-get purge cloud-init
# sudo rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/
# sudo reboot


2023年8月4日 星期五

Ubuntu Linux disable IPv6

Ubuntu Linux 停用IPv6

Ubuntu 22.04 LTS 安裝完成後,預設是啟用IPv6。

ubuntu default enable ipv6





如果有需要可以依下面方法停用。

使用sysctl設置停用IPv6

可以使用sysctl設置 來暫時停用或永遠停用IPv6

1.直接執行以下指令暫時停用IPv6

# sudo  sysctl -w net.ipv6.conf.all.disable_ipv6=1

# sudo  sysctl -w net.ipv6.conf.default.disable_ipv6=1

# sudo  sysctl -w net.ipv6.conf.lo.disable_ipv6=1

sysctl -w disable ipv6

可以使用" sudo sysctl -a | grep disable_ipv6 "檢查差異,確認停用IPv6

sysctl -w check ipv6 stauts


2.以上指令暫時停用IPv6但系統重開機就會失效, 可以直接將設定寫入檔案讓開機永遠生效

將以下指令寫入/etc/sysctl.d/70-disable-ipv6.conf,可執行 sysctl -p 生效或重新開機。

net.ipv6.conf.all.disable_ipv6=1

net.ipv6.conf.default.disable_ipv6=1

net.ipv6.conf.lo.disable_ipv6 = 1

add 70-disable-ipv6.conf








重開機後發現部分網卡未停用IPv6功能,使用" sysctl -a | grep disable_ipv6 "," cat /proc/sys/net/ipv6/conf/all/disable_ipv6 "檢查, 只有單一網卡未停用IPv6

3,在/etc/sysctl.d/70-disable-ipv6.conf增加設定,重開機確認正常

add lan disable ipv6 sysctl file








使用grub設置停用IPv6

修改grub設置,在kernel中直接停用IPv6

1. 修改/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT,GRUB_CMDLINE_LINUX增加ipv6.disable=1

#sudo nano /etc/default/grub

2.執行sudo update-grub更新

#sudo update-grub

edit grub disable ipv6






3.重開機就發現IPv6已關閉,確認無相關設定

grub disable ipv6 reboot






如果確認不使用IPv6,會使用修改kernel方式停用。如果使用sysctl方式設定完成要再確認是否完整停用。


Ubuntu Server autoinstall cloud-init config file reference

Ubuntu Server autoinstall cloud-init config file reference


在使用cloud-init建立Ubuntu Server autoinstall ISO過程,需要製作autoinstall的user-data。參考ubunt的Automated Server installer config file reference產出個人的user-data


user-data項目說明

user-data為yaml檔,開頭註明為#cloud-conifg
#cloud-config

# autoinstall 設定項目
autoinstall:
  apt:
    disable_components: []
    fallback: abort
    geoip: true
    mirror-selection:
      primary:
      - country-mirror
      - arches:
        - amd64
        - i386
        uri: http://archive.ubuntu.com/ubuntu  
# uri為apt update sites, 可以依需求更改,資料會寫入/etc/apt/sources.list
      - arches:
        - s390x
        - arm64
        - armhf
        - powerpc
        - ppc64el
        - riscv64
        uri: http://ports.ubuntu.com/ubuntu-ports
    preserve_sources_list: false

  codecs:
    install: false
  drivers:
    install: false

# 設定系統帳號, 密碼為加密, 可以使用mkpasswd產出。
  identity:
    hostname: u22
    password: $6$jGYK2yqL/ERewR7A$kGm5GztrXrQPb7L3wa0VAMeaWj/UuJcUVB/M.T.fOkaV8SvFIMdULOfKHyRDkB..85yVsDPJrtpQ3bsj3Rtnt.
    realname: bee01
    username: bee01
  kernel:
    package: linux-generic

# 指定鍵盤
  keyboard:
    layout: us
    toggle: null
    variant: ''

# 指定語言
  locale: en_US.UTF-8

# 網路設定,網路卡依實際名稱設定。設定方式為netplan,可以參考設定。
  network:
    ethernets:
      ens160:
        dhcp4: true
    version: 2

# 指定安裝系統,可以設定ubuntu-server 或 ubuntu-server-minimal。
  source:
    id: ubuntu-server
    search_drivers: false

# 安裝open SSH server
  ssh:
    allow-pw: true
    authorized-keys: []
    install-server: true

# 硬碟分區設定,可以依實際狀況調整
  storage:
    config:
    - ptable: gpt
      path: /dev/sda
      wipe: superblock-recursive
      preserve: false
      name: ''
      grub_device: true
      type: disk
      id: disk-sda
    - device: disk-sda
      size: 1048576
      flag: bios_grub
      number: 1
      preserve: false
      grub_device: false
      offset: 1048576
      path: /dev/sda1
      type: partition
      id: partition-0
    - device: disk-sda
      size: 42946527232
      wipe: superblock
      number: 2
      preserve: false
      grub_device: false
      offset: 2097152
      path: /dev/sda2
      type: partition
      id: partition-1
    - fstype: xfs
      volume: partition-1
      preserve: false
      type: format
      id: format-0
    - path: /
      device: format-0
      type: mount
      id: mount-0

# 指定swap大小,使用檔案格式
    swap:
      filename: /swap.img
      size: 4G
      maxsize: 4G

# 安裝 packages, 需確定安裝過程是可以連接網路, 會自動安裝。
# 如果沒有對外網路,自動安裝過程會出錯中斷。
  packages:
    - chrony

# 主機時區設定
  timezone: Asia/Taipei

# 自動安裝前執行的動作,還沒有想到作用
# 可以參考後面示範
  early-commands:
    - mkdir /data1
    - touch /data1/early-commands.txt

# 以上設定都自動安裝後,在自動重新開機前執行的動作
# 預計要執行的指令需 curtin in-target來執行,新的硬碟在安裝過程是掛載至/target
# 以下測試是在/ 建立data2目錄,在/data2目錄建立late-commands.txt檔案
# 可以參考後面示範
  late-commands:
    - curtin in-target --target /target mkdir data2
    - curtin in-target --target /target touch data2/late-commands.txt

# 安裝完成後,第一次自動重開機後,使用rnncmd來執行的動作
# 以下測試是在/ 建立data3目錄,在/data2目錄建立runcmd.txt檔案,並停用開機執行ufw service 
# 可以參考後面示範
  user-data:
    runcmd:
      - [ mkdir, /data3 ]
      - [ touch, /data3/runcmd.txt ]
      - [ systemctl, disable, ufw ]

  updates: security
  version: 1

安裝示範

early-commands
usr-data-early-commands







late-commands
usr-data-late-commands





runcmd
usr-data-runcmd