ทำให้ตัว ICONV support TIS-620

จาก 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


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.