たろログ2

実験的運用により、記事品質が乱高下することがあります。予めご了承ください。

2022-08-31 RPM Spec ファイルの Scriptlets について

Scriptlets

Spec ファイルに記載されている %post, %pre などのマクロは「Scriptlets」といいます。

Scriptlets :: Fedora Docs (fedoraproject.org)

rpm -irpm -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 で購入したが、積んでいた書籍である。

情報

データを「観点」や「文脈」に従って抽出し、利用者にとって有用な形としたもの。

例.)

利用者の目的:「このお客さんは、どのような商品であれば買うだろうか?」ということが知りたい。

問い:「このお客さんは、どのような商品であれば買うだろうか?」

情報:「このお客さんは、どのような商品であれば買うだろうか?」という問いに対する答え。

データ:「このお客さんは、この日時にこの商品を買いました」というデータ。

観点や文脈:「このお客さんはどのような時期によく商品を買うのか」

「どのような種類の商品を買っているのか」

「お客さんの属性はどのようなものか (日本人、男性、若者、大阪在住など」

「似た属性の人が買うのはどのようなものか」

データ

単なるデータ。それ単体や、無加工の状態では役に立たないことが多い。

多くの場合量が膨大であり、ただ眺めていても役に立たない。

例.) 「このお客さんはこの日時に、この商品を買いました。」

観点 (文脈)

膨大なデータに対し、分析を加える際の羅針盤のようなもの。

RDBMS でいえば、これに従って SQL が作成される。

例.) 「このお客さんはどのような時期によく商品を買うのか」

例.) 「どのような種類の商品を買っているのか」

例.) 「お客さんの属性はどのようなものか (日本人、男性、若者、大阪在住など」

例.) 「似た属性の人が買うのはどのようなものか」

データベースの歴史

データベースの概念は、磁気ディスクなどの直接アクセス記憶媒体の登場によって可能となった。

それまでの磁気テープの時代においてはデータは順次保存されるものであり、データベースの概念の実現は難しかった。

これらは対比的に、「バッチ処理による保存」と「対話的な保存」として表現することもできる。「バッチ処理による保存から対話的な保存へ」というような感じである。

2022-08-25 データベーススペシャリスト試験 過去問題を解く

前書き

今日は令和三年度の問題への解答を終え、令和二年度の問題に続けて解答した。

本当に解答しただけで、間違えた問題の見直しや、わからない単語の調査などは行っていない。とりあえず一通り解くことを優先している。

こうやってメモをする必要もないかも。問題のレベル感を確認したり、解くことになれたりするのが目的なので。

明日は 令和2年秋期問8 SQL文の実行結果はどれか から進めていく。

令和3 問16

令和3年秋期問16 多版同時実行制御(MVCC)

「多版同時実行制御」って知らなかった。

令和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

Dockerfile リファレンス — Docker-docs-ja 20.10 ドキュメント

Copy multiple directories with one command - Stack Overflow

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 であることが出力からわかります。