發表文章

設定 RPi 為存取點 Access Point (AP)

全新的 RPi Image 設定 在設定之前,請先確保您的 RPi 已經正確連接並且可以進行 SSH 登入。 登入 ssh 後會顯示: Wi-Fi is currently blocked by rfkill. Use raspi-config to set the country before use. 要先修改RPi設定 sudo raspi-config 選 5 Localisation Options Configure language and regional settings 再選 L4 WLAN Country Set legal wireless channels for your country 再選 tw Taiwan 需要安裝以下軟體: 安裝 hostapd 和 dnsmasq: sudo apt update sudo apt upgrade -y sudo apt install hostapd sudo apt install dnsmasq 修改 /boot/config.txt 確認不要禁用 Wi-Fi 功能 sudo nano /boot/config.txt 這行要長這樣,或是不要有這行 # dtoverlay=disable-wifi 設定 dnsmasq 編輯配置文件: sudo nano /etc/dnsmasq.conf 內容加: interface=wlan0 listen-address=192.168.222.1 bind-interfaces server=8.8.8.8 domain-needed bogus-priv dhcp-range=192.168.222.100,192.168.222.110,12h 設定 network interfaces 編輯配置文件: sudo nano /etc/network/interfaces 內容加: auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 192.168.222.1 netmask 255.255.255.0 gateway 19...

Fix error: postfix/sendmail MTA

錯誤訊息 error: postfix/sendmail[3354]: fatal: open /etc/postfix/main.cf: No such file or directory xxxxxxxxxxxxxxxxxxx from MTA 安裝 postfix 相關處理 sudo apt-get install postfix sudo nano /etc/postfix/main.cf sudo chmod 777 /etc/postfix/main.cf sudo postconf -n > /etc/postfix/main.cf sudo chmod 644 /etc/postfix/main.cf sudo systemctl status postfix sudo systemctl start postfix

安裝友善的 terminal 環境 on Ubuntu

安裝 zsh # 安裝 sudo apt install zsh -y # 預設改成使用 zsh chsh -s $(which zsh) 安裝 oh-my-zsh # 安裝 sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # 環境可以看到已成功安裝 oh-my-zsh env 安裝 fonts-powerline # 安裝 sudo apt install fonts-powerline -y 指令顯示執行時間 # 可查看有哪些佈景可以用 ls ~/.oh-my-zsh/themes/ # 查看使用哪一個 theme cat ~/.zshrc # 改該 theme 的參數 nano ~/.oh-my-zsh/themes/robbyrussell.zsh-theme # 加入以下指令 function preexec() { timer=${timer:-$SECONDS} } function precmd() { if [ $timer ]; then timer_show=$(($SECONDS - $timer)) if [[ $timer_show -ge $min_show_time ]]; then RPROMPT='%{$fg_bold[red]%}(${timer_show}s)%f%{$fg_bold[white]%}[%*]%f' else RPROMPT='%{$fg_bold[white]%}[%*]%f' fi unset timer fi } autoload -Uz add-zsh-hook add-zsh-hook preexec preexec add-zsh-hook precmd precmd # Done 自動建議指令 Option 1: git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions #...

使用金鑰檔案進行自動解鎖 LUKS 加密磁區 on Ubuntu

注意事項 該硬碟會在該電腦自動解鎖,所以電腦登入帳號密碼要保管好 別台電腦沒設定過的,一樣要使用密碼 環境 作業系統:Ubuntu 24 目標 讓系統快照備份軟體 timeshift 可以在電腦重開機後,即可存取加密的備份硬碟 首先,生成一個密鑰檔案來代替手動輸入的密碼 sudo dd if=/dev/urandom of=/root/.luks-key bs=4096 count=1 設置密鑰檔案的權限,只能被 root 用戶讀取 sudo chmod 600 /root/.luks-key 將這個密鑰檔案添加到 LUKS 加密磁區 ( sdX 應替換為實際的 LUKS 加密磁區裝置名稱(例如 /dev/sda2 )) sudo cryptsetup luksAddKey /dev/sdX /root/.luks-key 查詢加密裝置的 UUID,等一下要使用 sudo blkid /dev/sdX 編輯 /etc/crypttab 文件 sudo nano /etc/crypttab 加入以下文字,告訴系統在開機時自動解鎖磁區 ( luks_device_name 是加密裝置的名稱,可以取自己想要的名稱, YOUR-DEVICE-UUID 是剛剛查詢到的 UUID) luks_device_name UUID=YOUR-DEVICE-UUID /root/.luks-key luks 更新 initramfs 讓變更生效 sudo update-initramfs -u 重開機,檢查加密磁區是否在開機時自動解鎖 sudo reboot

