くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

その他もろもろ

AlmaLinux9 Podman4でdocker-composeを動かす

ネット見てると色々やり方書いてあるのですが、"現時点(2022/8/8)"だと上手くいかないので特筆。

AlmaLinux 9 のminimalで実施。

あんまり良くないやり方のような気もするのですが、これしか上手くいく方法がなかった。

多分、ルートレス起動にしないとダメなのかしら。

結論のコマンド類まとめ(ユーザグループをrootにする版)

# update
sudo dnf update -y

# podmanのもろもろインストール
sudo dnf install podman podman-plugins podman-docker podman-remote -y

# podman本体の動作確認
podman --version
podman run hello-world

# docker-compose のインストール
sudo curl -L https://github.com/docker/compose/releases/download/v2.8.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# podmanのunix socketのサービス有効化
sudo systemctl enable --now podman.socket
systemctl status podman.socket

# リンク確認(/var/run/docker.sock: symbolic link to /run/podman/podman.sock)
sudo file /var/run/docker.sock

# パーミッション周り
sudo usermod -aG root ${USER}
sudo chmod 770 /var/run/podman

# 確認(jsonの文字列が返ってくればOK)
sudo curl --unix-socket /var/run/docker.sock http:/v1.41/info

# .bashrcに以下を追記
export DOCKER_BUILDKIT=0

# sourceの読み込みなおし
. ~/.bashrc

とりあえず、これでdocker-composeが動くようになる。

結論のコマンド類まとめ(ユーザグループ変えない版)

# update
sudo dnf update -y

# podmanのもろもろインストール
sudo dnf install podman podman-plugins podman-docker podman-remote -y

# podman本体の動作確認
podman --version
podman run hello-world

# docker-compose のインストール
sudo curl -L https://github.com/docker/compose/releases/download/v2.8.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# podmanのunix socketのサービス有効化
systemctl --user enable --now podman.socket

# サービスの起動確認
systemctl --user status podman.socket

# .bashrcに以下を追記(DOCKER_HOSTは上記statusでLISTEN:のパス)
export DOCKER_BUILDKIT=0
export DOCKER_HOST=unix:///run/user/1000/podman/podman.sock

# sourceの読み込みなおし
. ~/.bashrc


もろもろのエラーとか

podmanとdocker-compose入れて、「sudo systemctl enable --now podman.socket」だと、docker-compose buildとかupで下記のパーミッションのエラーが出る。

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dwsample%22%3Atrue%7D%7D&limit=0": dial unix /var/run/docker.sock: connect: permission denied

これをやるのにdockerの場合は「sudo usermod -aG docker ${USER}」みたいにするのですが、

podmanだとそもそもこれが無いので、実行ユーザでsocketのサービスを作る。

あと、これだとデフォでdocker-composeが見てるパスと変わっちゃうので、環境変数のDOCKER_HOSTで見る先を変更する。

上記を行うとパーミッションはクリアするのですが、次は下記エラーが出る。

listing workers for Build: failed to list workers: Unavailable: connection error: desc = "transport: Error while dialing unable to upgrade to h2c, received 404"

で、これのISSUEが下記。

https://github.com/containers/podman/issues/13889

どうも、podman4からセキュアなビルドを出来るようにしたらしく、これが悪さしてる模様。

なので、docker-compose を実行するユーザで、下記の環境変数を設定する。

export DOCKER_BUILDKIT=0

常時やりたい場合は「.bashrc」とかに書いておけば良いかな?


podman3でRHEL8.6くらいは問題なかったみたいですが、最新のバージョンだと色々無理っぽい。

確実に超絶無理矢理なやり方なので、何かいい方法ないかなー。

参考: RHEL公式DOC

VSCodeでリモートホストにSSH接続してる時に出るGitのエラー

VSCodeのRemoteSSHで別のホストにSSHで接続して、

Gitのコマンド実行すると下記の様なエラーが出る事がごくまれにある。

Missing or invalid credentials.
Error: connect ENOENT /run/user/1000/vscode-git-******.sock

VSCodeでGit使ってると、パスワードの入力させるダイアログがVSCode側で出てくるのですが、

どうもそれが悪さしてるらしい。

どうしようもない場合はこれを無効にすればよいと思いますが、

基本的に、ターミナルを一回落として上げなおすか、

VSCode自体を上げなおすと治る。

