Author: grianggrai.n

  • Grid Infrastructure 18c ตอน 2

    • ตอนสองจัดการ Shared disk
      • ล็อคอินด้วยผู้ใช้ oracle เปิด terminal พิมพ์คำสั่ง ต่อไปนี้ เพื่อเป็น root เมื่อถามรหัสผ่าน ให้ใส่รหัสผ่านของ oracle
    sudo -i
    • ตรวจสอบว่ามีแฟ้ม /etc/multipath.conf หรือไม่ หากไม่มีให้สั่งคำสั่งต่อไปนี้
    mpathconf --enable
    systemctl start multipathd
    systemctl enable multipathd
    • ตรวจสอบ shared disk ด้วยคำสั่ง
    ls -l /dev/mapper/mpath?
    shared disk
    • จะเห็นว่ามี mpatha ถึง mpathf
    • สร้าง partition บน mpatha ถึง mpathf ด้วยคำสั่ง
    fdisk  /dev/mapper/mpatha
    • สร้าง partition ใหม่ตามขั้นตอนเดิม n แล้ว enter 4 ครั้ง แล้วกด w แล้ว enter ทำจนครบ ถึง mpathf
    • เนื่องจากเป็น shared disk แบ่ง partition ที่เดียวก็จะได้ทั้งสองเครื่อง ที่ rac2 เข้าระบบด้วย oracle แล้วเป็น root ด้วยคำสั่ง
    sudo -i
    • แล้วพิมพ์คำสั่งต่อไปนี้เพื่อ update ตาราง partition
    partprobe
    • กลับมาที่ rac1 ติดตั้ง oracleasm-support และ kmod-oracleasm ด้วยคำสั่ง
    yum install -y kmod-oracleasm oracleasm-support
    • ตั้งค่า oracleasm ด้วยคำสั่ง
     oracleasm configure -i
    • แล้วกรอกตามภาพ
    oracleasm configure
    • โหลด kernel module ด้วยคำสั่ง
    oracleasm init

    ได้ผลดังภาพ

    oracleasm
    • ทำซ้ำอีกครั้งที่ rac2
    • กลับมา rac1 พิมพ์คำสั่งต่อไปนี้เพื่อสร้าง oracleasm disk โดย DISK* คือขื่อ disk
    oracleasm createdisk DISK1 /dev/mapper/mpatha1
    oracleasm createdisk DISK2 /dev/mapper/mpathb1
    oracleasm createdisk DISK3 /dev/mapper/mpathc1
    oracleasm createdisk DISK4 /dev/mapper/mpathd1
    oracleasm createdisk DISK5 /dev/mapper/mpathe1
    oracleasm createdisk DISK6 /dev/mapper/mpathf1
    • ที่ rac2 พิมพ์คำสั่ง
    oracleasm scandisks
    oracleasm scandisks
    • ที่ rac1 terminal พิมพ์ exit
      • พิมพ์ oracleasm listdisks
    • ที่ rac2 terminal พิมพ์ exit
      • พิมพ์ oracleasm listdisks
    oracleasm listdisks
    • ต้องได้ผลเหมือนกันทั้งสองเครื่อง
    • จบจัดการ shared disk
    https://sysadmin.psu.ac.th/2021/01/19/grid-infrastructure-3/
  • Grid infrastructure 18c ตอน 1

    รอบนี้จะมาติดตั้ง Oracle grid infrastructure 18c กัน

    สิ่งที่ต้องเตรียม

    • Vmware 2 เครื่อง โดยแต่ละเครื่องมีคุณสมบัติดังนี้ (ปรับลดตามความเหมาะสมได้)
      • 2 CPU 64 core
      • 128 GB Memory
      • HDD 2 ลูก
        • 300GB
        • 1TB
      • Shared Storage ครั้งนี้เลือกใช้ iSCSI 6 ลูกลูกละ 1TB
      • Network Card 3 ใบ
      • IP address โดย 4 IP วงเดียวกัน 3 IP สำหรับชื่อเรียกใน DNS วงเดียวกันกับ 4 IP แรก 2 IP คนละวง
        • rac1 1 IP สำหรับการ์ดใบแรก เป็น IP ประจำเครื่อง หรือเรียก Public IP (ens192)
        • rac2 1 IP สำหรับการ์ดใบแรก เป็น IP ประจำเครื่อง หรือเรียก Public IP (ens192)
        • rac1-vip 1 IP เป็น virtual IP ไม่ต้องใส่ในการ์ดแลน วงเดียวกันกับ IP ประจำเครื่อง เรียก Virtual IP
        • rac2-vip 1 IP เป็น virtual IP ไม่ต้องใส่ในการ์ดแลน วงเดียวกันกับ IP ประจำเครื่อง เรียก Virtual IP
        • rac-scan 3 IP ต้องจดชื่อนี้ใน DNS ด้วยโดยจดเป็น round robin วงเดียวกันกับ IP ประจำเครื่อง เรียก Scan name
        • rac1-priv 1 IP สำหรับการ์ดใบที่สอง เป็น IP สำหรับคุยกันเองใน cluster คนละวงกับ IP ประจำเครื่อง เรียก Private IP (ens224) วงเดียวกับ rac2-priv
        • rac2-priv 1 IP สำหรับการ์ดใบที่สอง เป็น IP สำหรับคุยกันเองใน cluster คนละวงกับ IP ประจำเครื่อง เรียก Private IP (ens224) วงเดียวกับ rac1-priv
        • rac1-storage 1 IP สำหรับเชื่อมต่อ iSCSI ติดต่อผู้ดูแล iSCSI (ens256)***
        • rac2-storage 1 IP สำหรับเชื่อมต่อ iSCSI ติดต่อผู้ดูแล iSCSI (ens256)***
    • Download Software
    • Oracle Enterprise Linux 7.9
      • เลือกติดตั้งดังรูปได้แก่
        • Date & Time เลือก Timezone ที่ถูกต้อง Asia/Bangkok
        • Keyboard English (US), Thai
        • Software Selection เลิอกเป็น Server with GUI
        • KDUMP เลือก Disabled
        • Security Policy เลือก ปิด เป็น No profile selectd
        • ตั้งค่า network ตามที่เขียนข้างบน
    • ขั้นตอนแบ่งดิสก์
    • เริ่มการจัดการ iSCSI ในขั้นตอนนี้
    Device Selection
    • กด Add a disk
    Add iSCSI
    • กด Add iSCSI Target…
    • ใส่ IP Address ของ iSCSI และ iSCSI Initiator Name ที่ได้จาก iSCSI Admin
    ADD iSCSI STORAGE TARGET
    • กด Start Discovery
    • ทำเครื่องหมายถูกหน้าดิสก์ที่ขึ้นมาทั้งหมด
    ADD iSCSI STORAGE TARGET
    • กด Log In จะได้
    Installation Destination
    • กดเลือกทั้งหมดแล้วกด Done จะได้
    INSTALLATION DESTINATION
    • เลือกเฉพาะ disk ขนาด 300GB และเลือก I will configure partitioning กด Done
    INSTALLATION DESTINATION
    • ตอนแบ่ง Partition เลือกเป็น LVM
      • /boot 1GB file
      • /boot/efi 200MB (default) เนื่องจากเลือก boot แบบ efi
      • / 282.8 GB file system ext4
      • swap 16GB
    Manual Portioning
    • กด Done ได้ดังรูป
    • กด Accept Changes
    • กด Begin Installation
    • ขั้นตอนสร้าง User สร้างตามรูป
    Configuration 
    • คลิก Advanced…
    • คลิกถูกในช่องสี่เหลี่ยมทั้งสองช่อง พิมพ์ 54321 ทั้งสองช่อง
    • ในช่อง Add user to the following groups: เปลี่ยนเป็นดังนี้
    wheel,oinstall(54321),oper(54322),dba(54323),backupdba(54324),dgdba(54325)
    ,kmdba(54326),asmdba(54327), asmoper(54328),asmadmin(54329),racdba(54330)
    • รอจนติดตั้งเสร็จ reboot ทำแบบเดียวกันที่ rac2
    • เริ่มการตั้งค่าที่ rac1
    • ล็อคอินด้วยผู้ใช้ oracle เปิด terminal แล้วพิมพ์คำสั่งต่อไปนี้ จะขึ้นให้ใส่ password ให้ใส่ password ของ oracle
    sudo -i
    • แก้ไขไฟล์ host ด้วยคำสั่ง
    vi /etc/hosts
    • แก้ไขให้อยู่ดังรูป
    <IP-address>  <fully-qualified-machine-name>  <machine-name>
    • ปิด selinux แก้ไขแฟ้ม /etc/selinux/config
    vi /etc/selinux/config
    • เปลี่ยน SELINUX=enforcing เป็น SELINUX=permissive
    • บันทึกแล้วออกมารันคำสั่ง
     setenforce Permissive
    • ปิด firewall ด้วยคำสั่ง
    systemctl stop firewalld
    systemctl disable firewalld
    • เปิดการทำงานของ NTP
    systemctl enable chronyd
    systemctl restart chronyd
    chronyc -a 'burst 4/4'
    chronyc -a makestep
    • ติดตั้งซอฟท์แวร์ที่จำเป็นสำหรับ Oracle 18c
    yum install oracle-database-preinstall-18c -y
    yum install binutils -y
    yum install compat-libstdc++-33 -y
    yum install compat-libstdc++-33.i686 -y
    yum install gcc -y
    yum install gcc-c++ -y
    yum install glibc -y
    yum install glibc.i686 -y
    yum install glibc-devel -y
    yum install glibc-devel.i686 -y
    yum install ksh -y
    yum install libgcc -y
    yum install libgcc.i686 -y
    yum install libstdc++ -y
    yum install libstdc++.i686 -y
    yum install libstdc++-devel -y
    yum install libstdc++-devel.i686 -y
    yum install libaio -y
    yum install libaio.i686 -y
    yum install libaio-devel -y
    yum install libaio-devel.i686 -y
    yum install libXext -y
    yum install libXext.i686 -y
    yum install libXtst -y
    yum install libXtst.i686 -y
    yum install libX11 -y
    yum install libX11.i686 -y
    yum install libXau -y
    yum install libXau.i686 -y
    yum install libxcb -y
    yum install libxcb.i686 -y
    yum install libXi -y
    yum install libXi.i686 -y
    yum install make -y
    yum install sysstat -y
    yum install unixODBC -y
    yum install unixODBC-devel -y
    yum install zlib-devel -y
    yum install zlib-devel.i686 -y
    • ปรับปรุงรุ่นของ software
    yum update -y
    • ยกเลิก virbr0 interface
    systemctl stop libvirtd.service
    systemctl disable libvirtd.service
    • จัดการกับ disk ลูก 1TB
    fdisk /dev/sdb
    • กด n แล้ว enter แล้วกด enter 4 ครั้ง
    • กด t แล้ว enter แล้วเลือก 31 กด enter
    • กด w enter
    • สร้าง sdb1 ให้เป็น LVM Physical volume
    pvcreate /dev/sdb1
    • สร้าง LVM volume group ชื่อ vg_u01
    vgcreate vg_u01 /dev/sdb1
    • สร้าง LVM logical volume group ชื่อ lv_u01 ใน volume group ที่ชื่อ vg_u01 โดยให้มีขนาดทั้งหมดที่มีอยู่ใน vg_u01
    lvcreate -n lv_u01 -l 100%FREE vg_u01
    • format LVM logical volume group lv_u01 เป็นแบบ ext4 มี Label ว่า u01
    mkfs.ext4 -L u01 /dev/vg_u01/lv_u01
    • สร้าง /u01
    mkdir /u01
    • แก้ไขแฟ้ม /etc/fstab เพิ่มบรรทัดต่อไปนี้ต่อท้าย
    LABEL=u01               /u01                    ext4    defaults        1 1
    • สั่งให้ mount /u01 ด้วยคำสั่ง
    mount -a
    • ตรวจสอบว่า mount ได้หรือไม่
    df -h
    • ได้ผลประมาณว่า
    • จบการจัดการ disk 1TB
    • ต่อมาสร้างโฟลเดอร์ ที่จำเป็นสำหรับ grid infrastructure และ oracle database
    mkdir -p /u01/app/18.0.0.0/grid
    mkdir -p /u01/app/oracle/product/18.0.0.0/db_1
    chown -R oracle:oinstall /u01/app
    chmod -R 775 /u01/app
    • พิมพ์ logout เพื่อออกจาก user root แล้วกลับเป็น user oracle
    • สร้างโฟลเดอร์ /home/oracle/scripts
    mkdir -p /home/oracle/scripts
    • สร้างแฟ้ม /home/oracle/scripts/setEnv.sh มีข้อความว่า โดย rac1.x.x.x คือชื่อเต็มของ rac1 หรือ rac2 ตามเครื่องที่ทำ ORACLE_SID ก็ต้องเป็น regist1 สำหรับ rac1 และ regist2 สำหรับ rac2
    cat > /home/oracle/scripts/setEnv.sh <<EOF
    # Oracle Settings
    export TMP=/tmp
    export TMPDIR=\$TMP
    export ORACLE_HOSTNAME=rac1.x.x.x  #เปลี่ยน   
    export ORACLE_UNQNAME=regist   #เปลี่ยน
    export ORACLE_BASE=/u01/app/oracle
    export GRID_HOME=/u01/app/18.0.0.0/grid
    export DB_HOME=\$ORACLE_BASE/product/18.0.0.0/db_1
    export ORACLE_HOME=\$DB_HOME
    export ORACLE_SID=regist1 #เปลี่ยน
    export ORACLE_TERM=xterm
    export BASE_PATH=/usr/sbin:\$PATH
    export PATH=\$ORACLE_HOME/bin:\$BASE_PATH
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
    alias grid_env='. /home/oracle/scripts/grid_env'
    alias db_env='. /home/oracle/scripts/db_env'
    EOF
    • เพิ่ม script /home/oracle/scripts/setEnv.sh ให้ทำงานทุกครั้งที่ Login
    cat >> /home/oracle/.bashrc <<EOF
    . /home/oracle/scripts/setEnv.sh
    EOF
    • สร้างแฟ้ม /home/oracle/scripts/grid_env และแฟ้ม /home/oracle/scripts/db_env ด้วยคำสั่ง
    cat > /home/oracle/scripts/grid_env <<EOF
    export ORACLE_SID=+ASM1
    export ORACLE_HOME=\$GRID_HOME
    export PATH=\$ORACLE_HOME/bin:\$BASE_PATH
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
    EOF
    
    cat > /home/oracle/scripts/db_env <<EOF
    export ORACLE_SID=regist1
    export ORACLE_HOME=\$DB_HOME
    export PATH=\$ORACLE_HOME/bin:\$BASE_PATH
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
    EOF
    • reboot ด้วยคำสั่งต่อไปนี้ หากขึ้นให้ใส่ password ให้กรอก password ของ oracle
    sudo reboot
    • ทำซ้ำที่ rac2 อีกเครื่อง
    https://sysadmin.psu.ac.th/2021/01/18/grid-infrastructure-18c-2/

  • ORA-31623: a job is not attached to this session via the specified handle

    • ปัญหา
      • พยายามใช้ expdp แล้วเกิด error

    UDE-31623: operation generated ORACLE error 31623
    ORA-31623: a job is not attached to this session via the specified handle
    ORA-06512: at “SYS.DBMS_DATAPUMP”, line 3905
    ORA-06512: at “SYS.DBMS_DATAPUMP”, line 5203
    ORA-06512: at line 1

    งานมา…
    • เมื่อค้นข้อมูลไปเรื่อย ๆ จะพบว่าอาจเกี่ยวของกับการปรับแต่งค่าต่างๆ เกี่ยวกับ memory ซึ่งก็ได้ทำไปจริงนั่นคือการปรับ shared_pool_size ให้มีขนาดมากขึ้นทำให้หน่วยความจำสำหรับทำเรื่อง expdp ไม่พอ
    • แก้ไขได้ด้วยการลดค่า shared_pool_size ลง ด้วยคำสั่ง
    SQL> alter system set shared_pool_size=5G scope=both;
    • เพื่อปรับขนาด shared_pool_size ให้เป็น 5GB
    • และอาจต้องเพิ่ม streams_pool_size เพราะไม่ได้ลด shared_pool_size ให้เท่าเดิม เนื่องจากมีการเพิ่มหน่วยความจำของระบบให้มากขึ้นแล้ว ด้วยคำสั่ง
    SQL> alter system set streams_pool_size=128M scope=both;
    • เพื่อปรับ streams_pool_size ให้เป็น 128MB
    • และยังมี parameter บางตัวที่อาจเกี่ยวข้อง เช่น db_cache_size เป็นต้น
    • แต่ในครั้งนี้ปรับแค่สองอย่าง คือ shared_pool_size และ streams_pool_size ก็สามารถแก้ปัญหานี้ได้
    • จบ
    • ขอให้สนุก

    อ้างอิง

    ORA-31623: a job is not attached to this session via the specified handle
    UDI-31623: operation generated ORACLE error 31623 / ORA-31623

  • Canonical Livepatch Service

    Canonical Livepatch Service

    Apply critical kernel patches without rebooting.

    โฆษณา

    • Fixes are applied automatically, without restarting your system
    • Reduces downtime, keeping your Ubuntu LTS systems secure
      and compliant
    • Included as part of all Ubuntu Advantage for Infrastructure
      support packages
    • ใครควรใช้ เครื่อง ubuntu 16.04 ขึ้นไป
    • เริ่มได้
    • เปิดเว็บ https://auth.livepatch.canonical.com/ เลือก Ubuntu user แล้วกดปุ่ม Get your Livepatch token

    ก็จะไปหน้านี้

    • กด Accept all and visit site
    • ก็ให้ log in ให้เรียบร้อย หากยังไม่ได้สมัคร user ของ Ubuntu one ก็ให้เลือก I don’t have an Ubuntu One account เพื่อสร้าง account

    หลังจากกด Create account ให้ไปเช็คเมล์ที่ใช้ลงทะเบียนแล้วกด verify

    • ก็จะได้หน้าที่มี Token สำหรับลงทะเบียน
    • ติดตั้งโปรแกรมชื่อ canonical-livepatch ด้วยคำสั่ง
    sudo snap install canonical-livepatch
    • เมื่อติดตั้งเสร็จได้ผลลัพธ์ว่า

    canonical-livepatch 9.5.5 from Canonical✓ installed

    • แล้วต่อด้วยคำสั่ง copy จากในเว็บได้เลย
    sudo canonical-livepatch enable $TOKEN
    • โดย $TOKEN คือค่าที่ได้จากในหน้าเว็บ
    • ก็จะได้ผลว่าประมาณว่า

    Successfully enabled device. Using machine-token: xxxxxxxxxxx

    • เสร็จ!!! แบบง่ายๆ และงงๆ
    • และสำหรับ 1 email address สามารถใช้ token เดียวกันได้ 3 เครื่อง สำหรับผู้ใช้ฟรี!!
    • ตั้งแต่ใช้มาประมาณ 1 ปีครึ่ง ก็ไม่รู้ว่ามีอัพเดตอะไรบ้างเหมือนกัน กรั่กๆ
    • ตรวจสอบสถานะของ canonical-livepatch ด้วยคำสั่ง
    sudo canonical-livepatch status --verbose
    • ก็จะได้ประมาณว่า
    • จบขอให้สนุก

    อ้างอิง

    https://ubuntu.com/security/livepatch

  • How to apache2 HTTP/2

    • วันนี้อัพเกรตเครื่อง licensing เป็น 20.04.1 เลยมาดูว่ามีอะไรที่ควรเปลี่ยนอีกบ้าง ก็มี HTTP/2 นี่ละ ออกมาหลายปีแล้วยังไม่ได้เริ่มใช้งาน เท่าที่ตรวจสอบเว็บเซิร์ฟเวอร์ฝั่ง windows เป็น http/2 เกือบหมดแล้ว

    https://thanwa.medium.com/http-2-คืออะไร-แตกต่างจาก-http-1-1-อย่างไร-5dfb14e46ae4

    HTTP/1.1 และ HTTP/2 ต่างกันอย่างไร
    • เริ่มได้
    • ตรวจสอบก่อนว่า server ใช้ http/2 หรือไม่ทำได้โดยใช้ web developer tool บน web browser เช่น Firefox กด F12
    Web Developer

    คลิกหัวข้อ Network ซึ่งในครั้งแรกจะไม่สามารถดูได้ว่าใช้ http/2 แล้วหรือไม่ ให้คลิกขวาดังรูป แล้วเลือก Protocol

    Web Developer

    จะได้เป็น

    HTTP/1.1

    จะเห็น http/1.1 ในช่อง Protocol ถ้าเป็น http/2 จะได้ดังภาพ

    HTTP/2
    • ขั้นตอนต่อไปนี้ทำบน Ubuntu 20.04.1 อาจใช้ได้กับ 18.04.x ด้วยเช่นกัน
    • เริ่มด้วยการเปิด module ของ apache2 ที่ชื่อ http2 ด้วยคำสั่ง
    sudo a2enmod http2
    • เมื่อตรวจสอบแฟ้ม /etc/apache2/mods-enabled/http2.conf (ด้วย editor ที่ชื่นชอบ) จะพบว่ามีข้อความต่อไปนี้อยู่แล้ว
    Protocols h2 h2c http/1.1
    • โดยปกติ Http/1 จะถูกเรียกใช้ก่อนเสมอ เว้นแต่ว่า web browser นั้นจะรองรับ http/2 แต่เราต้องการ http/2 ถูกเลือกก่อนจึงต้องกำหนดตามนั้น
    • แต่ web browser ก็มีการเลือก Protocol เองด้วยเพื่อเป็นการบังคับให้เลือก ตามลำดับของ server ให้ใส่ข้อความต่อไปนี้เพิ่มลงไป
    ProtocolsHonorOrder On

    *** จากการทดสอบพบว่า web browser สมัยใหม่เลือก http/2 ก่อนอยู่แล้ว ไม่จำเป็นต้องใส่ก็ได้ เพราะงั้นแค่เปิดดูแล้วก็ออกจากแฟ้ม

    • รีสตาร์ท apache2 ด้วยคำสั่ง
    sudo systemctl restart apache2
    • ตรวจสอบว่า เป็น http/2 แล้วหรือไม่ด้วยคำสั่ง
    curl -I --http2 -s https://domain.com/ | grep HTTP

    ได้ผลดังภาพ

    curl

    แปลว่า http/2 ทำงานแล้ว

    • ทีนี้เว็บเรามันทำด้วย mod_php ต้องเปลี่ยนมาใช้ PHP-FPM
    • ติดตั้ง php7.4-fpm เพิ่มด้วยคำสั่ง
    sudo apt install -y php7.4-fpm
    • ปิดการใช้งาน mod_php ด้วยคำสั่ง
    sudo a2dismod php7.4
    • ปิดการใช้งาน apache mpm_prefork ด้วยคำสั่ง
    sudo a2dismod mpm_prefork
    • หลังจากนั้นเปิด การทำงานของ mpm_event, proxy_fcgi และ setenvif
    sudo a2enmod mpm_event proxy_fcgi setenvif
    • เปิดการทำงานของ php7.4-fpm ด้วยคำสั่ง
    sudo systemctl start php7.4-fpm
    • ให้ php7.4-fpm ทำงานทุกครั้งที่รีสตาร์ท
    sudo systemctl enable php7.4-fpm
    • เปิดการทำงานของ php7.4-fpm ใน apache2
    sudo a2enconf php7.4-fpm
    • เริ่มการทำงานของ apache2 ใหม่
    sudo systemctl restart apache2
    • ทดสอบว่าเป็น http/2 แล้วด้วยคำสั่ง
    curl -I --http2 -s https://domain.com/ | grep HTTP

    ได้ผลดังภาพ

    • จริงๆ ตรวจสอบด้วย web browser ก็ได้ แต่อยากอวด command line
    • จบขอให้สนุก

    อ้างอิง

    https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/

    https://httpd.apache.org/docs/2.4/howto/http2.html

  • Windows Terminal (3)

    • ติดตั้ง WSL2 ก็แล้ว แต่ใช้แค่ bash ดูไม่ว้าววววว เลย ให้ดูตัวอย่างก่อนที่

    https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

    สวยงามอล่างฉ่าง
    • มาติดตั้ง zsh และ theme กัน
    • เริ่มจากติดตั้ง zsh
    sudo apt install zsh
    install zsh
    • ต่อด้วยคำสั่งต่อไปนี้เพื่อติดตั้ง ohmyzsh
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    • จากภาพจะมีการเปลี่ยน default shell ด้วยเปลี่ยนจาก bash เป็น zsh ฉะนั้นเมื่อเปิด wsl terminal ครั้งใดก็จะได้เป็น zsh shell ทุกครั้ง
    • สิ่งที่เพิ่มมาและมีความสำคัญมากคือ .oh-my-zsh และ .zshrc
    • เสร็จละง่าย!! แต่ theme ตั้งต้นอาจจะไม่ฉูดฉาด
    • แก้ไขแฟ้ม .zshrc ด้วย editor ที่ชื่นชอบ!
    • ดูชื่อ theme ต่างๆ ได้ที่ https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
    • มองหาคำว่า ZSH_THEME=”robbyrussell” สามารถเปลี่ยน robbyrussell เป็นอย่างอื่นได้เลย เช่น bira เปลี่ยนแล้ว save เมื่อออกมาอยู่ที่ prompt ให้พิมพ์
    . ./.zshrc
    • (อ่านว่า จุด-เว้นวรรค-จุด-สแลช-จุด-แซ่ด-เอส-เอช-อาร์-ซี)
    • หรือพิมพ์ว่า
    source .zshrc
    • ก็จะเปลี่ยนหน้าตาไปทันที ก่อนหน้านี้ต้องเคยติดตั้ง powerline font มาก่อนซึ่งในตอนที่ 1 ได้ให้ติดตั้งไปแล้ว จะได้ดังรูป
    • สวยแล้ว ทั้งนี้สวยแต่ละคนไม่เท่ากันก็อาจจะลองเปลี่ยนเป็นชื่ออื่นๆ ได้เลย หรือหากต้องการเขียนเองก็ทำได้ อ่านเอกสารเองนะจ๊ะ
    • เท่านี้ก่อนสำหรับ zsh shell
    • สำหรับ zsh สามาติดตั้งได้บน linux server แทบทุกดิสโทรเลยทีเดียว และโดยเฉพาะอย่างยิ่ง ubuntu หรือ debian ยังมี repository และ plugin เสริมต่างๆ ของ zsh อีกด้วย (ค่ายอื่นอาจจะมีแต่ไม่ได้ใช้งานมากเลยไม่ทราบนะครับ)
    • จบขอให้สนุก
    • ต้นฉบับ https://ohmyz.sh/
  • Windows Terminal (2)

    Q: วันก่อนติดตั้ง WSL2 แล้วอยากใช้งาน bash บน Windows Terminal ด้วยทำไง?

    A: กด แล้วเลือก Ubuntu 20.04 ไงล่ะ!!

    Q: ไม่อยากกดเอาแบบเปิดมาแล้วเป็น ubuntu เลยอ่ะ

    A: แก้ Settings คลิก เลือก Settings

    จะเป็นการเปิดการตั้งค่าต่างๆ ด้วย Text Editor ที่ชื่นชอบ

    เลื่อนลงมาดูเรื่อยๆ จะเจอว่ามี Ubuntu-20.04 อยู่

    สนใจบรรทัดที่เขียนว่า “guid”: ให้ copy ข้อความที่อยู่ภายใน “{ }” มาทั้งหมด จากตัวอย่างคือ 07b52e3e-de2c-5db4-bd2d-ba144ed6c273 แล้วให้เลื่อนจอขึ้นไปด้านบนจนเห็นบรรทัดที่มีข้อความว่า “defaultProfile”: แทนที่ข้อความที่อยู่ภายในเครื่องหมาย “{ }” ด้วยข้อความที่ copy ไว้

    เปลี่ยนเป็น

    แล้ว save ปิดแล้วเปิดใหม่ก็จะได้ Ubuntu-20.04 เป็นค่า default

    • จบขอให้สนุก
  • SSH:- no matching key exchange method found

    เดี๋ยวนี้ใน Windows 10 ก็มี ssh ให้ใช้งาน แต่พอใช้กับเซิร์ฟเวอร์รุ่นเก่าๆ ก็เข้าไม่ได้ซะงั้น ไปลอง ssh ฝั่ง Linux (WSL2) ก็ให้ผลเหมือนกันคือ!!!

    Linux
    Windows
    • ถ้าเป็นเมื่อก่อน วิ่งไปหา putty อย่างไว…. แต่ Windows อุตส่าห์ทำมาให้ใช้แล้วทั้งทีจะไม่ใช้ได้ยังไง
    • สิ่งที่ต้องตรวจสอบก่อนคือ man ssh_config สำหรับ Linux ฝั่ง client ว่ารองรับ ciphers และ kexalgorithms แบบไหนรองรับหรือไม่ ส่วนฝั่ง Windows 10 จะอิงตาม OpenBSD manual ซึ่งเหมือนกับ Linux แหละ
    KexAlgorithms
    Ciphers
    • สร้างแฟ้ม .ssh/config โดย
      • Linux ก็จะให้สร้างที่ /home/username/.ssh/
      • Windows ก็อยู่ที่ C:\Users\username\.ssh
    • สำหรับ error ว่า no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 ให้เพิ่มข้อความต่อไปนี้ลงในแฟ้ม .ssh/config โดย somhost.example.org เป็นชื่อและโดเมนเนมของ server เป้าหมาย
    Host somehost.example.org
    	KexAlgorithms +diffie-hellman-group1-sha1
    • สำหรับ error ว่า no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se ให้เลือกมา 1 cipher ที่ปรากฎใน error มาใส่ในแฟ้ม .ssh/config
    Host somehost.example.org
        Ciphers aes256-cbc
    • บาง server ต้องรวมทั้งสองอย่างเช่น
    Host somehost.example.org
        KexAlgorithms +diffie-hellman-group1-sha1
        Ciphers aes256-cbc
    • ถ้าไม่อยากสร้างแฟ้ม .ssh/config สามารถสั่งผ่าน command line ได้เลยเช่น
    ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 oracle@somehost.example.org

    หรือ ถ้ามี error 2 อย่าง

    ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c aes256-cbc oracle@somehost.example.org

    เมื่อสร้างแฟ้ม .ssh/config แล้วลอง ssh เข้าไปใหม่

    Linux
    Windows
  • Windows Subsystem for Linux Installation Guide for Windows 10

    เพื่อเป็นการไม่เสียเวลา เริ่ม

    • เปิด Powershell ด้วยสิทธิ์ของ Administrator แล้วพิมพ์คำสั่ง ต่อไปนี้เพื่อเปิดใช้งาน “Windows Subsystem for Linux” หรือ wsl โดยจะเป็นรุ่น 1 หรือ wsl1
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    wsl1
    • ปรับรุ่นให้เป็นรุ่น 2 โดย Windows 10 ที่ใช้งาน ต้องเป็น Windows 10 version 2004, Build 19041 1903, Build 18362 ขึ้นไปเท่านั้น
    • ตรวจสอบรุ่นของ Windows ด้วยคำสั่ง winver (start->run)
    winver
    • เปิดใช้งาน Virtual Machine Platform พิมพ์คำสั่งต่อไปนี้ ใน powershell ของ administrator
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    Virtual Machine Platform
    • restart เครื่องเพื่อให้การปรับรุ่น wsl1 เป็น wsl2 สมบูรณ์
    • ตั้งค่าให้ wsl2 เป็นค่าเริ่มต้นด้วยคำสั่ง
    wsl --set-default-version 2
    Set default wsl2
    • ซึ่งจะเจอข้อความตามภาพ ให้ไปดาวน์โหลด kernel ได้จาก https://aka.ms/wsl2kernel โหลดมาแล้วติดตั้งให้เรียบร้อย (Next technology)
    download kernel
    • สั่งคำสั่งเดิมอีกครั้งเพื่อตั้งค่าให้ wsl เป็นรุ่น 2 เป็นค่าเริ่มต้น
    Set default wsl2
    • สามารถดูรายละเอียดความแตกต่างของ wsl2 ได้ที่ https://aka.ms/wsl2
    • ติดตั้ง Linux ที่ต้องการจาก Microsoft Store หรือคลิกลิงค์ด้านล่างเพื่อเข้า Microsoft Store
    ubuntu 20.04
    • ติดตั้งเสร็จแล้วคลิก Launch ใน Microsoft Store
    • จะเป็นการเปิดหน้าของลินุกส์ขึ้นมาและให้ตั้งค่าต่างๆ username และ password
    Setup
    • ตั้งค่าเสร็จได้ดังภาพ
    Fin
    • ตั้งค่าลินุกส์ให้เป็น wsl2 ตรวจสอบว่าเป็นรุ่นไหนอยู่ด้วยคำสั่ง
    wsl --list --verbose
    check version
    • ซึ่งถ้าหากยังเป็นรุ่น 1 สามารถเปลี่ยนได้ด้วยคำสั่ง
    wsl --set-version <distribution name> <versionNumber>
    • โดยแทนที่ <distribution name> ด้วยชื่อเต็มที่ได้จากคำสั่ง wsl –list –verbose เช่น Ubuntu-20.04 และ <versionNumber> ด้วย 1 หรือ 2 ตามต้องการ
    • จบขอให้สนุก

    ต้นฉบับ

    https://docs.microsoft.com/en-us/windows/wsl/install-win10