Category Archive Linux

Linux: ติดตั้งฟอนต์ภาษาไทย

วิธีติดตั้งฟอนต์ภาษาไทยหลังจากที่ลง Linux ทำแค่ขั้นตอนที่ 1 จริงๆ ก็ทำให้อ่านเว็บภาษาไทยได้แล้ว แต่ถ้าอยากให้เห็นเหมือนที่ดูใน windows อาจจะทำขั้นตอนอื่น ๆ เพิ่ม

  1. ติดตั้ง Fonts-TLWG
    sudo apt install fonts-thai-tlwg
  2. ติดตั้ง SiPA thai fonts
    sudo wget ftp://ftp.psu.ac.th/pub/thaifonts/sipa-fonts/*ttf -P /usr/share/fonts/truetype/thai
  3. ติดตั้ง xfonts-thai
    sudo apt install xfonts-thai
  4. ติดตั้งหลาย ๆ ตัวพร้อมกัน
    sudo apt-get install fonts-thai-tlwg xfonts-thai xfonts-thai-etl xfonts-thai-manop xfonts-thai-nectec xfonts-thai-poonlap xfonts-thai-vor
  5. ติดตั้งของ MicroSoft ( มีลิขสิทธ์นะ )
    sudo apt-get install msttcorefonts

มีหลายท่านที่ได้ช่วยเขียนคู่มือแบบละเอียดไว้ให้

Linux: reinstall Ubuntu

อยู่ ๆ อูบุนตูมันเป็นตู่อะไรก็ไม่รู้ รวน ๆ แปลกอยากจะลงใหม่แต่ว่าไม่อยากที่จะทำอะไรมาก ขี้เกียจจะลงอะไรใหม่ ไปเจอวิธีที่ซ่อมให้กลับมาใช้ได้

  1. sudo apt-get clean
  2. สร้างไฟล์ reinstall_all.sh เช่น nano reinstall_all.sh แล้วใส่เนื้อหา
    #!/bin/bash
    for pkg in dpkg --get-selections | awk '{print $1}' | egrep -v '(dpkg|apt|mysql|mythtv)' ; do apt-get -y –force-yes install –reinstall $pkg ; done
  3. sudo chown root:root reinstall_all.sh
  4. sudo chmod 755 reinstall_all.sh
  5. sudo ./reinstall_all.sh
  6. รอตอบคำถามบางอย่าง

ดูจากเวลาแล้วใช้เวลาเยอะอยู่เหมือน แต่ก็ดีกว่ามาไล่เซ็ตหลาย ๆ อย่างใหม่ตั้งแต่ต้น ขอบคุณ
Force reinstall of all Ubuntu packages

แก้เข้า linux / windows แล้วเวลาเปลี่ยน

ถ้าเครื่องลง dual boot หลังไปใช้ linux แล้วกลับมาบูทเข้า windows จะพบว่าเวลามันจะเปลี่ยนไปหลายชั่วโมง โดยที่ไม่ได้ตั้งเวลาใหม่แต่อย่างใด ทั้ง ๆ ที่ตอนใช้ลินุกซ์เวลาก็ถูกต้องนะ

ปัญหาแบบนี้สามารถแก้ได้ง่าย ๆ โดยพิมพ์ใน terminal ด้วยสิทธิ์ root

timedatectl set-local-rtc 1

จากนั้นปัญหานี้จะหมดไปละ

สาเหตุ ในคอมพิวเตอร์มีนาฬิกาอยู่ 2 ตัว คือ 1 นาฬิกาบนแมนบอร์ด ( bios / cmos / uefi ) 2 นาฬิกาบนระบบปฏิบัติการ โดยค่าตั้งต้น linux จะคิดว่านาฬิกาบนเมนบอร์จะเป็นเวลาตาม UTC ไม่ใช่เวลาท้องถิ่น แต่วินโดวน์จะคิดว่าเป็นเวลาท้องถิ่น เวลาที่เราใช้ linux หรือ windows ต่างก็ sync เวลาใหม่ลงไปที่นาฬิกาบนแมนบอร์ด แต่เพราะว่าทั้งสองตัวเข้าใจว่าเป็นจึงเห็นเวลาเปลี่ยนไป เปลี่ยนมา

ขอบคุณวิธีและคำอธิบายจาก Wrong Time Displayed in Windows-Linux Dual Boot Setup? Here’s How to Fix it

เซ็ต SSL เร็วและฟรีใน 5 นาที

ตั้งแต่ google ใช้ SSL ออกมาเป็นเงื่อนไขในการทำ SEO ทำให้ทุกเว็บต้องมาเปิดใช้ SSL ไม่งั้นอันดับจะตกลง