Ubuntu 24 上安裝 Docker 官方來源的 Docker

更新系統套件 sudo apt update sudo apt upgrade -y 移除舊版 Docker(若已安裝) sudo apt install -y ca-certificates curl gnupg 安裝套件允許使用 HTTPS 傳輸,及 GPG 金鑰 sudo apt install -y ca-certificates curl gnupg 新增 Docker 的官方 GPG 金鑰 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg 設定 Docker 的下載點 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 安裝 Docker Engine 、docker compose 和相關套件 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 確認是否已安裝 Docker sudo docker --version 應該要看到類似這樣 Docker version 27.4.0, build bde2b89 試試執行 Docker sudo docker run --rm hello-world 應該要看到類似這樣 Hello from Docker! This mess...

如何加入使用者的 ssh 金鑰到 ubuntu 伺服器

注意事項 金鑰名稱可保持 id_rsa.開頭,eg. "id_rsa.target_device",以後使用上比較直覺 -C: 註解基本上人物是必需,至少知道是誰的金鑰,伺服器管理員好管理。也可以視情況加入是哪一台電腦、在哪一個位置等等 環境 自己電腦:MacOS 14.4.1 伺服器電腦:Ubuntu 24 查詢自己電腦是否已有金鑰 ls -alt ~/.ssh 如果看到 id_rsa 和 id_rsa.pub 這兩個檔為一組,則表示已存在至少一組金鑰。pub是公鑰,另一個是私鑰。 沒有金鑰的,要先產出一組 ssh-keygen -t rsa -b 4096 \ -f ~/.ssh/YOUR_ID_RSA_FILE_NAME \ -C "your_email@example.com" -f: 設定要產出金鑰的檔案位置跟檔名 -C: 該公鑰文件裡最後面會留下的註解,至少要方便辨別是哪位使用者的 接下來要輸入你想設定的密碼。以後方便不用打密碼的話,直接 Enter Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): 這樣就有一組金鑰了 把剛產出的公鑰加入到伺服器未來要登入的帳號 如果你的伺服器支援 ssh-copy-id,這是最簡單的方法: ssh-copy-id -i ~/.ssh/YOUR_ID_RSA_FILE_NAME.pub -p 22 \ YOUR_SERVER_ACCOUNT@SERVER_IP_OR_ADDRESS -i: 要上傳的檔案來源位置 -p: 伺服器監聽的 ssh port,預設是 22 輸入遠端電腦帳號的密碼,正確的話會長類似這樣: Number of key(s) added: 1 Now try logging into the machine, with: "ssh -i ~/.ssh/YOUR_ID_RSA_FILE_NAME -p 22 'YOUR_SERVER_ACCOUNT@SERVER_IP_OR_ADDRESS...

解決 Docker 官方的 MySQL 8 執行 INSERT 超級慢的問題

原本 insert 20 筆資料會耗時 1秒,改完後,insert 500 筆不到 0.1 秒! 注意事項 雖然以下不會執行sql語法,但動到資料庫參數,要確認隨時可以回復到可用狀態。 如果已有 my.cnf 檔,就建立另一個檔 環境 官方的 MySQL 8.4 Docker image ( FROM mysql:8 ) 解法 加入一個自定義 my.cnf 檔在 /etc/mysql/conf.d/ ,內容: [mysqld] # 通常設定為系統 RAM 的 60-80%。這裡數值約16G innodb_buffer_pool_size = 17089934592 # 增大此緩衝區可以提高寫入性能,特別是在處理大量寫入時,會減少磁碟寫入的頻率。 # 這裡數值約256MB innodb_log_buffer_size = 268217728 # 是否在每個事務提交後同步二進制日誌(Binary Log)。 # 設置為 1 會增加每個事務的成本,設為 0 或 100 可以提高寫入性能。 sync_binlog = 0 # 事務提交時,何時將日誌寫入磁碟的選項。設為 0 可以減少事務提交的 I/O 負擔, # 但會犧牲持久性,可能遺失最近 1 秒內的事務記錄。 innodb_flush_log_at_trx_commit = 0 # 停用二進制日誌(Binary Log) skip-log-bin = 0   References ChatGPT 解决连接Docker mysql容器慢的问题 MySQL 8.0 执行 insert 插入数据非常缓慢的问题及解决方法   以下僅為測試數據 用以下參數,insert 500 筆的時間: 0 分 10.40642 秒 [mysqld] innodb_buffer_pool_size = 17089934592 innodb_log_buffer_size = 268217728 # sync_binlog = 0 innodb_flush_log_at_trx_commit = 0 skip-log-bin = 0 用以下參數,insert 500 筆的時間:...