Debian บน AWS EC2

Debian บน AWS EC2

วิธีติดตั้งระบบปฏิบัติการ Debian บน AWS EC2 วิธีการเชื่อมต่อผ่าน SSH บน VSCode การเพิ่ม Super User เข้าไปในกลุ่ม sudo และตกแต่งด้วย Oh-My-Zsh

ติดตั้ง Debian บน AWS EC2

AWS EC2

ล็อกอินเข้าไปที่ AWS เลือก EC2

AWS EC2
AWS EC2

Launch instance

ในหน้าจอ EC2 จะเห็นปุ่มสีส้ม Launch instance ให้คลิ๊กปุ่มนี้ครับ

Launch instance
Launch instance

เลือก Debian 10 ซึ่งมีอยู่ Debian เดียวครับ

Select Debian
Select Debian

RAM 4 GB

เนื่องจากผมต้องการทำโครงการ ติดตั้ง ERPNext บน Debian EC2 ซึ่งเขาแนะนำให้เตรียมหน่วยความจำ หรือ RAM อย่างน้อย 4 GB ผมจึงเลือกขนาดเซิร์ฟเวอร์เป็น t2.medium คลิ๊กปุ่ม Next: Configure Instance Details

Select t2.medium
Select t2.medium

หน้าจอถัดไปเป็นค่าปกติที่ AWS ตั้งเอาไว้ ผมปล่อยไว้ตามนั้นครับ คลิ๊กปุ่ม Next: Add Storage

Default Configuration
Default Configuration

Storage 16 GB

Add Storage ได้กำหนดค่าปกติไว้ที่ 8 GB

Default Storage Size
Default Storage Size

เนื่องจากผมต้องการใช้ Python3 จาก Anaconda จึงแนะนำให้เปลี่ยนเป็น 16 GB ครับ คลิ๊ก Next: Add Tags

Modified Storage Size
Modified Storage Size

Tags

การกำหนด Tag มีประโยชน์ในการตรวจสอบ ต้นทุน ที่ใช้ไปในแต่ละโครงการ ให้ใส่ชื่อโครงการตรง Value ครับ ตรง Key ใส่ Name พอเห็น Key: Value แล้วเราก็จะนึกออกว่ามันคือ Object นั่นเอง คลิ๊กปุ่ม Next: Configure Security Group

Tag
Tag

สำหรับการตั้งค่า Security Group เราสามารถเลือก Create a new security group ได้เลยครับ คลิ๊ก Review and Launch

New Security Group
New Security Group

ตรวจดูอีกครั้งครับ เพื่อความแน่ใจ ให้ตรวจอย่างน้อย 2 จุดครับ

  1. Memory ต้องไม่น้อยกว่า 4 GB
  2. Storage ต้องไม่น้อยกว่า 16 GB
Review Page
Review Page

Key pair

ตรงนี้สำคัญให้เลือก Key pair โดยต้องแน่ใจว่า เรามี private key file เก็บเอาไว้บนเครื่อง Local ไม่งั้นเราจะใช้คำสั่ง Remote ผ่าน SSH ไม่ได้ครับ ดูวิธีสร้าง Key pair หรือ ดูวิธีแก้เมื่อลืม Private key

เมื่อเลือก Key pair บน EC2 แล้ว ไม่สามารถเปลี่ยน Key pair ได้

คลิ๊กปุ่ม Launch

Key Pair
Key Pair

เมื่อมาถึงตรงนี้ เราสร้างเซิร์ฟเวอร์บน AWS EC2 เรียบร้อยแล้วครับ คลิ๊กปุ่ม View Instances

Finished
Finished

Elastic IPs

Instance ที่เราสร้างขึ้นสถานะ Pending แสดงว่ามันกำลัง Boot อยู่ครับ ยังไม่เรียบร้อยดี ระหว่างนี้ให้มองไปที่แถบเมนูด้านซ้ายมือตรง Network & Security เลือก Elastic IPs

Select Elastic IPs
Select Elastic IPs

