gikoha’s blog

個人的メモがわり

OCI ampere

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
  • ところが oracle crate を rustでコンパイルすると x86_64では問題なかった "char" が "unsigned char" になっているためか、山のようにエラーが出る
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`