Recently in Linux Category

MAC-telnet

user-pic
Vote 0 Votes

MAC access 是 RouterOS 的私有協定,它可以用 MAC address 連線,即使用設備端沒有設定 IP
抓封包就可以得知,它的原理是使用 UDP 廣播的方式運作,連線端及設備端都是使用 UDP 廣播來溝通,
這也是它可以不用 IP 也能連線的原因,前提是需位於同一個 L2 層
MAC-Telnet 這個是比較舊的版本了,這個版本已經無法連線 >=6.43 版的 RouterOS
版本 >=6.43 的 RouterOS 都是使用 hash 過的 password
6.43 changelog:
*) user - all passwords are now hashed and encrypted, plaintext passwords are kept for downgrade
(will be removed in later upgrades);
裡面有:
Server mactelnetd
Client mactelnet
MikroTik Neighbor Discovery protocol mndp
protocol.h 可看到使用兩個 Port,一個 5678 用來 discovery, 20561 用來溝通
#define MT_MACTELNET_PORT 20561
#define MT_MNDP_PORT 5678
mactelnetd 需配合一個帳號密碼檔 /usr/local/etc/mactelnetd.users,
格式是純文字 username:password
系統帳號也需要有一樣的帳號才能正常登入

yum -y install https://repo.ius.io/ius-release-el7.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install git224-all

ref. IUS repo

CentOS 7/8 set locale

user-pic
Vote 0 Votes

列出可用的 locale 清單
locale -a 或 localectl list-locales

在 CentOS 8 若安裝時沒有選中文,會看不到 zh_TW.utf8
它把語言包拆分了,要另外安裝
yum -y install glibc-langpack-zh langpacks-zh_TW

設定
localectl set-locale zh_TW.utf8
CentOS 7 需使用 localectl set-locale LANG=zh_TW.utf8
不然會出現錯誤訊息 Failed to issue method call: Invalid Locale data.

RHEL Switch to CentOS repo

user-pic
Vote 0 Votes

因為 RHEL 的 $releasever 的變數和 CentOS 不同,無法直接使用 CentOS repo,需將 repo 檔中的變數寫死後使用


以上是 7 版的 repo 檔,若是 8 版,把檔案裡面的 7 改成 8 即可
curl https://gist.githubusercontent.com/pankpan/1649b48550949ed022086172b990a2d7/raw/1afd6968c702346009f48ba1047a1af2a14be4ba/CentOS-Base.repo > /etc/yum.repos.d/CentOS-Base.repo
curl http://mirror01.idc.hinet.net/CentOS/RPM-GPG-KEY-CentOS-7 > /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
yum -y update

Installation source
http://mirror01.idc.hinet.net/CentOS/7/os/x86_64/

cURL --resolve

user-pic
Vote 0 Votes

curl 要測試自訂的域名及綁定 IP 通常是在 hosts 設定
curl 在 7.21.3 之後, 加了一個 --resolve 參數, 可以在本身綁定而不需修改 hosts

例:
curl --resolve domain.com:80:192.168.1.1 http://domain.com
curl --resolve domain.com:443:192.168.1.1 https://domain.com
它就會直接去連 192.168.1.1 而不會參考域名的解析

