サーバ更新2024

VPSの長期割終了に伴い、サーバの再構築を行う。 今回はCentOS8->CentOS9の更新。

タスク

  • 作業ユーザの作成
  • hostname
  • ssh関連の設定
  • swapfileの追加
  • docker、docker composeのインストール
  • firewall関連の設定
  • smtp, root宛のメールの転送設定
  • webサーバの設定
  • let's encrypt
  • vpn
  • bgp

hostname

echo host1.example.com > /etc/hostnameなどでhostnameを上書き

systemctl restart NetworkManager

を忘れずに実行

ssh関連の設定

PasswordAuthentication no
PermitRootLogin no

を/etc/ssh/sshd_configに書き込んで終わりと思ったらそうじゃない。

/etc/ssh/sshd_config.d/01-permitrootlogin.conf /etc/ssh/sshd_config.d/50-cloud-init.conf に

PermitRootLogin yes
PasswordAuthentication yes

って書いてある!動作確認せずに設定した気になっていると危ない。

swapfileの追加

swapを増やしておく。

 sudo dd if=/dev/zero of=/var/spool/swap/swapfile2 bs=1M count=2048
 sudo chmod 600 /var/spool/swap/swapfile2
 sudo mkswap  /var/spool/swap/swapfile2
 sudo swapon  /var/spool/swap/swapfile2
 free -m  # swapが増えたことを確認する
 # 永続化する場合はfstabに追記する
 sudo vi /etc/fstab

smtp

インストール

sudo yum install postfix

設定ファイル変更

18c118
< #myorigin = $mydomain
---
> myorigin = $mydomain
135c135
< inet_interfaces = localhost
---
> inet_interfaces = all

spfdnsのhostnameを書き換えて以下を実行。/var/log/maillogで送信が問題ないことを確認。

echo -e 'Subject: TitleA\n\nHello!\nWorld' | sendmail -f user_name@from.example.com user_name@to.example.com

/etc/aliasesに

root:  <作業用ユーザ>
<作業用ユーザ>:  <転送したいメールアドレス>

を追記し

sudo newaliases

を実行する。

lets encrypt

以下で、インストールと設定が完了。

sudo yum install epel-release
sudo yum install certbot
certbot certonly --manual -d "*.example.com" -m "mail@example.com" --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --manual-auth-hook <path/to/script> --manual-cleanup-hook <path/to/script>
/usr/bin/certbot renew --dry-run --manual -m "mail@example.com" --agree-tos --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --manual-auth-hook <path/to/script> --manual-cleanup-hook <path/to/script> --post-hook 'systemctl restart httpd'

webサーバの設定

とりあえずapacheの設定をしておく(nginxに移行したいがまた今度)

sudo yum install httpd mod_ssl php-fpm

phpのメジャーバージョンが変わっていてpukiwikiが動かない(php7->8)。。。 別途考える。

vpn

libreswanにてデフォルトでikev1動作しなくなったようである。 (ignoring IKEv1 packet as policy is set to silently drop all IKEv1 packetsとなる) ikev2で動かしてみるがうまくいかなかったので、ikev1で動かすことにする。

sudo yum install libreswan xl2tpd

xl2tpd.service内のmodprobe l2tp_pppをコメントアウトすることで対応した。

ppp0に対するfirewalldの設定

/etc/sysctl.confに以下を追記し、sysctl -pで反映

net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.rp_filter = 0

にして、ipsec関連の設定ファイルを移植して、

sudo systemctl enable ipsec
sudo systemctl start ipsec

をする。

ikev2で動かしてみたところ、これまでトンネルを張っていた対向(strongswan)では

received TS_UNACCEPTABLE notify, no CHILD_SA built
failed to establish CHILD_SA, keeping IKE_SA

となっている。ipsec verifyの結果としては

000 IKE SAs: total(1), half-open(0), open(0), authenticated(1), anonymous(0)
000 IPsec SAs: total(0), authenticated(0), anonymous(0)

となる。ちゃんとデバッグしないと動作しなさそう。

/etc/ipsec. confに以下を追記してとりあえずikev1で動かす。v2への移行も進めるか。

ikev1-policy = accept

bgp

sudo yum install bird

をして、設定ファイルを移植。

sudo systemctl enbale bird
sudo systemctl start bird

にて完了。設定ファイルの内容は割愛。

ip route

にてbgp経由のルートが表示されることを確認する。

