จาก Blog ตอนก่อน Interface แล้วได้ TextFile 0 bytes ตอนนั้นผมได้ตัดสินใจว่าจะ Lock Base Image ก่อน แต่ทว่าไม่มีวี่แววที่จะแก้ไข แล้วมีช่วงเวลานึงที่ว่างๆมั้ง เลยคิดว่า Issue นี้ควรจะเข้ามาดูเองแล้ว เลยตัดสินใจศึกษาข้อมูลเพิ่มพบว่า ตัว ICONV มัน On Top จากตัว GCONV ที่สามารถพัฒนาให้รองรับ Encoding ใหม่ๆได้ ดังนั้น
- ลอง pull image ล่าสุดที่ใช้มา และ ตรวจสอบ /usr/lib64/gconv พบว่ามีมันไม่มีไฟล์ TIS-620 เลยครับ
สรุปได้ว่าจริงๆ แล้วทีม Maintainer ของ Image Rocky / AlmaLinux น่าต้องการ Optimize Image เลยเอาออก
แต่ระบบที่เราดูปลายทางยังอยากได้ TIS-620 !!!
ยังไงต้องหาทางแก้ โดยมี Step ดังนี้
- เตรียม Image Container ของ Version เก่าที่สามารถใช้ TIS-620 ได้ หรือ Linux VM จากนั้นลองเข้าไปดูที่ไฟล์ /usr/lib64/gconv/gconv-modules ใช่แล้วครับ มันมีตาราง Map ของ TIS-620 ครับ
# from to module cost alias TIS620// TIS-620// alias TIS620-0// TIS-620// alias TIS620.2529-1// TIS-620// alias TIS620.2533-0// TIS-620// alias ISO-IR-166// TIS-620// module TIS-620// INTERNAL TIS-620 1 module INTERNAL TIS-620// TIS-620 1
- ดังนั้น ผมเลยตัดสินใจ Copy ทุกไฟล์ใน /usr/lib64/gconv ออกมา เดี๋ยวจะเอา TIS-620.so มามใช้ต่อครับ
ลองเอาไฟล์ TIS-620.so มา build cache ของ gconv-modules
ขั้นตอนการ build cache ของ gconv-modules ที่มี TIS-620 มีดังนี้
docker pull almalinux
- จากนั้นลอง Run Image ขึ้นมา
docker run -it --name testalmatis almalinux
- copy ไฟล์ TIS-620.so เข้าไป testalmatis
docker cp TIS-620.so df786d10456c:/usr/lib64/gconv
- ลอง docker exec เข้าไปตรวจสอบ และเตรียม Build gconv support encoding ใหม่ๆ
docker exec -it df786d10456c0767b80c86eba3b3f1e8c709550822c5fa7f9607d4b471a62bfd bash
- ใช้ vi แก้ไขไฟล์ /usr/lib64/gconv/gconv-modules
- Copy ตาราง Encoding ด้านล่างต่อท้าย
alias TIS620// TIS-620// alias TIS620-0// TIS-620// alias TIS620.2529-1// TIS-620// alias TIS620.2533-0// TIS-620// alias ISO-IR-166// TIS-620// module TIS-620// INTERNAL TIS-620 1 module INTERNAL TIS-620// TIS-620 1
- save และใช้ iconvconfig เพื่อ build cache file gconv-modules.cache ที่ path /usr/lib64/gconv/gconv-modules
#From /usr/lib64/gconv/gconv-modules run iconvconfig command iconvconfig
- ตรวจสอบว่าตัว iconv มันรองรับ TIS-620 ยัง ด้วยคำสั่ง
iconv -l | grep TIS
สำเร็จครับ ตัว TIS-620 โผล่ขึ้นมาครับ
Next Step
- เอาไฟล์ gconv-modules.cache + TIS-620.so และสร้าง Base Image ขึ้นมา จะได้ไม่ต้องมา Build ใหม่ทุกรอบ
FROM almalinux:latest #Update Timezone ENV TZ=Asia/Bangkok RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ## Packages ### SHELL ### Clear command(ncurses): ncurses-6.1 ### Package for db2: binutils-2.30 kernel-devel-4.18.0 patch-2.7.6 libaio-0.3.112 numactl-2.0.12 ### Openssh openssh-server-8.0p1 openssh-clients-8.0p1 ### JAVA: java-17-openjdk java-17-openjdk-devel ### -Ref: https://access.redhat.com/documentation/en-us/openjdk/17/html-single/installing_and_using_openjdk_17_on_rhel/index #RUN yum install -y ksh-20120801 ncurses-6.1 binutils-2.30 kernel-devel-4.18.0 patch-2.7.6 libaio-0.3.112 numactl-2.0.12 java-17-openjdk java-17-openjdk-devel; systemctl start sshd; systemctl enable sshd; yum clean all RUN yum install -y ksh-20120801 ncurses-6.1 binutils-2.30 kernel-devel-4.18.0 patch-2.7.6 libaio-0.3.112 numactl-2.0.12 openssh-clients-8.0p1 java-17-openjdk java-17-openjdk-devel; yum clean all ### Update iconv for knowing tis620 encoding COPY gconv-modules.cache /usr/lib64/gconv COPY TIS-620.so /usr/lib64/gconv
- จากนั้นตั้งให้ Jenkins Build Check + Deploy Check ทุก Week จะได้ตรวจสุขภาพไปด้วย
- ลองเอา Base Image ที่ได้มาลองเคส Interface แล้วได้ TextFile 0 bytes และใช่ครับ สำเร็จครับ ^__^
แต่น่าจะต้องลุ้นต่อไปว่าจะได้ย้าย Base Image ไหม จากข่าว Red Hat เลิกเปิดซอร์สโค้ด RHEL ต่อเว็บสาธารณะ ต้องล็อกอินบัญชีลูกค้าเท่านั้น | Blognone ครับ
Git Repo: pingkunga/make-iconv-support-tis-620 (github.com)
Reference
- unicode - Is there a way to extend iconv to support more encodings? - Unix & Linux Stack Exchange
- Linux "iconvconfig" Command Line Options and Examples (zoomadmin.com)
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.