a stray sheep

お仕事周りの雑記帳

Rocky Linux 9 にJenkinsをインストールする

OS、ミドルウェアのバージョン

  • OS:Rocky Linux 9.3
  • JVM:Open JDK 17
  • Jenkins:Jenkins 2.426.1 LTS版

JDKのインストール

//OpenJDKインストール
# dnf install -y fontconfig java-17-openjdk java-17-openjdk-devel

//Javaバージョンの切り替え ※java8がすでに入っている場合
# java -version
openjdk version "1.8.0" ...
# update-alternatives --config java
Selection
*+ 1 java-1.8.0-openjdk.x86_64
   2 java-17-openjdk.x86_64
Enter to keep the current selection[+], or type selection number: 2
# java -version
openjdk version "17.0.9" ...

//JAVA_HOMEの設定
# vi /etc/profile.d/java.sh

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVAH_HOME/bin:$PATH

# source /etc/profile.d/java.sh

Jenkins

Jenkinsのインストールと起動

# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# dnf install jenkins
# systemctl daemon-reload
# systemctl start jenkins
# systemctl enable jenkins
# firewall-cmd --add-service=jenkins

インストール後の設定ウィザード

  • ブラウザで「http://{IPADDR}:8080」を開く
  • Unlock Jenkins画面で、画面の指示に従ってパスワードをコピペ
  • Offline画面で、「Configure Proxy」をクリックして、Proxyを設定する
  • Customize Jenkins画面で、「Install suggested plugins」を選択 ※一部のプラグインのインストールに失敗したら「Retry」
  • Create First Admin User画面で、管理者ユーザーを作成する
  • Instance Configuration画面は、デフォルトのまま
  • Jenkins is ready!画面で、「Start using jenkins」をクリックする

HP Elite Mini 800 G9を再インストールする

HP Elite Mini 800 G9を再構築したいので、その方法を調べてみた。

手元には、「HP Operating System DVD Windows 10」と「Driver Recovery DVD」のメディアがある。

工場出荷時設定に戻す

「HP PC - コンピューターをリセットする」の所には、個人データやカスタマイズ内容を失うことなく、OSを再インストールできる、とある。
やりたいのはデータは消すことなんだけども・・・。
support.hp.com

手順は以下
1. Windows回復オプション を検索して開きます。
2. [回復] 画面の [この PC を初期状態に戻す] の下にある 開始する をクリックします。

まず、こっちをやってみようかな。

再インストールする

HP Z Workstationシリーズだけど、DVDをマウントしてインストールする手順としては、参考になりそう。
support.hp.com

最初の回復オプションが期待通りにいかなかった場合は、こっちで再インストールする。最終手段。

Hyper-V仮想スイッチについて

自分なりにまとめてみた。

PowerShellコマンド

管理OSと共用タイプで、仮想スイッチを作成する。
PS> New-VMSwitch 仮想マシン名 -NetAdapterName ネットワークインタフェース名

仮想マシン専用タイプで、仮想スイッチを作成する。
PS> New-VMSwitch 仮想マシン名 -NetAdapterName ネットワークインタフェース名 -AllowManagementOS $false

仮想スイッチを削除する
PS> Get-NetAdapter ネットワークインタフェース名 | Remove-VMNetworkAdapter

ど素人のサーバーラックでの発熱量についてのメモ

概要

ラックの設置に関して、搭載するサーバやNW機器を含めた設計をすることになった。
重量や電力はなんとかなるが、その中で発熱量について考えることになったので、調べたことの備忘録。

検証設備なので厳密ではないが、知っておいた方が良いかなと。

電力の単位

力率ってなぁに?、機器によって消費電力W、電流Aとか書かれてたり、書かれてなかったり、どれをどう使うの?

VA(皮相電力)

  • 電力のロスがないと仮定した電力のこと。実際にはロスが発生するので多めに見積もるのに利用する。
  • 電源から供給される電力といえる。実際にはすべて使われるわけでないので、皮相(=見かけ)って意味のようだ。

W(電力)

  • 実際に消費される電気エネルギーをロスを加味して表したもの
  • W = V × A x 力率(電力をどれだけ有効に使用できるかを示す値)。つまり、電子機器に記載されている「W(消費電力)」は、力率が考慮されているということ。
  • 皮相に対して、実際に消費される電力となる。

itskillmap.com

ラックと発熱量(ちょっと古い情報かもしれないが)

一般的なデータセンターでのラックの電源回路は1ラック当たり30Aくらいが多いらしい。でも、やろうと思えば、電源回路を増やして60Aとか、90Aのラックは作れるっちゃあ作れる。

じゃあ、90Aのラックを作って沢山の機器を設置するとどうなるか?それをすると、ラック内に冷却することができないくらいの熱が溜まってしまうのだ。
通常の冷却設備だと6000W(60A x 100V)以上の発熱を確実に冷却する手段はないらしい。それがラック当たりの発熱量を制限される理由である。