まとめ

  • PHPVPN(libreswan)のバージョン違いによりそのままの設定ファイルで動作しない現象が発生した。対処はまた考えることにする。

LINE botとLLMを連携させてオレオレ秘書にしたい

TL; DR

  • LINE --- 自前サーバ --- LLMの構成で、やり取りを記録しつつ、自分の問い合わせに答えてくれるシステムを作りたい
  • ChatGPTではなぜだめか→自前サーバにスクレイピングや自前DBとの連携をさせたい
  • 具体的には?→ニュースとか集めてもらえると嬉しいかも

実装したらまた書く

jupyterhubとgitlabをdockerで動かしてSSOさせる

TL; DR

  • jupyterhubのdockerイメージはそのままでは動かない
  • oauthenticator使えば連携は容易

gitlab

起動

$ docker run -p 80:8080 -d -it --name gitlab gitlab/gitlab

rootパスワードの確認

/etc/gitlab/initial_root_passwordにある

アプリケーション設定

ID連携(GitLab)で、JupyterHubのユーザープロビジョニングを簡単に - Qiita に記載の通り。

「Application ID」と「Secret」は後で使う。

jupyterhub

Dockerfile

以下の内容でDockerfileを作成して、

$ docker build ./ -t jupyterhub_custom

を実行。jupyterlabとnotebookを入れないとjupyterhubにログイン後、jupyterlabが起動しない

FROM jupyterhub/jupyterhub

RUN apt update && \
    apt install -y python3 python3-pip npm nodejs && \
    pip3 --no-cache install notebook jupyterlab oauthenticator

ENTRYPOINT ["jupyterhub", "-f", "/srv/jupyterhub/jupyterhub_config.py"]

jupyterhub_config.pyの作成

$ docker run --entrypoint bash -it -d --rm -p 80:80 --name jupyterhub jupyterhub_custom

を実行してとりあえずjupyterhubを起動

$ docker exec -it jupyterhub bash

にてコンテナ内でbashを起動し、

$ jupyterhub --generate-config

を実行。コンテナからexitして、

$ docker cp jupyterhub:/srv/jupyterhub/jupyterhub_config.py ./

にてjupyterhub_config.pyをローカルに取得。コンテナは一旦不要なので、$ docker stop jupyterhubする。

以下をjupyterhub_config.pyに追記

from oauthenticator.gitlab import LocalGitLabOAuthenticator

c.JupyterHub.authenticator_class = LocalGitLabOAuthenticator

c.Spawner.default_url = '/lab'

# gitlabの認証さえ通ればjupyterhubの使用は許可する
c.LocalGitLabOAuthenticator.allow_all = True

c.LocalGitLabOAuthenticator.allow_all = Trueを入れておかないと、認証完了した後に、not allowedというエラーになってjupyterhubに入れない。

env_file

以下の内容を.envなどの名前で保存

GITLAB_URL=<GitLabのURL>
OAUTH_CALLBACK_URL=「Callback URL=jupyterhubの<URL>/hub/oauth_callback」
GITLAB_CLIENT_ID=「Application ID」
GITLAB_CLIENT_SECRET=「Secret」

起動

$ docker run -p 8000:8000 -v ./jupyterhub_config.py:/srv/jupyterhub/ --env-file ./.env -d -it --name jupyterhub jupyterhub_custom

オフライン環境にdocker環境を構築する

TL; DR

  • オフライン環境にdocker環境を構築したい
  • オンラインのPCからデータの移行はできるものとする
  • podmanはインストール済み
  • オンラインPCにてdockerイメージをpullして、docker save <image name> > <filename>.tarを実行する
  • podman load <filename>.tarにてイメージを取得できる

podmanを使い続けるか、rpmからdockerを入れ直すかは悩みどころ

web開発を簡易に始めるには(gilde, bubble, Appsheet, AWS)

TL; DR

  • ちょっとした要件でwebアプリを作りにあたってのツールの選定をしたい
  • 候補としてはbubble, Appsheet, AWS

条件など

  • bubbleとAppsheetはノーコード枠、AWSはサーバレス枠
  • AWSに関してはS3 or Amplify + DynamoDB + lambdaくらいのイメージ
  • ユーザ認証はしないけどユーザ識別のIDは発行してユーザごとに情報を保存する機能が必要
  • AWSは経験あるが、bubbleとAppsheetは初見
  • ユーザはスマホで利用し、自分のスコアを入力する
  • ダッシュボードで各ユーザのスコアを集計する