แนะนำให้สร้าง Elastic IP ครับ เพราะไม่ว่าเราจะรีสตาร์ทเซิร์ฟเวอร์ซักกี่ครั้ง เรายังได้เลข IP เดิม ซึ่งจะเป็นประโยชน์ในการเชื่อมต่อเครื่อง Local ไปยัง Server ผ่าน SSH เมื่อมาถึงหน้านี้ ให้คลิ๊กปุ่ม Allocate Elastic IP address

Allocate IP
Allocate IP

มีข้อสังเกตนิดหนึ่งครับ การ Allocate Elastic IP address จะเป็นแบบ IPv4 นะครับ เท่าที่เห็นไม่มี IPv6

เมื่อมาถึงหน้านี้ เรากำหนด Tag เป็นชื่อโครงการของเราครับ แล้วคลิ๊กปุ่ม Allocate

เพื่อให้ AWS คิดต้นทุนเข้าแต่ละโครงการ เราจะได้คำนวณต้นทุนง่ายหน่อย

Click Allocate

เสร็จแล้วเราจะได้เลข IP ครับ คลิ๊กตรงเลข IP สีฟ้าๆนะครับ

Get IP
Get IP

หน้าจอถัดมาให้คลิ๊กปุ่ม Associate Elastic IP Address

Associate IP to Instance
Associate IP to Instance

เลือก Instance บน EC2 ที่เราต้องการผูกไว้กับ Elastic IP ซึ่งก็คือ Instance ที่เราเพิ่งสร้างเมื่อกี้ครับ

Select Instance
Select Instance

ตอนนี้เลข Public IP จะเป็นเลขเดียวกับ Elastic IP นะครับ

Elastic IP bacame Public IP
Elastic IP became Public IP

เชื่อมต่อ SSH บน Browser ไม่ได้

ผมมีประสบการณ์การใช้งาน AWS EC2 ทั้งแบบ Ubuntu และ Debian ผมพบว่า Ubuntu สามารถเชื่อมต่อ SSH ผ่าน Browser ได้ เพียงคลิ๊กปุ่ม Connect ก็จะเข้าสู่หน้าจอ Terminal บน Browser

SSH Connect
SSH Connect

แต่สำหรับ Debian มันเชื่อมต่อ SSH บน Browser ไม่ได้ มันจะฟ้อง Error ตามรูปนี้ครับ

SSH Connect Error
SSH Connect Error

แต่ไม่เป็นไร เราสามารถเชื่อมต่อผ่าน VSCode แทนได้ครับ


ติดตั้ง VSCode Extensions

ให้ติดตั้ง VSCode Extensions เพิ่ม 2 ตัวครับ ตามรูป

Remote – SSH: Editing Configuration Files

Remote - SSH: Editing...
Remote – SSH: Editing…

และ Remote – SSH ซึ่งเป็นของ Microsoft ทั้งคู่ครับ

Remote - SSH
Remote – SSH

ก่อนใช้งาน Private Key

ไปที่โฟลเดอร์ที่ใช้เก็บ Private key บนเครื่อง local แล้วใช้คำสั่ง

chmod 400 <private key>

ในที่นี้จะเป็น

chmod 400 Node.pem
chmod 400
credit: https://chmodcommand.com/

Bitnami แนะนำให้ใช้

chmod 600 <private key>
chmod 600
credit: https://chmodcommand.com/

เชื่อม VSCode กับ EC2

EC 2

  1. ไปที่ AWS EC2 เลือก Instance ที่เราต้องการเชื่อมต่อกับ VSCode
  2. คลิ๊กปุ่ม Connect
EC2 Instances
EC2 Instances
  1. เลือกแท็บ SSH client
EC2 Instance Connect
EC2 Instance Connect
  1. คัดลอกตรงข้อ 4 ของแท็บ SSH client ตรงที่ผมทำลูกศรชี้ไว้ ให้คัดลอกทั้งบรรทัดครับ
Copy Public DNS
Copy Public DNS

VSCode บนเครื่อง Local

เปิดไฟล์ “/Users/<user-name>/.ssh/config” ด้วยคำสั่ง

code ~/.ssh/config

จะเห็นไฟล์เปล่า หรือถ้ามีข้อมูล ไฟล์จะมีหน้าตาแบบนี้ครับ

SSH Config file
SSH Config file

