5/19/2025

ติดตั้ง Proxmox Backup Client ใน server Ubuntu 18.04

Ubuntu 18.04

sudo add-apt-repository ppa:bkryza/onedata-1909-bionic
sudo apt update
sudo apt install -y libfuse3-3 qrencode
wget http://download.proxmox.com/debian/pbs/dists/buster/pbs-no-subscription/binary-amd64/proxmox-backup-client_1.1.14-1_amd64.deb
sudo dpkg -i proxmox-backup-client_1.1.14-1_amd64.deb

rsync ข้อมูลจากเครื่อง 1 ไปอีกเครื่อง 1 ใน Ubuntu

 ที่เครื่อง X1 ที่ต้องการเอาข้อมูล
1. แก้ไฟล์ sshd_config

  1. nano /etc/ssh/sshd_config

เพิ่ม
PermitRootLogin yes

และใส่ # ไม่ใช้งานหน้า
#PermitRootLogin prohibit-password
#StrictModes yes

restart service
systemctl restart sshd

ที่เครื่องใหม่ X2
2. ทดลอง ssh ด้วย user root ว่าเข้าไปที่ X1 ได้หรือไม่
3. คำสั่ง
ทดลอง
  1. rsync -aAXv -e "ssh -p 22" root@IP_X1:/DATA/e-document/#2025#/* /DATA/e-document/#2025#/