Appsheet

  • アプリのテンプレートが豊富
  • うまくハマるテンプレートが見つかれば開発速そう
  • 事例別のテンプレートであるが、実際のデータ構造がわかりにくいので探すのは苦労するかも

glide

  • PowerAppsに似ている感じがする

bubble

  • ECサイトを作るような用途に向いてそう
  • 今回の用途向きではないかもしれない

メモ

  • 画面作るのは簡単そうだが、集計のロジックをどう入れればいいのか現状では不明

Ubuntu 22.04とApache Guacamoleの接続結果

デスクトップ機として使っているUbuntu22.04に外部からリモート接続するためにApache Guacamoleを使ってみたのでメモ

TL; DR

記録

  • Ubuntu標準のrdp、vncともにGuacamoleからはつながらなかった(調整はしてみたものの、パラメータの設定が悪い可能性はある。うまく行ったパラメータでもUbuntu側でsyslogにsegfaultなどのエラーが出ているので諦めた)
  • なお、Ubuntu標準のrdpとvnciphoneのRDPクライアントからは接続成功、VNCクライアントからはそもそもつながらない状態
  • xrdpの設定は第621回 Ubuntu 20.04 LTSでxrdpを使用する | gihyo.jpを参考にした
  • xrdpってUbuntu側でログイン済だとログアウトするまでrdpで繋げられない。自動ログイン設定を外せばいいが運用方法は要検討。別セッション作ってくれるのがいいのだが
  • Guacamole側のセットアップはdocker-composeが公開されているので割愛。

Linuxのリモート接続まわりは何か苦労する印象。とりあえずつながったので当面は良しとする。

ITストラテジスト受験メモ(2023年春)

TL; DR

  • ITストラテジストを受験したので、対策と所感のメモ
  • 論文試験は負荷が高く、経験かストーリーの事前準備が必要
  • 知識的に覚えることは少ない印象(情報処理安全確保支援士試験と比較)

前提と受験の動機

  • 高度試験の合格実績は情報処理安全確保支援士のみ
  • 2年以上前の受験のため午前1免除対象にならず
  • 事業戦略などに業務で携わっていたため、マクロ分析とかビジネスモデルキャンバスなどは知っていた
  • システムの発注者として数件開発プロジェクトの経験あり
  • 情報システム部署ではないので、個別システム計画などは疎い
  • 知識の網羅的な補完と社内的な自己啓発アピールのために受験

対策

以下の2冊を購入

重点対策は知識を体系的に確認するために購入した。付録で対策キーワードリストがダウンロードできるのもありがたい。論文で押さえるべきポイントの説明もよかった。 ネタの準備の仕方とか、戦略・個別システム・組み込みシステムの別で解説してもらうとよかった。個人的には戦略に絞っていたため、個別システムと組み込みシステムは見なかった。

最速の論文対策は論文に特化して対策検討するために購入した。コンパクトにまとまっており、重点対策と別の観点で論文対策を考えることができたのはよかった。結果としては、重点対策で方針が決まる感じだった。論文例が少ないのもやや物足りない感じではあった。

論文対策

以下の内容で対策

  • 過去問の問題について、模範論文を写経し、ポイントを確認する
  • 写経した論文をベースに自分なりのテーマで書き直す
  • 他に書けそうなテーマがないか案を出す
  • 自分で書けるようになるまで、他の年度で同じことをする

また、過去問にかかわらず、考え付くテーマで - 事業概要 - 事業戦略 - システム開発をする動機となる事業環境変化 - システムの概要 - システムの顧客、チャネル、価値提供など(ビジネスモデルキャンバスの項目想定) - 投資効果 - 経営層や事業部への説明や、評価、評価を受けて改善したこと を論文として書いてみるのも思考の整理に有効だった。

テーマは自分の会社に関するものが事業概要など書きやすくて応用が利く。多少脚色することを前提に、まずはこの案がいい。 他には、身近な会社として、小売、EC系や飲食店などがイメージわきやすいし、サービスを見ているので書きやすい。 直近でサービスの変化が大きい業界も、論文テーマに合いやすいと思う。

論文はwordの原稿用紙設定を使って書いた。今まで知らなかったが、字数を気にして書くものはこれ使うと便利。

解答内容(午後1)

問1,2を選択。問題ながめて、解けそうなものを選択するつもりだったが、余裕がなくて1,2の順に解いた。以下、記憶を頼りに再現。記載はあまり正確でない。

問1