19インチラックだからたくさん載せられるじゃんとか、PDU載せて電源ケーブル引けばいいじゃんとか、サーバは自分で冷却するからいいじゃんとか思ってたけど、間違いでした><

冷却設備の増強という考えも浮かぶが、冷却しても90A分の廃熱があるわけで、自分のラックは良くても、ほかのラックへの影響が出てくる。そう簡単な話でない。

まずはちゃんと発熱量を求めてみようと思う。

発熱量の求め方

  • 消費電力Wが記載されていればその値を使えばよいと思う。
  • 消費電力Wが記載されていなくて、電流Aだけ記載されている場合は、V x A x 力率80%で計算。※力率は明示されていないケースが多いと思うので関係者と話し合って決めるのがいいが、一人で決める場合はエイヤーで「80%」でいいんじゃないか、と。もしくは、力率100%の皮相電力VAで計算して、ラック当たりの発熱量が大きくなったなら力率を考えるって手も。

windows_exporter でCPU温度をチェックする

やりたいこと

  • windows_exporter を触ってみる(ひさびさに)。
  • windows_exporter で温度を確認する。
  • PCの温度(=CPU温度)をチェックし、windows_exporterの値の正しさを確認する。

windows_exporterのインストール

  1. https://github.com/prometheus-community/windows_exporter/releases にアクセス
  2. 最新版 v0.20.0を選択して、Assetsから windows_exporter-0.20.0-amd64.exe と windows_exporter-0.20.0-amd64.msi をダウンロード ※どっちかで良いけど、試したいことがあるので両方。

windows_exporterで温度を確認する

温度を確認するために、コレクタ thermalzone のみを使用してメトリクスを収集する。
windows_exporterはインストーラを使ってWindowsサービスとしてセットアップする方法と、実行ファイル単体で実行する方法があるが、それぞれ動かしてみる。

実行ファイル単体で動かす

windows_exporter-0.20.0-amd.exe を使用。

C:\Temp>.\windows_exporter-0.20.0-amd64.exe  --collectors.enabled thermalzone
time="2023-02-17T22:44:13+09:00" level=info msg="Running as HOSTNAME\\USERNAME" source="exporter.go:340"
time="2023-02-17T22:44:13+09:00" level=info msg="Enabled collectors: thermalzone" source="exporter.go:345"
time="2023-02-17T22:44:13+09:00" level=info msg="Starting windows_exporter (version=0.20.0, branch=heads/tags/v0.20.0, revision=677a7c8d67deb99b92f4f24b8c890e0a4c152b0c)" source="exporter.go:397"
time="2023-02-17T22:44:13+09:00" level=info msg="Build context (go=go1.19.1, user=runneradmin@fv-az319-971, date=20221006-09:22:49)" source="exporter.go:398"
time="2023-02-17T22:44:13+09:00" level=info msg="Starting server on :9182" source="exporter.go:401"
time="2023-02-17T22:44:13+09:00" level=info msg="TLS is disabled." source="gokit_adapter.go:38"

http://localhost:9182/metrics にアクセスして収集したメトリクスを確認する。以下は、thermalzone に関するものだけ抜粋して表示。

windows_thermalzone_percent_passive_limit{name="\\_TZ.TZS0"} 100
windows_thermalzone_percent_passive_limit{name="\\_TZ.TZS1"} 100
# HELP windows_thermalzone_temperature_celsius (Temperature)
# TYPE windows_thermalzone_temperature_celsius gauge
windows_thermalzone_temperature_celsius{name="\\_TZ.TZS0"} 45.05000000000001
windows_thermalzone_temperature_celsius{name="\\_TZ.TZS1"} 44.05000000000001
# HELP windows_thermalzone_throttle_reasons (ThrottleReasons)
# TYPE windows_thermalzone_throttle_reasons gauge
windows_thermalzone_throttle_reasons{name="\\_TZ.TZS0"} 0
windows_thermalzone_throttle_reasons{name="\\_TZ.TZS1"} 0

windows_thermalzone_temperature_celsius の値が、44、45なので、摂氏で扱っているようだ。

サービスとして動かす

windows_exporter-0.20.0-amd.msi を使用し、まずはインストールする。

C:\Temp>msiexec /i windows_exporter-0.20.0-amd64.msi  ENABLED_COLLECTORS thermalzone

これを実行すると、インストーラが起動し、windows_exporterがインストールされる。サービスで「windows exporter」を確認できる。

同様に、http://localhost:9182/metrics にアクセスして収集したメトリクスを確認する。以下は、thermalzone に関するものだけ抜粋して表示。

