Jamyy's Weblog

在 x64 Linux 桌面利用 Docker 技術進行「稅額試算服務線上登錄」作業

by Jamyy on 五月.03, 2015, under Linux

操作環境:

  • elementary OS 0.3 Freya x86_64 (based on Ubuntu 14.04 LTS)
  • Easy ATM III 晶片讀卡機 + 自然人憑證

技術重點:

  • 取得 32bit/ubuntu:14.04 image
  • 在 container 安裝 firefox、java、pcscd 以及安裝憑證等
  • 讓 container 使用 host 的 usb 裝置
  • 運行 container 裡的 GUI application (firefox)


2016-04-26 更新: 在 Linux Mint 17.3 (based on Ubuntu 14.04.4) x64 操作的補充說明

  1. 套件名稱: docker.io
  2. 允許 Firefox 安裝本地 xpi: about:configxpinstall.signatures.required 改 false
  3. 自然人憑證用戶端元件網址: https://pfiles.tax.nat.gov.tw/ibxpdf/include/npHiPKIClient-linux-etax.xpi
  4. Host 的 Firefox 視窗必須關閉, 才能在 Guest 叫出 Guest 的 Firefox



前置作業

安裝 docker-io 套件
$ sudo apt-get install docker-io

讓自己帳號加入 docker 群組, 免 sudo 執行 docker 指令
$ sudo usermod -a -G docker myaccount

免登出直接隸屬 docker 群組
$ newgrp docker

建立 32bit/ubuntu:14.04 image

$ wget https://github.com/docker-32bit/ubuntu/raw/master/build-image.sh
$ sudo sh ./build-image.sh

container 環境配置

$ xhost +
$ docker run --rm -it -e DISPLAY=unix$DISPLAY \
   -v /tmp/.X11-unix:/tmp/.X11-unix 32bit/ubuntu:14.04 bash

安裝 firefox 與中文字型
# apt-get -y install firefox ttf-wqy-microhei wget

配置 Java 環境
# wget "http://javadl.sun.com/webapps/download/AutoDL?BundleId=106238" -O /tmp/java.tar.gz
# mkdir /usr/lib/jvm
# cd /usr/lib/jvm
# tar zxf /tmp/java.tar.gz
# update-alternatives --install /bin/java java /usr/lib/jvm/jre*/bin/java 1
# update-alternatives --set java /usr/lib/jvm/jre*/bin/java
# mkdir -p ~/.mozilla/plugins
# ln -s /usr/lib/jvm/jre*/lib/i386/libnpjp2.so ~/.mozilla/plugins/

安裝晶片讀卡機相關套件
# apt-get -y install pcscd libccid pcsc-tools

安裝 "中華電信自然人憑證用戶端元件"
# wget https://pfiles.tax.nat.gov.tw/ibxpdf/include/npHiPKIClient-linux.xpi -O /tmp/linux.xpi
# firefox

於網址列輸入 file:///tmp/linux.xpi

將配置好的 container 另存為 ubuntu1404:i386 image
$ docker commit xxxxxxx ubuntu1404:i386

結束 container
# exit

將 USB 晶片讀卡機插入 host, 運行 container 裡的 firefox 進行「電子申報所得稅」作業

$ xhost +
$ docker run --privileged --rm -it -e DISPLAY=unix$DISPLAY \
   -v /tmp/.X11-unix:/tmp/.X11-unix -v /dev/bus/usb:/dev/bus/usb \
   -v /tmp:/mnt ubuntu1404:i386 bash

# pcscd
# firefox

說明:

  • -v /tmp:/mnt 的用意在於: 讓 host 丟檔案到 /tmp 給 container 到 /mnt 接收使用, 亦可讓 container 產生的檔案丟到 /mnt, 在 host 的 /tmp 撈出使用
  • host 不得安裝、執行 pcscd, 以免由 host 搶走 usb 裝置的控制權



補充: 操作過程中, 遇到必須由 java 處理的部分會 lag 許久, 但耐心等候仍可獲得正常結果。



Ref:



:, , ,