PHP 在 5.5.0 之後 curl_setopt 也加入 CURLOPT_RESOLVE 參數
$ch = curl_init("https://domain.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_RESOLVE, array("domain.com:443:192.168.1.1"));
echo curl_exec($ch);

CentOS 6 的 curl 版本是 7.19.7, 不支援, 需升級 libcurl 及 curl
rpm -ivh http://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1.rhel6.noarch.rpm
yum-config-manager --enable city-fan.org
yum -y update curl

CentOS 7 的 curl 版本是 7.29.0, 已有支援 --resolve, 但若想裝最新版的 curl, 還是可以裝 city-fan.org repo
rpm -ivh http://www.city-fan.org/ftp/contrib/yum-repo/rhel7/x86_64/city-fan.org-release-2-1.rhel7.noarch.rpm
yum-config-manager --enable city-fan.org
yum -y update curl

Caddy Web Server

user-pic
Vote 0 Votes

Caddy Web Server 目的是簡化 SSL 憑證的設定, 它可以做到自動化,
甚至可以幫你自動 Renew, 設定也很簡單, 很適合用在小型網站或測試、開發環境
在網站上選擇好 Plugins 後, 會產生一行安裝指令(如下面這行), 執行後會執行檔會在 /usr/local/bin/caddy,
它是 Go 寫的, 這個執行檔不需要其他相依的 Library
curl https://getcaddy.com | bash -s personal hook.service,http.authz,http.cache,http.expires,http.ipfilter,http.locale,http.login
其中 hook.service 是用來建立服務用的 (-service參數)

建立 Caddy config 及 log 目錄
mkdir /etc/caddy /var/log/caddy

Caddy config 範例檔 /etc/caddy/Caddyfile
有兩個域名, 都有 PHP (需跑 php-fpm 服務)
domain1.com 使用自動憑證, 有開 https 及 http, http 有加 rewrite rule
domain2.com 使用現有憑證, 只開 https

建立服務、啟用、啟動
caddy -service install -agree=true -http2 -quic -log /var/log/caddy/caddy.log -conf=/etc/caddy/Caddyfile
systemctl enable caddy
systemctl start caddy

Systemd 為了安全性因素, 預設 PrivateTmp=true
即每個 Service 都有自己的 /tmp,
真實位置是存在於像這樣的路徑 /tmp/systemd-private-291a89c46ea14fa282e95374a841ec4e-httpd.service-eYQNRI/tmp

例: 將 Apache 停用 PrivateTmp
sed -i s/PrivateTmp=true/PrivateTmp=false/ /lib/systemd/system/httpd.service
systemctl daemon-reload
systemctl restart httpd

Windows 10 的 Linux 子系統 (Windows subsystem for Linux, WSL) 因為不是走一般的開機流程,
所以服務都不會啟動, 也包含了 /etc/rc.local
若要在開啟 WSL 視窗時執行 rc.local, 做法如下(Ubuntu環境)

# 設定 sudo 免密碼
echo "yourusername ALL=(root) NOPASSWD: ALL" >> /etc/sudoers
# 在 bash.bashrc 最後觸發啟動 rc.local
echo "sudo /etc/rc.local &" >> /etc/bash.bashrc

建立 ssh host key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

建立 /etc/rc.local, 下面內容是啟動 sshd 及 Apache 的範例, 每開一次視窗, 就會被觸發執行.
加在這裡的 script, 需考慮到多開視窗, 就會啟動多次的情況, 所以用 pidof 判斷服務是否已經在跑了, 沒有才啟動服務.

範例:
#!/bin/bash
mkdir -p /run/sshd
pidof -s sshd > /dev/null || /usr/sbin/sshd
pidof -s apache2 > /dev/null || service apache2 start 2>/dev/null

Solve df hang/stuck

user-pic
Vote 0 Votes

若 Linux df 有 hang 住的狀況, 用這 script 可找出造成 hang 住的目錄
for i in `awk '{print $2}' /proc/mounts`
do
    echo $i
    ls $i
done
常見的狀況是有掛載 NFS 之類的遠端目錄, 但遠端沒有回應(網路不通或機器掛掉之類), 若是這種狀況, 可以用 umount -l
另一種情況是 /proc/sys/fs 下面出現異常
有遇過幾次 /proc/sys/fs/binfmt_misc 卡住
可以重啟服務解決
systemctl restart proc-sys-fs-binfmt_misc.mount

About this Archive

This page is an archive of recent entries in the Linux category.

Life is the previous category.

Misc is the next category.

Find recent content on the main index or look in the archives to find all content.

Linux: Monthly Archives

Monthly Archives