สามารถขอ SSL ฟรีได้ง่ายๆ โดยใช้บริการของ http://Let’s Encrypt’s เปิดให้ใช้ฟรีหรือจะบริจาคเล็กน้อยตามศรัทธาก็ได้ การติดตั้งง่ายๆ โดย

  • Web Hosting who support Let’s Encrypt จะเป็น host ที่ support อยู่แล้วสามารถเปิดใช้ได้เลยอย่าง hostgator.com
  • ใช้ certbot instructions เลือกว่าใช้ Apache, Haproxy, Nginx, Plesk และ os ที่ใช้อย่าง Arch Linux, CentOS 6, Debian, Fedora, FreeBSD, Gentoo, macOS, OpenBSD 6.0+, openSUSE, RHEL, Ubuntu, Windows มันจะบอกวิธิติดตั้งมาให้ภายใน 5 นาทีเว็บก็ใช้ SSL ได้เลยทุก domain !!!

อย่าง server ผมก็ทำแค่ SSH เข้าไปที่ host แล้วพิมพ์ตาม

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --apache
sudo certbot certonly --apache

แล้วทดลองเรียกเว็บโดยใช้ SSL เท่านั้นเอง ง่ายจริงๆ

ลง google chrom บน linux kali

ถึง kali จะมี firefox esr (Firefox Extended Support Release) แถมมาให้แต่ยังไงบางอย่างใช้ Google Chrome กับ extension บางอย่างมันสดวกกว่าอยู่ดี แต่ kali ลงยากเย็นกว่าปกติเลยลงวิธีติดตั้งไว้หน่อย

  1. ทำตามประเพณีก่อน[code language=”text”]sudo apt-get update[/code]
  2. โหลดตัวติดตั้งมาจาก google โดยตรง[code language=”text”]sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb[/code]
  3. เพราะว่าเป็นตัวติดตั้งของ debian จึงต้องลง gdebi package manager มาช่วย[code language=”text”]sudo apt-get install gdebi -y[/code]
  4. เริ่มติดตั้งกันซะที[code language=”text”]sudo gdebi google-chrome-stable_current_amd64.deb[/code]
  5. เปิด program โดย
    [code language=”text”]google-chrome[/code]
    สำหรับ user ทั่วไป
    [code language=”text”]google-chrome -no-sandbox[/code]
    สำหรับ root (อันตรายเพราะไปปิดการกักกันไม่ให้เว็บสามารถเข้าไปใช้ส่วนอื่นของเครื่องได้)

ตั้งให้เข้า windows แทน linux

หลังจากลง linux แล้วมันจะจัดการให้เข้ามาใช้ linux เป็นค่าเริ่มต้น แต่ถ้าเราใช้ windows เป็นหลักมันจะสดวกกว่าถ้า grub มันจะ boot เข้า windows ไปเองถ้าเราไม่ได้เลือก

สาย gui อาจจะใช้ Grub Customizer แต่จริงๆแล้วไม่จำเป็นต้องลงโปรแกรมตัวนี้เลย แค่เข้าไปแก้ตัวเลขตัวเดียวเท่านั้นเอง ( แถม linux อย่าง kali ยังไม่ยอมให้ลงอีกตะหาก )

  1. จำว่าเมนู windows มันอยู่ลำดับที่เท่าไหร่ แต่เริ่มนับจาก 0 นะ
  2. สำรอง config ไว้ก่อนโดยใช้ sudo cp /etc/default/grub /etc/default/grub.bak
  3. เปิด grub มาแก้โดยsudo vim /etc/default/grub หาบรรทัด GRUB_DEFAULT=0 เปลี่ยนตัวเลขเป็นลำดับเมนูของ windows ย้ำอีกทีว่านับจาก 0 ( ถ้าเป็น linux บางตระกูลให้ใช้ nano แทน vim )
  4. แก้เวลารอโดยเปลี่ยน GRUB_TIMEOUT=5 เป็น 3 ก็พอ
  5. บันทึกโดยกด
    1. Esc
    2. :qw
  6. ทำการ update grub โดย sudo update-grub

จะเห็นว่าจริงๆก็ไม่ยากเลย อ่านเพิ่มเติม How do I change the GRUB boot order?

ลง kali จาก usb

โดยปกติตัว linux จะลงยากกว่า os ระบบอื่น ใครเคยลง windows มาโดยเฉพาะ windows 10 แล้วจะงงกับหน้าจอการติดตั้ง ถึงตอนหลังจะมีการพยามทำหน้าตาเป็นมิตรกับผู้ใช้มากขึ้นก็ตาม แต่ยังยากสำหรับมือใหม่ๆ อยู่ดี