参考: stackoverflow

AWS Windowsのタスクスケジューラ

スタートアップ時に実行するタスク作っても、再起動で実行してくれない。

ハマったけど下記設定だった。。。

sample

AC電源使ってる場合のみっていう謎の設定がある。。。

何かこれないとダメになる事あるのかしら?

AWSというか仮想環境はこれ外さないと全部だめですかね。

Windows バッチファイルでコマンドがループ

タイトル通り。久しぶりにさわったら無茶苦茶ハマった。

Windowsで、とあるバッチファイル(.bat/.cmd)作って実行したら何故かコマンドが無限ループする。

全然分かんなくて調べてみたら原因は下記。

標準で使えるコマンドと同じ名前のバッチファイルだとこの事象が起きるらしい。

copy.batとかcmdkey.cmdとかとか。

まんまと罠にはまりましたとさ。。。

調べるのやたら時間かかった。。。

いやだって、「バッチコマンド 無限ループ」とかで調べても、ループの書き方しか出てこないんだもの。。。

AWS RDS DB数のクォータ

RDSのSQLServerでDB作ってたら下記のエラー。

Database creation would exceed quota of 30

サービスクォータでDB数の制限があるっぽいのですが、これクォータの中に無いと思うんだけども。。。

公式のクォータ一覧

上だと、DBの「インスタンス数」には制限あるけど、DB数は無いよね?

と思ったら、こっちの制限っぽいか。

Microsoft SQL Server DB インスタンスの制限

各インスタンスクラスタイプと可用性モードでサポートされるデータベースの最大数を示しています。

らしいので、可用性モードの場合は30までが限界っぽいですね。

うーん。増やせないんだろうか。。。

Docker for Windows の composeでproxyのエラー

Docker for Windows使ってて、結構ハマるので記載。

まず、proxy使ってる場合。Docker for Windowsのsettingsで下記を設定。

sample01

プロキシはこれで通るはず。

それでもネットワーク系のエラーが出る場合はsettingsのDockerEngineのjsonを下記の様にする。

sample02

上記の設定は色々あるっぽいですが、「insecure-registries」にdocker.io入れないと動かなかった。

この辺まではググれば大体出てくるはず。


で、ハマったエラー。

composeでproxyエラー

docker-compose buildでやると、下記の感じのエラーが出る。

failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch anonymous token: Get "https://auth.docker.io/token?scope=repository%3Alibrary%2Fmariadb%3Apull&service=registry.docker.io": proxyconnect tcp: EOF

これ多分、Docker for Windowsがバグってると思う。どうもcompose通した時のdocker pullがプロキシ使ってないっぽい。何か別の設定あるのかしら?

さらに言うと、「FROM mariadb:10.6」これは通らないけど、「FROM mariadb」これは何故か通る。なんじゃらほい。。。

なので、Dockerfileとかcompose.ymlで指定されているバージョンのイメージを先にpullしておくと上手くいく。

# こんな風に書かれてたら
FROM mariadb:10.6

# buildする前に手でpullしておく
docker pull mariadb:10:6

# 必要なイメージを全部pullしたら後は普通にbuild
docker-compose build
シェルスクリプトのエラー

実行すると、「/usr/bin/env: bash\r: そのようなファイルやディレクトリはありません」みたいなエラーになる事が結構ある。

これは改行コードがCRLFになってるから。LFのみに変えてあげないとだめ。

やり方は色々あると思いますが、vscode使ってるならvscodeでやるのが楽かも?

sample03

対象ファイル開いて、右下改行コードのところで変更できる。

というか、Gitの改行コードの設定をどうにかしないとホントはダメだと思うんだけど、上手いやり方が思いつかないというか調べてない。。。

AWS SQLServerのRDSの作成+バックアップとリストア

タイトル通りでハマった・迷ったところのみ記載。


作成

公式のドキュメントに載ってるままなのですが、照合順序の指定は最初からやっておかないとなので、作る時に下記が必要。

aws-sample01

日本語ベースで使うなら上記は必須かな。

あとセキュリティーグループで1433のポート開放しておかないと、SSMSで繋げなくなる。


復元

復元する場合、基本的にS3にバックアップファイル上げて、そこから復元する。

S3にアクセスするために、オプショングループの割り当てとか必要なのですが、その辺がいまいちわからなかった。

  • オプショングループ作成