# HELP windows_thermalzone_percent_passive_limit (PercentPassiveLimit)
# TYPE windows_thermalzone_percent_passive_limit gauge
windows_thermalzone_percent_passive_limit{name="\\_TZ.TZS0"} 100
windows_thermalzone_percent_passive_limit{name="\\_TZ.TZS1"} 100
# HELP windows_thermalzone_temperature_celsius (Temperature)
# TYPE windows_thermalzone_temperature_celsius gauge
windows_thermalzone_temperature_celsius{name="\\_TZ.TZS0"} 44.05000000000001
windows_thermalzone_temperature_celsius{name="\\_TZ.TZS1"} 41.05000000000001
# HELP windows_thermalzone_throttle_reasons (ThrottleReasons)
# TYPE windows_thermalzone_throttle_reasons gauge
windows_thermalzone_throttle_reasons{name="\\_TZ.TZS0"} 0
windows_thermalzone_throttle_reasons{name="\\_TZ.TZS1"} 0

パフォーマンスモニタを使って温度を確認する

windows_exporterの値が正しいかを確認するために、パフォーマンスモニターを使用する。

<確認方法>

  1. [コントロールパネル]→[管理ツール]→[パフォーマンスモニター] を開く
  2. パフォーマンスモニターで、[パフォーマンス]→[モニターツール]→[パフォーマンスモニター] を開く
  3. 上部メニューの「+」をクリック
  4. 左側の使用可能なカウンターで、[Thermal Zone Information]→[Temperature]→[<すべてのインスタンス>]を選択して、「追加」をクリック
  5. 上部メニューの左から2個目をクリックして、プロパティを開く
  6. [グラフ]タブで、"垂直スケール"の最大値を"400"に設定する ※温度がケルビンなので変更しないとグラフに見えない。摂氏に換算するには -273する。

図では、平均が317.47となっているので、317.47 - 273 = 摂氏44.47℃ となる。

windows_exporterで抽出した値と同じような値であることが確認でき、windows_exporterで問題なく温度を収集できることを確認できた。

ping応答チェックをpowershellで

やりたいこと

  • pingを定期的に投げる
  • 時刻(とくに時分秒)を出力する
  • pingの結果は1行で見やすく
  • 色も付けてみる
  • powershellで書く

powershellスクリプト

ping_check.ps1
# ターゲットは引数で指定
$tgt = $Args[0]
Write-Host "$tgt へのping応答チェック"

# 無限ループ
for (;;) {
   $dt = Get-Date
   # pingはオプション無しなので、4回送信
   $rs = ping $tgt

   for($line in $rs) {
      if ($line.Contains("パケット数")){
         if ($line.Contains("損失 = 0")){
            # 損失 = 0、つまりping応答がすべてあった場合、文字を緑色で表示
            Write-Host ($d, $line) -ForegroundColor Green
         }else{
            # 4回のうち1つでも応答がなかった場合、文字を赤くして表示
            Write-Host ($d, $line) -ForegroundColor Red
         }
      }
   }

   # 60秒待機
   Start-Sleep -Seconds 60
}
実行と実行結果イメージ

PS> .\ping_check.ps1 192.168.1.1
192.168.1.1 へのping応答チェック
2023/01/25 10:00:01  パケット数: 送信 = 4、受信 = 0、損失 = 4 (100%の損失)、
2023/01/25 10:01:02  パケット数: 送信 = 4、受信 = 2、損失 = 2 (50%の損失)、
2023/01/25 10:02:02  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、
2023/01/25 10:03:02  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、
2023/01/25 10:03:03  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、
2023/01/25 10:04:02  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、
2023/01/25 10:05:02  パケット数: 送信 = 4、受信 = 4、損失 = 0 (0%の損失)、

vagrant + docker + docker-compose

やりたいこと

vagrant仮想マシンにdockerとdocker-composeを入れる

Vagrantゲスト環境

  • Rocky Linux 8.7
  • Docker version 20.10.23, build 7155243
  • Docker Compose version v2.15.1

docker composeについて

  • 現在はV2
  • Golangで完全に書き直された。(V1はPython)
  • V2はスタンドアロン・バイナリではなくなり、インストール手順は大きく変わった。

インストール

dockerのインストール

> vagrant ssh
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ dnf repolist
→docker-ce-stableが表示されること
$ sudo dnf update
$ sudo dnf -y install docker-ce
$ docker -v
Docker version 20.10.23, build 7155243
$ sudo systemctl enable docker
$ sudo systemctl start docker
$ sudo usermod -aG docker vagrant
$ sudo systemctl restart docker

# 一度抜けて、再度ログインする
$ exit
> vagrant ssh

# 動作確認
$ docker run hello-world
→Hello from Docker ! と表示されればOK

docker-composeのインストール

$ sudo mkdir -p $HOME/.docker/cli-plugins
$ sudo curl -L https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-`uname -s`-`uname -m` -o $HOME/.docker/cli-plugins/docker-compose
$ sudo chmod +x $HOME/.docker/cli-plugins/docker-compose
$ sudo chown -R vagrant:vagrant .docker
$ docker compose version
Docker Compose version v2.15.1