ให้เพิ่มโค้ดเข้าไปดังนี้ครับ

Host <Host-name>
    HostName <Public DNS>
    User admin
    IdentityFile <path/to/private-key/privatekey.pem>

ในที่นี้จะเป็น

Host EC2-Tutorial-Debian-admin
    HostName ec2-xx-xxx-xx5-50.ap-southeast-1.compute.amazonaws.com
    User admin
    IdentityFile /Users/manotlj/xxxx/Keys/Node.pem

ต่อไปให้คลิ๊กเครื่องหมาย settings ตรงมุมซ้ายล่าง

Settings
Settings

เลือกคำสั่ง Command Palette

Settings Menu
Settings Menu

Shortcut

หรือเข้าทาง Shortcut ก็ได้ครับ ตรงหัวมุมด้านซ้ายของ VSCode จะมีปุ่มสีเขียวๆ

Remote-SSH shortcut
Remote-SSH shortcut

ตรง Search area ให้พิมพ์ Remote-SSH แล้วเลือก Remote-SSH: Connect to Host…

Search command
Search command

จะมีรายชื่อ Remote Host ทั้งหมดที่อยู่ใน “~/.ssh/config” แสดงขึ้นมา เลือก Host ที่เราต้องการทำงาน ในที่นี้คือ EC2-Tutorial-Debian-admin

Select Remote Host
Select Remote Host

VSCode จะถามย้ำเรื่อง fingerprint

ssh fingerprint confirm
ssh fingerprint confirm

ให้เราตอบ Continue เสร็จแล้ว VSCode จะเข้ามาที่หน้าแรกตามรูปนี้ ให้คลิ๊ก Open Folder

Remote first page
Remote first page

หน้าจอ Trust จะขึ้นมา เพื่อให้เรายืนยัน

Trust info
Trust info

ติ๊กเครื่องหมายถูกตรง Trust the authors of all files … และคลิ๊กปุ่ม Yes, I trust the authors …

Trust confirm
Trust confirm

ไฟล์ที่อยู่บน EC2 เริ่มแรกจะมีแค่นี้ครับ

Original files
Original files

ผมเข้าใจว่าเครื่องมันเปิด Terminal ให้อัตโนมัติ ถ้ามันไม่เปิดให้ ไปเปิดที่ Terminal -> New Terminal

คำสั่งแรกคือ

sudo apt update && sudo apt upgrade -y
admin@ip-172-31-17-109:~$ sudo apt update && sudo apt upgrade -y
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 http://cdn-aws.deb.debian.org/debian buster InRelease
Hit:3 http://cdn-aws.deb.debian.org/debian buster-updates InRelease
Hit:4 http://cdn-aws.deb.debian.org/debian buster-backports InRelease
Reading package lists... Done
Building dependency tree       
Reading state information... Done
39 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  firmware-linux-free linux-image-4.19.0-17-cloud-amd64
...
...
...
Fetched 35.7 MB in 1s (48.9 MB/s)                                                                        
apt-listchanges: Reading changelogs...
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LC_CTYPE = "UTF-8",
        LC_TERMINAL = "iTerm2",
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("C.UTF-8").
...
...
...
Setting up curl (7.64.0-4+deb10u2) ...
Setting up libdns1104:amd64 (1:9.11.5.P4+dfsg-5.1+deb10u5) ...
Setting up libcurl3-gnutls:amd64 (7.64.0-4+deb10u2) ...
Setting up libisccfg163:amd64 (1:9.11.5.P4+dfsg-5.1+deb10u5) ...
Setting up libbind9-161:amd64 (1:9.11.5.P4+dfsg-5.1+deb10u5) ...
Setting up bind9-host (1:9.11.5.P4+dfsg-5.1+deb10u5) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for dbus (1.12.20-0+deb10u1) ...
Processing triggers for libc-bin (2.28-10) ...
Processing triggers for initramfs-tools (0.133+deb10u1) ...
update-initramfs: Generating /boot/initrd.img-4.19.0-17-cloud-amd64
admin@ip-172-31-17-109:~$ 

Setting locale failed