aws-sample02

  • 追加したグループにオプションの追加

aws-sample03

  • で、ハマったのがここ

IAMロールを先に作らないとダメなのかと思って公式に記載のアレコレやってたのですが、そうじゃなくて、単純に「新しいロールの作成」選べば、よしなにやってくれる。

aws-sample04

  • インスタンスの変更からオプショングループを指定

aws-sample05

  • 復元

S3の所定のバケット内にバックアップファイルをアップロードして、SSMSで作ったインスタンスに接続して下記クエリを実行。

exec msdb.dbo.rds_restore_database 
@restore_db_name='復元後のDB名', 
@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name';


バックアップ

バックアップは上記復元の設定が出来てればあとはSQLで下記を実行。

exec msdb.dbo.rds_backup_database
@source_db_name='バックアップ対象のDB名', 
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name';


バックアップ・復元タスクの状況確認

実行したクエリの状況が見たい場合は下記

exec msdb.dbo.rds_task_status

この辺のSQLは公式のこの辺に記載されてるやつを見た方が良い。


あとバックアップの運用について。

スナップショットを自動で取ってはくれるのですが、スナップショットの復元って、必ず別インスタンスに復元されるじゃないですか?

中身のバックアップとってアタッチしたいだけなんだけどなー。

別インスタンスに復元されたところで、アプリのもろもろの設定変えないと意味ないしの。

まーそこから復旧出来るので十分ではあるのかもですが。

DB毎のDaily/Weeklyバックアップ的なのはSQLServerならSQLエージェント側で上記のバックアップSQLとか組んで実行しておくしかないかな?

他にやり方あるのかしら?

AWS instance-connect利用でブラウザでサーバコンソール触れるようにする

タイトル通り。

2年前くらいはこれなかったと思うのですが、いつから出来るようになったんだろ。

Azureはブラウザからサーバコンソールをちょろっと触れたり出来たので、AWSも出来ないかなーと思ってたところ、今見たら出来そうだったのでお試し。ちょっとはまった。

公式のドキュメント

流れ。

  1. セキュリティポリシーの変更
  2. EC2 Instance Connectをサーバ側にインストール
  3. EC2 Instance Connect の IAM アクセス許可を設定する


セキュリティポリシーの変更

今回はまったのがここ。動かない時は下記のエラーメッセージ出る。

We were unable to connect to your instance. Make sure that your instance’s network settings are configured correctly for EC2 Instance Connect.

普通に制限してるアクセス先のみのIP設定だけでよいと勘違いしてた。どうもそうじゃないらしい。AWSが公開してるリージョンのIPを解放しないとダメな模様。何かを経由してアクセスしてるのかしら?

AWSが公開してるIPの範囲

東京リージョンなら、3.112.23.0/29。(2021/2/2時点)

こんな感じで追加。

sample

EC2 Instance Connectをサーバ側にインストール

最近はデフォで入ってるらしい。入ってない場合は公式のドキュメントに書かれてる感じでインストール。

IAM アクセス許可を設定する

AWS CLI入ってる端末ならどこでも。

公式通りですが、こんな感じで設定。

例えばmy-policy.jsonで↓のような内容でファイル作る。

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": "ec2-instance-connect:SendSSHPublicKey",
        "Resource": [
            "arn:aws:ec2:region:account-id:instance/i-1234567890abcdef0"
        ],
        "Condition": {
            "StringEquals": {
                "ec2:osuser": "ami-username"
            }
        }
      },
      {
        "Effect": "Allow",
        "Action": "ec2:DescribeInstances",
        "Resource": "*"
      }
    ]
}

regionは東京リージョンなら、「ap-northeast-1」

account-idは対象IAMユーザのアカウントID。712345678901みたいなやつ。

/i-1234567890abcdef0のところは対象のEC2のインスタンスID。

ami-usernameはインスタンスへのログインユーザ名。デフォならec2-user

ファイル作ったら下記コマンド

aws iam create-policy --policy-name my-hogehoge-policy --policy-document file://my-policy.json

policy-nameは適切につけた方がよさげ。

aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-hogehoge-policy --user-name IAMユーザのAWSへのログインユーザ名

my-hogehoge-policyは一つ前のコマンドで指定したポリシー名。


これでブラウザからコンソールいじれるという寸法です。