設問1: A社の会員の経済活動によって、A社経済圏が成り立っていること

設問2: 拡張が容易でなく、UXをタイムリーに提供できない

設問3: コミュニティの活性化により、A社経済圏を拡大する

設問4:

(1)貢献活動に対してさらに充実した特典を獲得したいニーズ

(2)二次流通においてもその収益に一部を著作者に自動的に還元する仕組み

(3)提携企業へのマーケティングに関するデータ提供サービス事業

問2

設問1:

強み 農水産業資源と自然観光資源

弱み D市内の他地域間や観光客との接点がない

設問2:

(1)オープンAPIによるアプリ開発

(2)アプリで発生したd-恵田の管理やアプリ間のデータ連携を行う

設問3:

(1)移住経験者との意見交換による懸念の払拭

(2)宿泊施設や飲食店の予約数

(3)生産者と実需者の数

(4)アプリ利用数

解答内容(午後2)

問1を選択。インフラ事業者の保守業務において、ベテランの経験だよりのところから、過去の対応実績をもとにAIを活用してノウハウを抽出するストーリーで記述。改修の対象はトラブルチケットシステムとした。 記述した内容はおおむね以下の通り。

設問ア

  • 事業概要:インフラ事業者
  • 分析の対象となる業務:保守業務
  • Tシステム:トラブルチケットシステム
  • 改修要望:過去の対応実績を調べる機能の強化
  • 問題認識:ベテランの経験だよりで、過去の実績情報を活用できていない。ベテランが定年で退職
  • 事業特性:インフラの信頼度が事業上、重要であり、障害は早期に対策する必要がある

設問イ

  • 収集した情報:現場の業務フローとトラブルチケットシステムの過去実績データ
  • 問題の真因:検索機能が不足している。データの記載に表記ゆれが多数あり、検索に向いていない

設問ウ

  • 協議内容:問題の説明と対策案としてAIを使うことを説明
  • 対応方針:AIの精度を評価しつつ、スモールスタートで導入を行う

時間配分は、構想:20分、設問ア:30分、設問イ:40分、設問ウ:30分でほぼ使い切った。

字数は設問ア:700、設問イ:800、設問ウ:650くらい。これも結構ギリギリ。

論文の論点についての考察

システムの概要の記載について

採点に影響しないという意見もあるが、IPAの講評など見ると、論述との整合性がない場合には減点の対象となると言われている。事前に何を書くかを考えておいた方がいい。 今回は、サーバ台数:その他(サーバレス)、工数:40人月、工費:4,000万円、期間:6か月というまあまあざっくりした記載にした。従業員数などはストーリーに合わせて書く。

定量的な記載は必要か

具体的な数字を書いた方が、実際に携わった感じが出るという意見があるが、試験として問われているのは定性的な分析ができるかどうかではないだろうか。例えば、投資効果については○○円を〇年で回収するという数字よりは、○○に関して効率化が図れるとか、××の収益向上につながるとかとその算定をどう行ったかを記載するのが求められている気がする。おそらくは、こういった細かいところよりは、ポイントを外さずにきちんと所定の文字数で説明できるかを重要視した方がいいと思う。

経営層や事業部門への説明内容と評価

何を書けばいいのか当初よくわからなかったが、うまく対応していることがうかがえる内容であればいいらしい(IPAの講評のどこかに書いてあった)。つまり、経営層や事業部門はこういう価値観で考えるというのを踏まえて、説明と評価や指摘を記載すれば良さそう。例えば経営層であれば、人・モノ・金・情報の観点とか、事業部門であれば業務フローや顧客への対応などの観点で書けば良さそう。

その他

論述は手がつかれるので、試験直前は手書きの練習を毎日しつつ、書きやすい筆記具を用意するのがいいと思う。1,000円くらいのシャープペンシルでいいから手が疲れにくいのを買っておくのがおすすめ。

所感

論文さえ何とか出来ればいけるかなと思っていたが、午前1も対策不足で結構微妙な出来だった。論文も新サービスの開発とかDXに期待していたのでやや動揺した。結局、準備したものではなく、経験した内容を脚色しながら書く形になった。指定されたテーマで書くというよりは、あらかじめ準備した内容をテーマに沿って書き換えるイメージかな。結構な綱渡り感。試験スケジュールも、休憩30分と思いきや、20分前に着席で復習の時間短くて余裕ない。とりあえずは書ききったので、結果を待つ。

合格発表は6月末らしい。