โดยปกติเวลาที่ผมลง linux หรือ windows จะใช้โปรแกรม YUMI – Multiboot USB Creator ทำ usb ให้ติดตั้งแทนแผ่น cd / dvd ได้ (เครื่อง notebook ที่ใช้เครื่องหลังๆ มันไม่มีเครื่องอ่านแผ่นติดมาให้แล้ว แผ่นก็หาซื้อยากขึ้นทุกวัน) แต่ตัว yumi ไม่สามารถทำ usb boot จาก flash drive กับตัว Kali Linux (เพื่อนตั้งชื่อเล่นให้ว่า กาลี ) ได้เขียน image ลงไปแล้วสามารถใช้เป็น linux live cd / live dvd แต่กลับไม่สามามารถติดตั้งโดยใช้เมนู installer ตัวไหนที่มีมากับ iso ติดตั้งจนใช้งานได้จริงๆได้เลย แม้แต่การเขียนลงบนแผ่น DVD จริงๆ ก็ติดตั้งไม่สำเร็จ

ผมทดลองโปรแกรม bootable usb หลายตัวจนเจอ Rufus ที่ทำงานได้สำเร็จ โดยต้องมีการ config แบบพิเศษกันเล็กน้อยโดย

Device
เลือก usb drive เปล่าๆ ที่ต้องการใช้เป็นตัวติดตั้ง kali linux (ข้อมูลข้างในจะโดน format ลบออกไปจนหมด ให้ย้ายไฟล์ที่สำคัญๆ ออกไปก่อนที่จะกดอะไรต่อไป)
Partitition scheme and target system type
เลือกให้ตรงกับระบบของเครื่องที่ใช้ ของผมเลือกเป็น GPT parttion scheme for UEFI
File system
เปลี่ยนเป็น NTFS
Format Option
เลือก Quick format ก็พอ
Create a bootable disk using
เลือก iso และคลิกภาพ cd drive ด้านหลัง browse kali linux ที่โหลดมาจาก Kali Linux Downloads

กด Start ได้เลย จะมี bock ขึ้นมาถาม ให้เลือกWrite in DD Image mode จะทำให้ไม่เจอ message Debootstrap error Failed to determine codename for the release

จากนั้น reboot เครื่องเลือกใน bios ให้ boot จาก usb ถ้าไม่รู้ว่ากดปุ่มไหนดูได้จาก Hot keys for BootMenu / BIOS Settings เครื่องผมกลับต้องเลือก flash drive จาก LEGACY BOOT แทน UEFI BOOT ซะงั้น ลง kali ไปตามปกติ ระวังเรื่อง partion ให้ดี ถ้าไม่อยากลบข้อมูลสำคัญๆ ที่มีอยู่เดิม หลังติดตั้งเสร็จแล้วแก้ปัญหาภาษาไทยเป็นสี่เหลี่ยมโดยใช้คำสั่ง [code language=”text” title=”command fixed thai language”]sudo apt-get install xfonts-thai msttcorefonts[/code] (เกือบลงใหม่ เพราะคิดว่าติดตั้งไม่สมบูรณ์ ดีที่เห็นจากคนอื่นซะก่อน) และถ้ายังใช้ windows เป็นหลักให้อ่าน ตั้งให้เข้า windows แทน linux เสร็จแล้วใช้เจ้า kali อย่างมีสตินะครับ

git: private repository โดยใช้ synology server

เดี่ยวนี้ถ้าต้องการจะใช้ git repository ก็แค่สมัครสมาชิกเว็บอย่าง github แค่กรอกข้อมูลใน Join GitHub ไม่นานก็ได้พื้นที่สำหรับ backup ข้อมูลได้แล้ว ติดแค่ว่าถ้าเป็น project ภายในหรือเป็นเรื่องเกี่ยวกับธุรกิจการจะเปิดให้คนอื่นใครก็ได้เข้ามาดู source code คงจะไม่ดีแน่ ทำให้ต้องจ่ายค่าบริการเพื่ิอสร้างเป็น private repository หรืออีกทางเลือกคือ สร้าง git server ไว้ใช้เอง