ในเบื้องต้นมันจะแจ้ง Warning ดังนี้ครับ

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LC_CTYPE = "UTF-8",
        LC_TERMINAL = "iTerm2",
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("C.UTF-8").

การตั้งค่าเบื้องต้นของ Debian เราต้องกำหนดค่า Locale เอง เราจะใช้ภาษาอะไรบ้างในการทำงาน เราก็ต้องแจ้ง Debian นิดหนึ่ง

ซึ่งในที่นี้จะใช้ 2 ภาษา คือ

  1. ภาษาอังกฤษ
  2. ภาษาไทย

แก้ Setting locale failed

ลองใช้คำสั่งต่อไปนี้ในการแก้ปัญหาครับ ลองทำทุกวิธีแล้วรีสตาร์ทครับ

  1. export
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
admin@ip-172-31-17-109:~$ export LANGUAGE=en_US.UTF-8
admin@ip-172-31-17-109:~$ export LANG=en_US.UTF-8
admin@ip-172-31-17-109:~$ export LC_ALL=en_US.UTF-8
  1. sudo dpkg-reconfigure locales
sudo dpkg-reconfigure locales

เครื่องจะเด้งหน้าจอนี้ขึ้นมาครับ

Configuring locales
Configuring locales

ให้เลือกภาษาที่เราต้องการในที่นี้จะเป็น

en_US.UTF-8 UTF-8

en_US.UTF-8 UTF-8
locale en_US.UTF-8 UTF-8

กดปุ่ม space bar เพื่อเลือก แล้ว กดลูกศรลง เพื่อไปหา th แล้วกด space bar อีกครั้ง

th_TH.UTF-8 UTF-8

locale th_TH.UTF-8 UTF-8
locale th_TH.UTF-8 UTF-8

เมื่อเลือกภาษาเสร็จ กดปุ่ม tab ตอนนี้ปุ่ม Ok จะถูกระบายสีแดง กดปุ่ม Enter

locale save
locale save

***หารายการโดยการใช้ปุ่มลูกศรขึ้นลง เลือกด้วยการกดปุ่ม Space bar เลื่อนเคอร์เซอร์มาที่คำว่า Ok ด้วยปุ่ม Tab

Default Language

เครื่องจะถาม Default language เลื่อนลูกศรลงไปหา en_US.UTF-8

Select default language
Select default language

เมื่อเคอร์เซอร์ มาอยู่ที่ en_US.UTF-8 กดปุ่ม tab

en_US to be default
en_US to be default

ตามด้วยปุ่ม Enter

Default language save
Default language save

เครื่องจะพาเรากลับมาที่ Terminal

admin@ip-172-31-17-109:~$ sudo dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "en_US.UTF-8",
        LC_ALL = "en_US.UTF-8",
        LC_TERMINAL = "iTerm2",
        LC_CTYPE = "UTF-8",
        LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Generating locales (this might take a while)...
  en_US.UTF-8... done
  th_TH.UTF-8... done
Generation complete.
admin@ip-172-31-17-109:~$
  1. sudo locale-gen “en_US.UTF-8”
sudo locale-gen "en_US.UTF-8"
admin@ip-172-31-17-109:~$ sudo locale-gen "en_US.UTF-8"
Generating locales (this might take a while)...
  en_US.UTF-8... done
  th_TH.UTF-8... done
Generation complete.
admin@ip-172-31-17-109:~$ 

หลังจากเสร็จทั้ง 3 ขั้นตอน ให้ลองเปิดไฟล์ locale ขึ้นมาดูครับ

nano /etc/default/locale
default locale
default locale
  1. กำหนด keymaps และ locale ด้วยคำสั่ง localectl
sudo localectl set-keymap us && sudo localectl set-locale LANG=en_US.utf8
  1. แก้ไขไฟล์ “/etc/environment”
sudo nano /etc/environment

เติมโค้ดนี้เข้าไปครับ

LC_ALL=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LANG=en_US.UTF-8
  1. รีสตาร์ทเครื่องครับ
sudo reboot

*** ถ้าใช้คำสั่ง sudo reboot แล้วเครื่องไม่กลับมาทำงาน ให้แก้ไขด้วยการ Reboot ที่ EC2 ครับ

Reboot EC2 Instance
Reboot EC2 Instance