2021/2/11追記

このブラウザ上のコンソール、タイムアウトが結構早い。10分くらい。

これ伸ばせないのかしら?設定的なものが見つからない。。。

電話とか来ると再接続メンドウ。

RHELの一部無償化のライセンス拡張?

以前、CentOS8終了のお知らせを書きましたが、RedHatが”部分的に”RHEL無償提供始めるっぽい?

さすがにボロクソに言われ過ぎたか。親のIBMを目の敵にする人も結構いましたし。。。

RedHat公式

もともとの開発用のRHELを拡張して、小規模本番利用も16システム(サーバ?)までは無償でいいよって事なのかな?

でも、小規模本番の方は

Individual Developer subscription for RHEL can be used in production for up to 16 systems.

でindividualっていうのが微妙かしら。

個人で何かサービス提供してる人はって事なのかな?

うーん。ライセンス出たらちゃんと読まないと何とも言えない。

開発用にAWSとかで建てるサーバはお金かからなくなるってことなのかしら?

We know that these programs don’t address every CentOS Linux use case, so we aren’t done delivering more ways to get RHEL easily. We’re working on a variety of additional programs for other use cases, and plan to provide another update in mid-February.

CentOSの代替になってないのは分かってるから、もっとライセンスの拡張考えてるそうで、2月中旬くらいに何か出すらしい。

どうなるかしら?

CentOS8は2021年末で終了予定らしい

2021年末でCentOS8は終了するらしい。

CentOSはStremに集中します[CentOS.org]

今までありがとうございました。

でも、どうしようかしら...

Streamは立ち位置が違うしの。社内で使う分にはいいかもだけど。

困る人はRedHatに相談しろ、って言ってるけど、

相談したら見積もりくるよね。RedHatに移れって事よね。

さて。。。


商用利用前提で考えると、やっぱりもうRHEL1択でしょうか?

社内サーバ用ならStreamでも十分すぎかな?

ちょっと様子見が必要そう。

ここのブログの解説が一番わかりやすいと思うのですが、

マイナーリリース想定だから、Streamもあり?

でも、結局、"RHELの開発ブランチのSnapshot"っていうのがアレなんですよね。

何かいいの無いかなー。

まー、おとなしくRHEL使えって事なんでしょうけども。。。

AWS CentOS Streamのイメージ


やっぱりstreamは無いかなー。お客さんに説明つかないし。

RHELの方がその辺は楽だけどやっぱりお値段がね...

いったん営業さんに聞いてみるしかないか。

フリーでいくなら、代替としてはubuntuかoracle linuxあたりになるのかしら?

昔はScientific Linuxっていうのもあったけど、調べてみたらこっちも終わってるのね。

oracle linuxはなー。oracleさんいつ手のひら返すか分かんないから手出すの怖いよね。RHELのリリースブランチのベースのcentos無くなって、何か変えて来たりするのかしら。

というかCentOS8自体最初は10年サポート保証してたように思うのでこっちも手のひら返したのか。。。

となるとubuntuしかない?DebianとかFreeBSDでも?

世界的にはubuntuの本番利用数はダントツでしたしね。

ただ、どういうところが何に使ってるのかにもよるけども。。。

デスクトップの延長線でそのままサーバにしてるところが多かったりしたら微妙な気も。

CentOS使ってる人間からすると、ubuntuはどうしても体系が違うから、それまでの技術資産が通用しなくなるのが痛いよね。

k8s系のところとかどうなんでしょ。。。

うーん。結局お金ないからCentOS使ってるんだろうし。

もういっそWindowsもありかしら?それこそ技術資産通用しないか。

やっぱRHELかなー。

まー技術には金払えって事だ。ド正論過ぎて何も言えない。


CentOSのフォーラム見てたら、RockyLinuxとCloudLinuxっていうのがあるみたいですね。

https://forums.centos.org/viewtopic.php?f=54&t=76600

https://forums.centos.org/viewtopic.php?f=10&t=76601

まだリリースされてないのかな?ただ、すぐには選択肢には入らなそう。

フォーラムでもやっぱりoracle linuxは選択肢に上がってるけど、

声を出す人の中ではoracleさんは信用できない感じみたい。特に反論も見ないの。

将来も大丈夫だろうと期待を込めれる人はoracle linuxの方が良さげ?

問合せ