ถ้าจะทำจริง ๆ
  1. rsync -aAXv -e "ssh -p 22" root@IP_X1:/DATA/e-document/* /DATA/e-document/
ไม่ต้องใส่ --numeric-ids เพราะจะทำให้ group ได้ไม่ตรงกัน เนื่องจาก id ของเครื่องเก่าและใหม่ไม่ตรงกัน

ตรวจสอบสิทธิ์ ด้วย ls -la ว่า group และสิทธิ์ ถูกต้องหรือไม่
ls -la /DATA/e-document/#2025#/001-099/SO25-001/

symbolic-link Ubuntu

 ให้รูปจาก Datacenter ดึงมาแสดงใน Intranet โดยการสร้าง symbolic-link
ใช้คำสั่ง

  1. ln -s /DATA/Asset/ /var/www/

จะได้
  1. ls -la
  2. lrwxrwxrwx  1 root root   12 May 14 10:15 Asset -> /DATA/Asset/

คำอธิบาย
ln -s /ปลายทางของไฟล์ที่จะ link ไป/ /ที่อยู่ของ link/

5/15/2025

Proxmox VE old images container Download.

 Proxmox VE old images container Download.

http://download.proxmox.com/images/system/

ปิด auto add printer ใน network เข้า debian auto

 ปิด auto add printer ใน network เข้า debian auto
แนวทางแก้ไข: "ปิด auto-add แต่ยังให้ add เองได้"
คุณสามารถ เปิด cups-browsed แต่สั่งให้มันไม่ auto-add printer ได้ โดยแก้ไฟล์ cups-browsed.conf
1. แก้ไขไฟล์ตั้งค่า:

sudo nano /etc/cups/cups-browsed.conf

2. ค้นหาบรรทัดที่เกี่ยวกับ BrowseRemoteProtocols และ CreateIPPPrinterQueues
ตั้งค่าแบบนี้:
BrowseRemoteProtocols none
CreateIPPPrinterQueues No

ความหมาย:
BrowseRemoteProtocols none: ไม่ต้องค้นหาเครื่องพิมพ์จาก network
CreateIPPPrinterQueues No: ไม่ต้องสร้าง printer queue อัตโนมัติ

3. บันทึกไฟล์ แล้วรีสตาร์ท cups-browsed และ cups
sudo systemctl restart cups-browsed
sudo systemctl restart cups

4. แล้ว Add printer ที่ต้องการใช้งานเอง โดย
connect ผ่าน /run/cups/cups.sock ที่หน้าโปรแกรม Printer

Proxmox Virtual Environment(PVE) QEMU Guest Agent Install

 Proxmox Virtual Environment(PVE) QEMU Guest Agent Install

sudo apt install qemu-guest-agent
systemctl enable qemu-guest-agent
systemctl start qemu-guest-agent
systemctl status qemu-guest-agent


แล้วไปเปิด QEMU Guest Agent Enabled ใน Option ของ Host

Windows Server 2003 Active Directory (AD) ใช้กับ Ubuntu Join domain ได้สูงสุด

 Windows Server 2003 Active Directory (AD) ใช้กับ Ubuntu เพื่อ join domain ได้ จำกัดอยู่ที่บางเวอร์ชันของ Ubuntu เท่านั้น เนื่องจาก Windows Server 2003 ใช้ SMB1 และ LDAP แบบเก่า ซึ่งถูกเลิกสนับสนุนในเวอร์ชัน Ubuntu ที่ใหม่กว่าเพื่อความปลอดภัย
Ubuntu เวอร์ชันที่ยังสามารถ join domain กับ Windows Server 2003 ได้ (โดยทั่วไป):

- Ubuntu 12.04 LTS
- Ubuntu 14.04 LTS
- Ubuntu 16.04 LTS (อาจต้องปรับแต่งเพิ่มเติม)

Ubuntu 18.04 ขึ้นไป เริ่มมีปัญหาเข้ากันไม่ได้โดยตรงกับ Windows Server 2003 AD เพราะ:
Ubuntu ใช้ Samba 4 ที่ตั้งค่าเริ่มต้นปิด SMB1
LDAP/NTLMv1 ถูกปิด ระบบความปลอดภัยและการเข้ารหัสมีการปรับให้รัดกุมขึ้น

ถ้าต้องใช้ Ubuntu ที่ใหม่กว่า:
ยังสามารถ พยายาม join domain ได้โดยการบังคับให้เปิด SMB1 และ NTLMv1 เช่น:
ปรับ smb.conf ให้รองรับ SMB1 (client min protocol = NT1)
แก้ krb5.conf และ nsswitch.conf ให้รองรับ Kerberos แบบเก่า
แต่ ไม่แนะนำอย่างยิ่ง ใน production เนื่องจากความเสี่ยงด้านความปลอดภัย

สรุป:
Ubuntu ที่แนะนำสุดท้ายสำหรับใช้งานร่วมกับ Windows Server 2003 AD คือ Ubuntu 16.04 LTS
เวอร์ชันใหม่กว่านั้นอาจทำงานไม่ได้เลยหรือทำได้แต่ต้องปรับแต่งเสี่ยง

Hosting สำหรับตรวจสอบ Log mail ถูก Block

 1. สำหรับ ตรวจสอบว่า IP ไปหา Server อีกฝั่งได้หรือไม่ ลองจาก hosting และเครื่องเรา

ถ้าเครื่องเราได้ แต่ Hosting ไม่ได้แสดงว่าถูก Block
telnet outlook-com.olc.protection.outlook.com 25
telnet mx.viettelidc.com.vn 25
ถ้าไม่ผ่าน
Trying 103.1.208.206...
Connected to mx.viettelidc.com.vn.
Escape character is '^]'.
451 Listed by SBL, see https://check.spamhaus.org/sbl/query/SBL531607
ZConnection closed by foreign host.
ถ้าผ่าน
telnet mx.viettelidc.com.vn 25
Trying 103.1.208.228...
Connected to mx.viettelidc.com.vn.
Escape character is '^]'.
220 smtp-01.viettelidc.com.vn Ready to receive mail -=- ESMTP
Connection closed by foreign host.
2. ดู log grep หาเมล์ที่เกี่ยวข้อง เพื่อดูผลจากไฟล์ log
exigrep "@dhl.com" /var/log/exim/mainlog
exigrep "@tinhtue.vn" /var/log/exim/mainlog

3. ดูว่าคำสั่งที่ทำอะไรไป ผลลัพธ์ได้อะไร
exinext mail@xxx
exinext mail@xxx
error
Transport: mx1.dhl.iphmx.com [68.232.135.103/NULL] error 0: H=mx1.dhl.iphmx.com [68.232.135.103]: SMTP error from remote mail server after initial connection: 554-esa.dhl.iphmx.com\n554 Your access to this mail
หรือ
Transport: mx.viettelidc.com.vn [103.1.208.228/NULL] error 0: H=mx.viettelidc.com.vn [103.1.208.228]: SMTP error from remote mail server after initial connection: 451 Listed by SBL, see https://check.spamhaus.org

Telegram Bot + Code php อ่านค่า ESP8266 + Bot Command

 Telegram Bot + Code php อ่านค่า ESP8266 + Bot Command
สร้าง Bot
1. เข้า Telegram ค้นหา BotFather
2. กด /newbot
3. ตั้งชื่อ ใหม่มีคำว่า bot ต่อท้าย เช่น scivalve_bot
4. copy HTTP API token ไว้สำหรับใช้งาน
5. กด t.me/ชื่อ Bot เพื่อใช้งาน Bot
6. กด Start
7.เข้าดู Chat ID โดย เข้า XXXXX คือ Token ที่ได้จากข้อ 4.
https://api.telegram.org/botXXXXX/getUpdates
พิมพ์แชทกับ Bot แล้ว Reface หน้า Web link จะได้ Chat ID หรือ สร้าง Group เพิ่ม Bot เข้า แล้ว พิมพ์ ข้อความเพื่อดู Chat ID

1. Code Auto notify
Code file Extranet --> telegram_bot_auto.php
การใช้งาน Run หน้า php หรือตั้ง Crontab เพื่อเรียกใช้งานไฟล์ จะส่งเข้า Grop ไอซ์ที

2. Telegram Command
จะใช้ Command ได้ต้องเปิด Set Webhook ก่อน โดยเข้าไปที่
XXXXX คือ Token ที่ได้จากข้อ 4.
URL คือ Link ไฟล์ php ที่ต้องการเรียกใช้งาน และต้องเป็น HTTPS เช่น https://web/telegram_bot_command.php
เช่น
https://api.telegram.org/botXXXXX/setWe ... ommand.php
เรียกใช้คำสั่ง เพื่อดึงค่ามาแสดง
คำสั่งที่ใช้งานได้ /ฝุ่น หรือ /PM หรือ /PM2.5
Code file Extranet --> telegram_bot_auto.php


Arduino Code ส่งค่าจาก ESP8266 ไปใช้งานด้วย PHP

 Code สำเร็จ
- ต่อ Wifi
- Web Server
- อ่านค่า PM2.5 จาก Sensor PMS7003
PMS.h ก่อนจะใช้งานได้ต้องติดตั้ง PMS Library โดย เข้าไปที่
Sketch --> Include Library --> Manage Libraries --> ค้นหา PMS และติดตั้ง PMS Library

  1.  
  2. //############# Connect WIFI ####################//
  3. #include <ESP8266WiFi.h>
  4. #include <ESP8266WebServer.h>
  5.  
  6. const char* ssid     = "XXX";
  7. const char* password = "XXX";
  8.  
  9. //############# PMS ####################//
  10. #include "PMS.h"
  11. PMS pms(Serial);
  12. PMS::DATA data;
  13. String pm25Str = "-";
  14.  
  15. //############### Web Server ######################//
  16. ESP8266WebServer server(80);
  17.  
  18. void handleRoot() {
  19.   server.send(200, "text/plain", pm25Str);  // Send updated PM2.5 value
  20. }
  21.  
  22. void setup() {
  23.   Serial.begin(9600);
  24.  
  25.   // Connect to WiFi
  26.   WiFi.begin(ssid, password);
  27.   while (WiFi.status() != WL_CONNECTED) {
  28.     delay(1000);
  29.     Serial.println("Connecting...");
  30.   }
  31.   Serial.println("Connected!");
  32.  
  33.   // Start Web Server
  34.   server.on("/", handleRoot);
  35.   server.begin();
  36.   Serial.println("HTTP server started");  
  37. }
  38.  
  39. void loop() {
  40. /*
  41.   // Read data from PMS sensor
  42.   if (pms.read(data)) {
  43.     Serial.print("PM 1.0 (ug/m3): ");
  44.     Serial.println(data.PM_AE_UG_1_0);
  45.     Serial.print("PM 2.5 (ug/m3): ");
  46.     Serial.println(data.PM_AE_UG_2_5);
  47.     Serial.print("PM 10.0 (ug/m3): ");
  48.     Serial.println(data.PM_AE_UG_10_0);
  49.     Serial.println();
  50.  
  51.     pm25Str = String(data.PM_AE_UG_2_5);
  52.   }
  53. */
  54.   if (pms.read(data)) {
  55.     pm25Str = String(data.PM_AE_UG_2_5);
  56.     Serial.print("Updated PM2.5: ");
  57.     Serial.println(pm25Str);
  58.   }
  59.  
  60.   server.handleClient(); // Process web requests
  61.   //delay(1000);
  62. }