ผมมีตัว nas ของ synology อยู่แล้วเลยใช้มันเป็นที่สำรองข้อมูลซะเลย จะได้ไม่ต้องสร้าง linux มาทำเป็น server อีกตัว

  1. login เข้า synology Control Panel โดยใช้ user ที่มีสิทธิ administrator
  2. ลง git package โดยวิธี Install or Buy Packages
  3. set user permission ให้ใช้ group git ได้โดยวิธี Manage Groups
  4. เปิดให้ใช้ ssh ได้โดยวิธีตาม Terminal
  5. SSH login synology nas ได้โดยวิธี How to login to DSM with root permission via SSH/Telnet
  6. สร้าง folder ไว้เก็บข้อมูล git ทั้งหมดและเซ็ทสิทธิไว้
    # Create the directory
    mkdir /volume1/git

    # folder owner and permission
    chown -R admin:administrators git
    chmod -R 772 git

  7. เตรียมการสำเร็จแล้ว เราสามารถสร้าง repository ขึ้นมาใหม่ได้โดย
    cd /volume1/git
    git init --bare --shared [my-project].git

    โดยแทนที่

    [my-project]

    โดยชื่อ git project

    ในขั้นตอนนี้ folder [my-project].git จะถูกสร้างขึ้นมาใหม่ใน /volume1/git/ และจะเห็นข้อความประมาณ Initialized empty shared Git repository in /volume1/git/snippets.git/ ก็เป็นอันเสร็จกับทางฝั่ง git server แล้ว

  8. จากนั้นก็ clone git ในเครื่อง client (ฝั่ง local) ได้โดยใช้คำสั่ง
    git clone ssh://[git-user]@[syn-ip-addr]/volume1/git/[my-project].gitโดย
    [git-user]
    user ที่เซ็ตไว้
    [syn-ip-addr]
    ip ของตัว nas synology
    [my-project]
    path และชือ repository

    เช่น
    git clone ssh://[email protected]/volume1/git/chromeExtensions/pittBookmarks.git

อาจจะดูยุ่งยากแต่ repository ต่อไปแค่ทำ 2 ขั้นตอนสุดท้าย ก็สามารถทำงานอย่างเป็นส่วนตัวได้แล้ว

ทำ Virtual Host ใน Apache

เพราะว่าต้องแยกส่วนของ frontend และ backend ไว้คนละ server เพื่อความสดวกและปลอดภัย โดยทั้งคู่จะติดต่อกันผ่านทาง api แต่เวลาเขียนมีคอมพิวเตอร์แค่เครื่องเดียว ตามปกติสามารถทำได้โดยแยกงานไว้คนละ folder และเพื่อให้เหมือนของจริงยิ่งขึ้นก็ใข้วิธีทำ Virtual Host แยกออกเป็น 2 เซิร์ฟเวอร์ (ถึงจะแค่เครื่องจำลองก็เถอะ)

ทำได้โดยการเปิดไฟล์ C:\xampp\apache\conf\extra\httpd-vhosts.conf และเพิ่ม[code language=”text” title=”C:\xampp\apache\conf\extra\httpd-vhosts.conf”]

## backend
Listen 81
<VirtualHost *:81>

CustomLog "D:\xampp\htdocs\cms_backend\logs\apacheAccess.txt" common
ErrorLog "D:\xampp\htdocs\cms_backend\logs\apacheError.txt"

php_flag display_errors on
php_flag log_errors on
php_value error_log "D:\xampp\htdocs\cms_backend\logs\phpError.txt"
php_value error_reporting 2147483647

DocumentRoot "D:\xampp\htdocs\cms_backend\www"

ServerAdmin [email protected]
ServerName backend.localhost

</VirtualHost>

## frontend
Listen 82
<VirtualHost *:82>

CustomLog "D:\xampp\htdocs\cms_frontend\logs\apacheAccess.txt" common
ErrorLog "D:\xampp\htdocs\cms_frontend\logs\apacheError.txt"

php_flag display_errors on
php_flag log_errors on
php_value error_log "D:\xampp\htdocs\cms_frontend\logs\phpError.txt"
php_value error_reporting 2147483647

DocumentRoot "D:\xampp\htdocs\cms_frontend\www"

ServerAdmin [email protected]
ServerName frontend.localhost

</VirtualHost>[/code]

อธิบาย

Listen
คือหมายเลขพอร์ตที่จะให้รอรับ request อย่าตั้งให้ชนกับตัวอื่น
CustomLog, ErrorLog
คือไฟล์ log ที่แยกออกมาของแต่ละ virtual host โดยสามารถอ่านคู่มือได้จาก Log Files
php_flag, php_value
คือ การปรับแต่ง php เป็นพิเศษสำหรับ server ตัวนี้เท่านั้น
DocumentRoot
คือ folder ที่ไว้เก็บ php ที่เราตั้งใจแยกไว้ เป็น code ชุดเดียวกับที่เราจะเอาขึ้น server จริง
ServerAdmin, ServerName
คือ ข้อมูล server แต่ละตัว

ทดสอบโดย restart apache ใหม่และเปิดเว็บ