2022-08-31 RPM Spec ファイルの Scriptlets について
Scriptlets
Spec ファイルに記載されている %post, %pre などのマクロは「Scriptlets」といいます。
Scriptlets :: Fedora Docs (fedoraproject.org)
rpm -i
や rpm -U
, rpm -e
を実行した際において、任意のスクリプトを実行することができます。
httpd などのパッケージインストールにおいては、 ユーザの作成やデーモンの起動、自動起動の設定などに使われています。
初期インストール時のみに実行したい処理
例として、初期インストール時のみに実行したい場合は、以下のように制御します。
%post if [ $1 -eq 1 ]; then # 初期インストール時の処理... fi
2022-08-30 RPM spec ファイルを書く
前書き
RPM spec ファイルを書いた。
体系的に整理しないまま、今日実施して分かったことについて書く。
Source0 の形式は %{name}-{version}
Source0 の形式は %{name}-{version} がよい。
また、解凍した際に作成されるフォルダの形式も %{name}-%{version} がよい。
Source0: %{name}-%{version}.tar.gz
横着して %{name}.tar.gz
として実行したら
%prep %setup -q
で 「cd に失敗した」というエラーが出てしまった。
tar.gz ファイルの作成方法
例として、 tar.gz ファイルは以下のように作成する。
NAME=package_name cp "$NAME/$NAME.spec" . VERSION=$(grep 'Version' $NAME.spec | grep -o -e "[0-9]*\.[0-9]*\.[0-9]*") RELEASE=$(date +%s) WORKDIR=.dev mkdir -p $WORKDIR rm -rf ./$WORKDIR/$NAME-$VERSION cp -r ./$NAME/ ./$WORKDIR/$NAME-$VERSION
2022-08-28 データベースについて学ぶ
まえがき
データベーススペシャリストの午前Ⅰの問題を解いていたが、想像に比べてあまりにも難しく感じたので、一度「達人に学ぶ DB 設計」という書籍を通して読んでみることにした。
昔 Kindle で購入したが、積んでいた書籍である。
情報
データを「観点」や「文脈」に従って抽出し、利用者にとって有用な形としたもの。
例.)
利用者の目的:「このお客さんは、どのような商品であれば買うだろうか?」ということが知りたい。
問い:「このお客さんは、どのような商品であれば買うだろうか?」
情報:「このお客さんは、どのような商品であれば買うだろうか?」という問いに対する答え。
データ:「このお客さんは、この日時にこの商品を買いました」というデータ。
観点や文脈:「このお客さんはどのような時期によく商品を買うのか」
「どのような種類の商品を買っているのか」
「お客さんの属性はどのようなものか (日本人、男性、若者、大阪在住など」
「似た属性の人が買うのはどのようなものか」
データ
単なるデータ。それ単体や、無加工の状態では役に立たないことが多い。
多くの場合量が膨大であり、ただ眺めていても役に立たない。
例.) 「このお客さんはこの日時に、この商品を買いました。」
観点 (文脈)
膨大なデータに対し、分析を加える際の羅針盤のようなもの。
例.) 「このお客さんはどのような時期によく商品を買うのか」
例.) 「どのような種類の商品を買っているのか」
例.) 「お客さんの属性はどのようなものか (日本人、男性、若者、大阪在住など」
例.) 「似た属性の人が買うのはどのようなものか」
データベースの歴史
データベースの概念は、磁気ディスクなどの直接アクセス記憶媒体の登場によって可能となった。
それまでの磁気テープの時代においてはデータは順次保存されるものであり、データベースの概念の実現は難しかった。
これらは対比的に、「バッチ処理による保存」と「対話的な保存」として表現することもできる。「バッチ処理による保存から対話的な保存へ」というような感じである。
2022-08-25 データベーススペシャリスト試験 過去問題を解く
前書き
今日は令和三年度の問題への解答を終え、令和二年度の問題に続けて解答した。
本当に解答しただけで、間違えた問題の見直しや、わからない単語の調査などは行っていない。とりあえず一通り解くことを優先している。
こうやってメモをする必要もないかも。問題のレベル感を確認したり、解くことになれたりするのが目的なので。
明日は 令和2年秋期問8 SQL文の実行結果はどれか から進めていく。
令和3 問16
「多版同時実行制御」って知らなかった。
令和3 問17
「IndexedDB」って知らなかった。
令和3 問18
「Apache Hadoop」「Apache Spark」このあたりの技術はさっぱりだ。まずは知りたいし、強化していきたい。
令和3 問20
「ベイジアンフィルタ (Bayesian Filter)」というのがあるらしい。
ベイジアンという名前は「単純ベイズ分類器」という教師あり学習モデルから来ている。
さらにその「ベイズ」は「ベイズの定理」から来ており、この定理の発見者の名に因む。
令和2年 問7
「COALESCE」って関数を知らない。また、 JOIN 関数に少し弱い。
2022-08-15 データベーススペシャリスト試験 令和三年度 午前Ⅱ問題を解く
前書き
応用情報技術者試験に合格しているため、午前Ⅰ の問題は免除される。
午前Ⅱ の問題の過去問を解き始めた。 令和3年 (2021年) 秋の問題である。
問1
CAP定理ってわからん
問2
モデル A は馴染みがあるが、 B は微妙、 C は読み取ることが非常に難しく感じた。
問3
間違えた。正規系の理論って全くしっくりこない
問5
情報無損失分解わからん
問7
「READ UNCOMMITTED」「READ COMMITTED」「REPEATABLE READ」そして「SERIALIZABLE」
ダーティリード(汚読)
他のトランザクションが更新したコミット前の値(ダーティデータ)を読み、その後更新処理を行ったトランザクションがロールバックされると、存在しない値を読み込んだことになってしまう異常
ノンリピータブルリード(再現不可能な読み)
同じトランザクションで複数回の読込みを行ったとき、読込む度に値が変わってしまう異常。2回の読込みの間に、別のトランザクションがそのデータを更新したことが原因で発生する。
ファントムリード(幽霊)
同じトランザクションで複数回の読込みを行ったとき、前回は存在しなかった行が現れる異常。2回の読込みの間に、別のトランザクションがテーブルに行を挿入したことが原因で発生する。
2022-08-11 Docker におけるファイルコピー
前提
記載例は、自分がプライベートで作成している PHP アプリケーションの Dockerfile から借用した。
COPY vs ADD
ADD
は、 tar ファイルを解凍しつつコピーする際に利用する。
基本的には、機能が絞られていてシンプルな COPY
を利用することが推奨されている。
ファイルのコピー
下記のようにコピーする。複数ファイルのコピーが可能である。
COPY ./phinx.php ./ COPY ./composer.json ./composer.lock ./ COPY ./bin/run.sh ./bin/
コピー先がディレクトリの場合は、最後にスラッシュをつけること。
以下のようにコピーすると、./bin/run.sh のコンテンツが、 ./bin という名称でファイルコピーされてしまう。
COPY ./bin/run.sh ./bin
ディレクトリのコピー
以下のように行う。
COPY ./db ./db COPY ./src ./src
残念ながら、以下のようにまとめて記載することはできない。
COPY ./db ./src ./
この場合、 ./db、./src のコンテンツの中身が、 ./ 以下に展開されてしまう。
つまり、コンテナ内のファイル構造はこんなことになる。
./Application ディレクトリなどは、元々 ./src 以下にあったものである。
これが ./ 以下に展開される形でコピーされているのがわかる。
total 2920 drwxrwxrwx 1 www-data www-data 4096 Aug 11 06:47 . drwxr-xr-x 1 root root 4096 Apr 10 2021 .. drwxrwxr-x 3 root root 4096 May 5 20:54 Application drwxrwxr-x 11 root root 4096 Feb 22 14:10 Domain drwxrwxr-x 2 root root 4096 Jan 16 2022 Exception drwxrwxr-x 9 root root 4096 Feb 10 04:28 Infrastructure -rw-rw-r-- 1 root root 786 May 5 23:16 composer.json -rw-rw-r-- 1 root root 187598 May 5 20:54 composer.lock -rwxr-xr-x 1 root root 2722254 Aug 11 06:39 composer.phar drwxrwxr-x 2 root root 4096 Dec 25 2021 migrations -rw-rw-r-- 1 root root 1138 Feb 8 2022 phinx.php -rw-rw-r-- 1 root root 63 Aug 11 06:42 run.sh -rw-rw-r-- 1 root root 1532 May 5 22:55 runCheck.php drwxr-xr-x 21 root root 4096 Aug 11 06:47 vendor
Ref
2022-08-09 システムにおいて変更された rpm パッケージの一覧を確認する
前書き
アプリケーションのインストール前後など、システムにおいて変更された rpm パッケージの一覧を確認したいタイミングがあります。
確認方法
以下のコマンドを実行することで、その変更時刻から変更された rpm パッケージの一覧を得ることができます。
# rpm -qa --last redis-3.2.12-2.el6.x86_64 Wed 10 Mar 2021 02:23:27 AM EST supervisor-2.1-9.el6.noarch Wed 10 Mar 2021 02:23:25 AM EST kernel-2.6.32-754.31.1.el6.x86_64 Wed 15 Jul 2020 09:17:41 PM EDT udev-147-2.74.el6_10.x86_64 Wed 15 Jul 2020 09:17:31 PM EDT ...
アプリケーションのインストール日時と照らし合わせて、その前後で変更されたパッケージが Redis と Supervisord であることが出力からわかります。