くりーむわーかー

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

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

Python windowsのpython、pipのエラー(proxy環境下

随分久しぶりに書く気がする。

WindowsのPythonをしばらくぶりにセットアップしたらpipが動かなくなってた。

Python3.9のインストーラーだとだめっぽい。

Python3.6あたりのインストーラーにしないと無理っぽ。

urllibでプロキシ情報を渡すjson定義が変わったらしく、対応出来てない模様。

まだ治ってないのかな?

しばらく、3.6辺りを使わないと無理。というかpip21に上げちゃうとダメっぽ。


pipでproxy使う場合は環境変数に下記を入れておく。

set HTTP_PROXY=http://[userid]:[pass]@hoge.fuga.proxy:[port]
set HTTPS_PROXY=http://[userid]:[pass]@hoge.fuga.proxy:[port]

pip実行時のオプションでも行けるけど、上手く動かない事があるらしいので、↑の方が確実かな?

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月中旬くらいに何か出すらしい。

どうなるかしら?

CentOS AmazonLinux で デスクトップのGifアニメを録画するツール

デスクトップのGif動画を撮るツールってScreenToGifっていうのがWindowsではある。

ScreenToGif( 公式 | GitHub )

で、Linuxで似たようなツールを探したのですが、下記がインストールも楽だった。

peek ( GitHub )

ReadMeには色んなインストールが載ってて分かりにくいのですが、

CentOS、AmazonLinuxなら下記flatpak使うのが楽っぽい。

# flatpakを入れて、flathubのリポジトリ登録
sudo yum install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# 端末再起動

#peekのインスト
flatpak install flathub com.uploadedlobster.peek

#peekの実行
flatpak run com.uploadedlobster.peek

使い勝手もなかなか良いと思います。素晴らしい。

AWS CentOS Streamのイメージ

CentOS8が終了することが発表[CentOS.org]されましたが、AWSのイメージにstream版ないんですよね。

ただ、FAQ見るとCentOS8から下記だけでstream版に切り替えられるらしい。

root@centos-linux# dnf install centos-release-stream

root@centos-linux# dnf swap centos-{linux,stream}-repos

root@centos-linux# dnf distro-sync

root@centos-stream# cat /etc/centos-release
CentOS Stream release 8

Stream使う場合は、当面はこれでいくしかないかな?

関連の投稿

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の方が良さげ?

LinuxのシェルでUNIXTIME確認

メモ。

# 今のUNIXTIME
date +%s

# UNIXTIMEを西暦日時表示
date -d @1607001913 +"%Y/%m/%d %T"

# UNIXTIMEの一日
86400

Python Django+uWSGIの設定

公式に載ってるやつだと上手くいかないので特筆。


結論から言うと下記コマンド。

uwsgi --chdir=/path/to/your/project \
    --module=mysite.wsgi:application \
    --env DJANGO_SETTINGS_MODULE=mysite.settings \
    --home=/path/to/virtual/env \
    --master --pidfile=/tmp/project-master.pid \
    --http=0.0.0.0:8088 \
    --processes=5 \
    --harakiri=20 \
    --max-requests=5000 \
    --vacuum \
    --buffer-size=32768

socket じゃなくて http。

buffer-sizeの指定が必要。

これやらないと↓のエラーが出る。

# buffer-size指定なしだとuwsgi側のログで↓
invalid request block size: 21573 (max 4096)...skip

# httpにしておかないと、ブラウザ側(Chrome)で↓
ERR_EMPTY_RESPONSE

socket指定はnginxでリバースプロキシ構成にしてdjangoにアクセスする場合。

直でブラウザからuwsgi叩く時はhttpにしておかないとダメ。

あとバッファがデフォで4kbで少ないので多めにセットしてあげないとほとんど動かない。

ファイルで指定の場合は↓の感じ。

[uwsgi]

chdir=/path/to/your/project
module=mysite.wsgi
home=/path/to/virtual/env
env=DJANGO_SETTINGS_MODULE=mysite.settings

http=0.0.0.0:8088
buffer-size=32768
master=true
max-requests=5000
processes=3
enable-threads=true
vacuum=true
env=LANG=en_US.UTF-8
問合せ