ปัญหาอื่นๆ จากการสั่งอัพเดท และอัพเกรด Debian ไม่น่ามีอะไรแล้วครับ


เพิ่ม User

เราจะไม่ใช้บัญชี root ของ Debian ทำงานครับ แต่จะสร้างบัญชีใหม่ ในกลุ่ม sudo พิมพ์คำสั่ง

adduser <your-user-name>

ในที่นี้จะเป็น

sudo adduser manotlj
admin@ip-172-31-17-109:~$ adduser manotlj
bash: adduser: command not found
admin@ip-172-31-17-109:~$ sudo adduser manotlj
Adding user `manotlj' ...
Adding new group `manotlj' (1001) ...
Adding new user `manotlj' (1001) with group `manotlj' ...
Creating home directory `/home/manotlj' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for manotlj
Enter the new value, or press ENTER for the default
        Full Name []: Manot Luijiu
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] Y
admin@ip-172-31-17-109:~$ 

เพิ่มบัญชีผู้ใช้ใหม่เข้ากลุ่ม sudo

sudo usermod -aG sudo manotlj

ติดตั้ง ufw

sudo apt install ufw
admin@ip-172-31-17-109:~$ sudo apt install ufw
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  ufw
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 164 kB of archives.
After this operation, 852 kB of additional disk space will be used.
Get:1 http://cdn-aws.deb.debian.org/debian buster/main amd64 ufw all 0.36-1 [164 kB]
Fetched 164 kB in 0s (12.0 MB/s)
Preconfiguring packages ...
Selecting previously unselected package ufw.
(Reading database ... 26468 files and directories currently installed.)
Preparing to unpack .../archives/ufw_0.36-1_all.deb ...
Unpacking ufw (0.36-1) ...
Setting up ufw (0.36-1) ...

Creating config file /etc/ufw/before.rules with new version

Creating config file /etc/ufw/before6.rules with new version

Creating config file /etc/ufw/after.rules with new version

Creating config file /etc/ufw/after6.rules with new version
Created symlink /etc/systemd/system/multi-user.target.wants/ufw.service → /lib/systemd/system/ufw.service.
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for rsyslog (8.1901.0-1) ...
Processing triggers for systemd (241-7~deb10u8) ...
admin@ip-172-31-17-109:~$

UFW ได้ใส่รายชื่อโปรแกรมที่จำเป็นไว้ให้ตอนติดตั้ง สามารถขอดูด้วยคำสั่ง

sudo ufw app list
admin@ip-172-31-17-109:~$ sudo ufw app list
Available applications:
  AIM
  Bonjour
  CIFS
  DNS
  Deluge
  IMAP
  IMAPS
  IPP
  KTorrent
  Kerberos Admin
  Kerberos Full
  Kerberos KDC
  Kerberos Password
  LDAP
  LDAPS
  LPD
  MSN
  MSN SSL
  Mail submission
  NFS
  OpenSSH
  POP3
  POP3S
  PeopleNearby
  SMTP
  SSH
  Socks
  Telnet
  Transmission
  Transparent Proxy
  VNC
  WWW
  WWW Cache
  WWW Full
  WWW Secure
  XMPP
  Yahoo
  qBittorrent
  svnserve
admin@ip-172-31-17-109:~$ 

เบื้องต้นนี้เปิดใช้แค่ OpenSSH ก่อนครับ ด้วยคำสั่ง

sudo ufw allow OpenSSH
admin@ip-172-31-17-109:~$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)
admin@ip-172-31-17-109:~$

เพื่อให้ UFW ทำงานทุกครั้งหลังรีสตาร์ท Debian ใช้คำสั่ง

sudo ufw enable

สำหรับคำถาม Proceed with operation (y|n)? ให้ตอบ y ครับ

admin@ip-172-31-17-109:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
admin@ip-172-31-17-109:~$

ขอดูสถานะการทำงานของ UFW ได้ด้วยคำสั่ง

sudo ufw status
admin@ip-172-31-17-109:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             

admin@ip-172-31-17-109:~$

คัดลอกไฟล์ .ssh

หลังจากขั้นตอนนี้ เราจะล็อกอินเข้าใช้ Debian ด้วย ชื่อผู้ใช้ใหม่ เป็นส่วนใหญ่ ดังนั้นให้คัดลอกโฟลเดอร์ .ssh ให้กับผู้ใช้ใหม่ด้วยคำสั่ง

sudo cp -r ~/.ssh /home/<your-user-name>

ในที่นี้จะเป็น

sudo cp -r ~/.ssh /home/manotlj
admin@ip-172-31-17-109:~$ cp -r ~/.ssh /home/manotlj
cp: cannot create directory '/home/manotlj/.ssh': Permission denied
admin@ip-172-31-17-109:~$ sudo cp -r ~/.ssh /home/manotlj
admin@ip-172-31-17-109:~$

เมื่อคัดลอกโฟลเดอร์ไปแล้ว ก็เปลี่ยนชื่อเจ้าของ

sudo chown -R manotlj:manotlj /home/manotlj/.ssh
admin@ip-172-31-17-109:~$ chown -R manotlj:manotlj /home/manotlj/.ssh
chown: cannot read directory '/home/manotlj/.ssh': Permission denied
admin@ip-172-31-17-109:~$ sudo chown -R manotlj:manotlj /home/manotlj/.ssh
admin@ip-172-31-17-109:~$ 

ติดตั้ง Git

sudo apt install git
admin@ip-172-31-17-109:~$ sudo apt install git
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  git-man liberror-perl libgdbm-compat4 libperl5.28 patch perl perl-modules-5.28
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
  perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make libb-debug-perl liblocale-codes-perl
The following NEW packages will be installed:
  git git-man liberror-perl libgdbm-compat4 libperl5.28 patch perl perl-modules-5.28
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 14.4 MB of archives.
After this operation, 85.2 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://cdn-aws.deb.debian.org/debian buster/main amd64 perl-modules-5.28 all 5.28.1-6+deb10u1 [2,873 kB]
...
...
...
Setting up libgdbm-compat4:amd64 (1.18.1-4) ...
Setting up libperl5.28:amd64 (5.28.1-6+deb10u1) ...
Setting up git-man (1:2.20.1-2+deb10u3) ...
Setting up perl (5.28.1-6+deb10u1) ...
Setting up liberror-perl (0.17027-2) ...
Setting up git (1:2.20.1-2+deb10u3) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for libc-bin (2.28-10) ...
admin@ip-172-31-17-109:~$ 

ZSH

sudo apt install zsh
admin@ip-172-31-17-109:~$ sudo apt install zsh
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  zsh-common
Suggested packages:
  zsh-doc
The following NEW packages will be installed:
  zsh zsh-common
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,685 kB of archives.
After this operation, 17.4 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://cdn-aws.deb.debian.org/debian buster/main amd64 zsh-common all 5.7.1-1 [3,804 kB]
Get:2 http://cdn-aws.deb.debian.org/debian buster/main amd64 zsh amd64 5.7.1-1 [881 kB]
Fetched 4,685 kB in 0s (28.6 MB/s)
Selecting previously unselected package zsh-common.
(Reading database ... 26576 files and directories currently installed.)
Preparing to unpack .../zsh-common_5.7.1-1_all.deb ...
Unpacking zsh-common (5.7.1-1) ...
Selecting previously unselected package zsh.
Preparing to unpack .../archives/zsh_5.7.1-1_amd64.deb ...
Unpacking zsh (5.7.1-1) ...
Setting up zsh-common (5.7.1-1) ...
Setting up zsh (5.7.1-1) ...
Processing triggers for man-db (2.8.5-2) ...
admin@ip-172-31-17-109:~$ 

Oh My Zsh

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
admin@ip-172-31-17-109:~$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Cloning Oh My Zsh...
Cloning into '/home/admin/.oh-my-zsh'...
remote: Enumerating objects: 1241, done.
remote: Counting objects: 100% (1241/1241), done.
remote: Compressing objects: 100% (1204/1204), done.
remote: Total 1241 (delta 20), reused 1103 (delta 15), pack-reused 0
Receiving objects: 100% (1241/1241), 867.00 KiB | 1.75 MiB/s, done.
Resolving deltas: 100% (20/20), done.

Looking for an existing zsh config...
Using the Oh My Zsh template file and adding it to ~/.zshrc.

Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] Y
Changing the shell...
Password: 
chsh: PAM: Authentication failure
Error: chsh command unsuccessful. Change your default shell manually.

         __                                     __
  ____  / /_     ____ ___  __  __   ____  _____/ /_
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
                        /____/                       ....is now installed!


Before you scream Oh My Zsh! please look over the ~/.zshrc file to select plugins, themes, and options.

• Follow us on Twitter: https://twitter.com/ohmyzsh
• Join our Discord server: https://discord.gg/ohmyzsh
• Get stickers, shirts, coffee mugs and other swag: https://shop.planetargon.com/collections/oh-my-zsh

➜  ~ 

เนื่องจากการเปลี่ยน default shell จาก bash เป็น zsh ต้องระบุรหัสผ่าน การติดตั้งจึงไม่สมบูรณ์ เมื่อต้องการใช้งานให้พิมพ์คำสั่ง

zsh

Powerlevel10k

ตกแต่ง Terminal ให้สวยๆ ด้วย Powerlevel10k, ZSH Syntax Highlighting และ ZSH Auto Suggestions ให้พิมพ์คำสั่งต่อไปนี้ทีละคำสั่ง

git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
➜  ~ git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
Cloning into '/home/admin/.oh-my-zsh/custom/themes/powerlevel10k'...
remote: Enumerating objects: 15252, done.
remote: Counting objects: 100% (341/341), done.
remote: Compressing objects: 100% (149/149), done.
remote: Total 15252 (delta 222), reused 258 (delta 192), pack-reused 14911
Receiving objects: 100% (15252/15252), 72.99 MiB | 14.73 MiB/s, done.
Resolving deltas: 100% (9860/9860), done.
➜  ~ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
Cloning into '/home/admin/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting'...
remote: Enumerating objects: 6950, done.
remote: Counting objects: 100% (37/37), done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 6950 (delta 13), reused 24 (delta 6), pack-reused 6913
Receiving objects: 100% (6950/6950), 1.49 MiB | 2.20 MiB/s, done.
Resolving deltas: 100% (4687/4687), done.
➜  ~ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
Cloning into '/home/admin/.oh-my-zsh/custom/plugins/zsh-autosuggestions'...
remote: Enumerating objects: 2435, done.
remote: Counting objects: 100% (50/50), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 2435 (delta 21), reused 21 (delta 7), pack-reused 2385
Receiving objects: 100% (2435/2435), 566.38 KiB | 662.00 KiB/s, done.
Resolving deltas: 100% (1552/1552), done.
➜  ~ 

แก้ไขไฟล์ .zshrc

หลังจากติดตั้ง ZSH เราจะได้ไฟล์ .zshrc อยู่ที่ “/home/<user-name>” และถ้าต้องการใช้งาน Powerlevel10k พร้อมปลั๊กอินอื่นๆ เราต้องแก้ไขไฟล์ .zshrc 2 จุด คือ

  1. ZSH_THEME เปลี่ยนเป็น
ZSH_THEME="powerlevel10k/powerlevel10k"
  1. plugins เปลี่ยนเป็น
plugins=(git zsh-syntax-highlighting zsh-autosuggestions)

เสร็จแล้ว รีสตาร์ท ZSH ด้วยคำสั่ง

source ~/.zshrc

ทดสอบบัญชีผู้ใช้ใหม่

เปิดไฟล์ “~/.ssh/config” เพิ่มโค้ดนี้เข้าไปครับ

Host <Host-name> # ตั้งชื่อตามชอบ
    HostName <Host-DNS>
    User <new-user>
    IdentityFile </path/to/private key/privateKey.pem>

ของผมจะเป็น

Host EC2-Tutorial-Debian-manotlj
    HostName ec2-xx-xxx-xx5-50.ap-southeast-1.compute.amazonaws.com
    User manotlj
    IdentityFile /Users/manotlj/xxx/Keys/Node.pem

ให้ทดสอบบัญชีผู้ใช้ใหม่ด้วยการติดตั้ง ZSH, Oh My Zsh, Powerlevel10k, ZSH Syntax Highlighting และ ZSH Auto Suggestions

sudo apt install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

เปิดไฟล์ .zshrc

sudo nano ~/.zshrc

แก้ไขบรรทัด ZSH_THEME ให้เป็น

ZSH_THEME="powerlevel10k/powerlevel10k"

และแก้ไข plugins ให้เป็น

plugins=(git zsh-syntax-highlighting zsh-autosuggestions)

ตกแต่ง Powerlevel10k

หลังจากติดตั้งให้แก้ไขไฟล์ .zshrc ให้เรียบร้อย แล้วตั้งค่า Powerlevel10k ด้วยคำสั่ง

source ~/.zshrc
// or
p10k configure

คำถามแรกคือ มองเห็นรูป สี่เหลี่ยม มั๊ย ตอบ y

diamond test
diamond test

คำถามที่สอง มองเห็น แม่กุญแจ มั๊ย ตอบ y

lock test
lock test

มองเห็นโลโก้ Debian มั๊ย ตอบ y

logo test
logo test

ไอคอนเบียดกันมั๊ย สำหรับบาง font มันจะเบียด บาง font ไม่เบียด ผมใช้ Anonymice Nerd Font บนเครื่อง Local มันจะเบียดกันหน่อย ผมตอบ n

icons test
icons test

Prompt Style ผมเลือก 2

Prompt Style
Prompt Style

Character Set ผมเลือก 1

Character Set
Character Set

Prompt Color เลือก 4

Prompt Color
Prompt Color

Show current time? เลือก 1

Show current time
Show current time

Prompt Separators เลือก 1

Prompt Separators
Prompt Separators

Heads เลือก 1

Prompt Heads

Tails เลือก 1

Prompt Tails
Prompt Tails

Height เลือก 2

Prompt Height
Prompt Height

Connection เลือก 1

Prompt Connection
Prompt Connection

Frame เลือก 1

Prompt Frame

Spacing เลือก 2

Prompt Spacing
Prompt Spacing

Icons เลือก 1

Icons
Icons

Flow เลือก 1

Prompt Flow
Prompt Flow

Enable Transient Prompt เลือก y

Enable Transient Prompt
Enable Transient Prompt

Instant Prompt Mode เลือก 2

Instant Prompt Mode

แน่นอนครับเมื่อมีการแก้ไขค่า Configuration เราต้องสั่ง Save ให้ตอบ y

Apply changes
Apply changes

ตอนนี้ Terminal จะมีหน้าตาเปลี่ยนไป ตามรูป ครับ

Finished
Finished

เอกสารอ้างอิง

สมัครรับบทความ

ท่านจะได้รับบทความเกี่ยวกับเทคนิคในการเขียนโค้ด การสร้างเว็บไซต์ ความรู้ด้านบัญชี ภาษีอากร และอื่นๆ

0 0 votes
ให้คะแนนบทความ
Notify of
guest
0 ความเห็นทั้งหมด
Inline Feedbacks
ดูความเห็นทั้งหมด

บทความแนะนำ

Flask Python framework โดย สรุป

Flask Python framework + Emmet

สรุป วิธีสร้างเว็บไซต์ด้วยภาษา Python โดยใช้ Flask framework และ การตั้งค่า VSCode เพื่อให้สามารถใช้ Emmet ร่วมกับ Flask framework ได้

Redis บน Debian AWS EC2

Redis บน Debian AWS EC2

ติดตั้ง Redis แบบ Manual บน ระบบปฏิบัติการ Debian ที่อยู่บน EC2 ของ AWS Cloud จะช่วยให้การปรับแต่ง Redis เช่น การเพิ่มพอร์ต ทำได้ง่ายขึ้น

Colorize VIM

Developer Playground: Colorize VIM

ตกแต่ง VIM Editor ให้ดู Colorize ด้วย VIM Plug และมันยังมีประโยชน์ต่อการเขียนโค้ดด้วย เพราะมันจะแสดงข้อมูลที่สำคัญบริเวณขอบล่างของหน้าจอ

0
แสดงความเห็นได้นะx
()
x
Scroll to Top
Share on facebook
Share on twitter
Share on linkedin