Remote boot Linux Server with encrypted root disk

ใช้ guideline จาก

https://www.cyberciti.biz/security/how-to-unlock-luks-using-dropbear-ssh-keys-remotely-in-linux

สำหรับ config ให้เครื่อง “server” ที่ root disk ถูก encrypted เอาไว้ สามารถ decrypt และ boot ขึ้นมาได้โดยไม่ต้องไปใส่ passphrase ที่ console ของเครื่อง

วิธีการก็คือตอนที่เครื่อง boot ขึ้นมาโดยใช้ initramfs นั้น เดิมทีใน initramfs เฉพาะโปรแกรมที่จำเป็นสำหรับการ decrypt ตัว root disk และ load ส่วนของที่เหลือใน stage ถัดไป ก็ให้เพิ่ม ssh daemon เข้าไปด้วย เพื่อให้สามารถเข้าไป decrypt root disk โดยการ secure shell connect เข้าไปได้

ใช้งานได้สักพัก ก็รู้สึกขี้เกียจที่จะต้องไปกดปุ่มเปิดเครื่อง และป้อน passphrase เอง ก็เลยตัดสินใจ wake-on-lan สำหรับการ boot เครื่อง และ shell script ง่ายๆ สำหรับการ ป้อน passphrase ประมาณนี้

#!/bin/sh

SVR_MAC="00:11:22:33:44:55"	# MAC Address of the Server
SVR_IP="192.168.0.9"		# IP Address of the Server

DEV="eth0"					# Device name of Client for sending etherwake

DATE1=$(date)
D1=$(date +%s)

sudo etherwake -i ${DEV} ${SVR_MAC}

COUNT=0
while true; do
	fping -q ${SVR_IP}
	[ $? = 0 ] && break
	COUNT=$(expr ${COUNT} + 1)
	if [ ${COUNT} -gt 60 ]; then
		echo "Stage1: Wait too long..."
		exit
	fi
	printf "."
done
printf "\n$(date '+%Y-%m-%d %H:%M:%S') ${SVR_IP} is ready.\n"
echo -n "${PASS}" | ssh root@${SVR_IP} cryptroot-unlock 2> /dev/null 1> /dev/null

COUNT=0
while true; do
	echo "pwd" | ssh ${SVR_IP} 2> /dev/null 1> /dev/null
	[ $? = 0 ] && break
	COUNT=$(expr ${COUNT} + 1)
	if [ ${COUNT} -gt 60 ]; then
		echo "Stage2: Wait too long..."
		exit
	fi
	printf "+"
done
printf "\n$(date '+%Y-%m-%d %H:%M:%S') ${SVR_IP} ssh is ready.\n"

DATE2=$(date)
D2=$(date +%s)
ACTIVATE_TIME=$(expr ${D2} - ${D1})

echo "Started At    : ${DATE1}"
echo "Ended At      : ${DATE2}"
echo "Activate Time : ${ACTIVATE_TIME} secs"

opensource inventory management

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

ใน กลุ่ม sysadmin ของ reddit มีคำตอบที่น่าสนใจอยู่

ดุเหมือนว่า อาจจะต้องหาเวลาไปลองใช้ GPLI กับ snipeit ดูบ้าง

https://github.com/glpi-project/glpi

https://github.com/snipe/snipe-it

pveperf

root@pve:~/bin# pveperf
CPU BOGOMIPS: 83003.52
REGEX/SECOND: 2384246
HD SIZE: 93.93 GB (/dev/mapper/pve-root)
BUFFERED READS: 468.40 MB/sec
AVERAGE SEEK TIME: 0.09 ms
FSYNCS/SECOND: 3084.65
DNS EXT: 83.00 ms
DNS INT: 32.71 ms (cjv6.net)

วันก่อนน่ะครับ

วันก่อนน่ะครับ อยากได้ sdcard แบบขนาดปกติมาใช้งานกับ บอร์ด raspberry pi รุ่นเก่าหน่อย มันใช้ SDCARD interface ไม่ใช่ mini sdcard ไม่ได้ต้องการ ขนาดเยอะๆ หรือความเร็วสูง card เดิมที่ใช้งานอยู่ก็แค่ 8GB ก็พอแล้วมียังมีเนื้อที่เหลือ

ลองไปหาดูจาก advice กับ jib ก็มีขนาด 16 หรือ 32GB up ก็เลยลองไปดูที่ lazada กับ shopee ต่อ ซึ่งก็ขนาดไม่ต่างกัน แต่ราคาถูกกว่าประมาณ 1/3 ก็เลยลองสั่งมาจาก lazada ดู สั่งมา 3 card จ่ายรวมค่าส่งไปประมาณ 150 บาท

SD Card สั่งจาก lazada

ได้ card มาก็เอามาเขียน image ของ raspbain เข้าไป ตอนเขียนไม่มีปัญหา เขียนได้ แต่ boot ไม่ขึ้น

ลองเอา card ใหม่มา มัน format มาเป็น FAT32 ให้ก็ลอง copy ข้อมูลจากเครื่องลงไปดู ก็ดูดี พอเขียนเต็มเนื้อที่มันก็บอกว่าเต็ม เขียนต่อไม่ได้ ดูใน directory tree ก็มีรายการไฟล์และไดเรคตอรี่ถูกต้อง แต่พอลองอ่านไฟล์ดู ข้อมูลผิดทั้งหมด

ก็เลยลองเขียน script เพื่อทดลอง เขียนเป็น block ขนาด block ละ 10MB แล้วอ่านกลับ แล้วเอา md5sum ตรวจสอบดู

script สำหรับตรวจสอบ sdcard ว่าใช้งานจริงได้เท่าไหร่

เอามาทดสอบดู

ปรากฎว่าเฉพาะ 120MB แรกเท่านั้นที่อ่านข้อมูลกลับได้ถูกต้อง

สรุป อย่าไปเชื่อว่าของถูกๆจาก lazada จะใช้งานได้จริง จนกว่าจะตรวจสอบก่อน

ต้องกลับไปซื้อจาก advice ใหม่ซึ่งต้องรออีกหลายวัน ปัญหาของการซื้อจาก advice หรือ jib ก็คือ ราคาของ mini sdcard มันจะถูกกว่า sdcard ที่ขนาดเดียวกันอยู่ราวๆครึ่งนึง แต่ถ้าซื้อแบบ mini มา มันก็ใช้งานกับ raspberry pi รุ่นเก่าไม่ได้ ถ้า mini sdcard ไม่ได้ให้ adapter สำหรับแปลงเป็น sdcard ให้มาด้วย

ตอนนี้ก็เลยคิดว่า จะเอา adapter ของ sdcard ที่ซื้อมาจาก lazada นี่แหละไปใช้งานแทน อย่างน้อยก็พอได้ใช้ประโยชน์บ้าง

ส่วนทางร้านนั่นก็ review ไปแล้ว

Am I stupid? Yes you are.

WordPress update Plugins/Theme สามารถใช้ FS_METHOD == ‘direct’ ได้
หลังจากงมหาวิธีการใช้ ssh มานานแล้วไม่ work สักที -_-“