OCI ampere
- Oracle OCI において arm64 VM が free tierで使えるようになった
- しかも x86 vm (1GB)と比較してメモリも6GBと大盤振る舞い (x86は 1GB)
- とりあえず確保し、手持ちの docker上にも同じような構成を作り、開発環境を整えてみる
docker上のarm64 linuxならinstant clientもあるし..
ssh 秘密キーをダウンロードし
.ssh/ociampere.key
として保存、chmod 600 としておくログイン
ssh -i .ssh/ociampere.key opc@999.999.999.999 Activate the web console with: systemctl enable --now cockpit.socket [opc@ampere ~]$
- tcshなどはほしいのでインストールしておく
sudo dnf install tcsh
sudo dnf install psmisc
killall
コマンドのため
- instant client は v19の古いものしかないがインストール
sudo dnf -y install oracle-release-el8 sudo dnf -y install oracle-instantclient19.10-basic sudo dnf -y install oracle-instantclient19.10-devel sudo dnf -y install oracle-instantclient19.10-sqlplus
- Dockerで同じ 環境を整備すると
FROM oraclelinux:8 EXPOSE 3000 # opc用開発環境イメージ作成用dockerfile for OCI Ampere # network 作成 # docker network create devnetwork # イメージ作成 # docker build . -t amperelinux # x86でビルドする場合 docker build --platform linux/arm64 . -t amperelinux # 実行:(port 3000 を開発でテストする場合) # docker run -d -it -p 3000:3000 --name amperelinux -v /Users/hogehoge/Develop:/home/opc/Develop --network devnetwork amperelinux # 削除 # docker stop amperelinux ; docker container rm amperelinux ; docker rmi amperelinux # containerに入る # docker container exec --user opc -w /home/opc/Develop -it amperelinux /usr/bin/tcsh RUN dnf -y install tcsh sudo rust cargo zip unzip file patch openssl-devel glibc-langpack-ja glibc-locale-source && \ dnf -y install util-linux-user-2.32.1-27.el8 && \ dnf -y install oracle-release-el8 && \ dnf -y install oracle-instantclient19.10-basic && \ dnf -y install oracle-instantclient19.10-devel && \ dnf -y install oracle-instantclient19.10-sqlplus && \ useradd opc -g wheel && \ mkdir /home/opc/Develop && \ # copy timezone to JST .. docker環境下ではtimedatectlやlocalectlが使えない # docker内では localectl は使えないが、localedefは使える cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 USER opc ENV ORACLE_HOME /usr/lib/oracle/19.10/client64/lib ENV NLS_LANG JAPANESE_JAPAN.AL32UTF8 ENV TNS_ADMIN $ORACLE_HOME/network/admin ENV LANG="ja_JP.UTF-8" \ LANGUAGE="ja_JP:ja" \ LC_ALL="ja_JP.UTF-8" USER root
error[E0308]: mismatched types --> /home/opc/.cargo/registry/src/github.com-1ecc6299db9ec823/oracle-0.5.3/src/statement.rs:477:56 | 477 | dpiStmt_getBindNames(handle, &mut num, names.as_mut_ptr(), lengths.as_mut_ptr()), | ^^^^^^^^^^^^^^^^^^ expected `u8`, found `i8` | = note: expected raw pointer `*mut *const u8` found raw pointer `*mut *const i8`
- i8をu8に直してコンパイルを通す
- patch
patchのあてかた
cd /home/opc/.cargo/registry/src/github.com-1ecc6299db9ec823
(1e..の部分は環境で変わる)patch -p 0 < u8patch.txt
バイナリはoci containerにコピーすればそのまま動いた