Windows11 24H2でVirtualBoxを使用すると動作が遅くなる

概要

  • Windows 11 24H2が2024å¹´10月に配信されました。
  • 先日Updateをしてみたのですが、VirtualBoxを利用しているとVMとホスト両方とも動作が遅くなり、まともに動かすことが出来なかったので、その時の対策です。

環境

VirtualBox 7.1.4へのアップデート

  • 結論ですがVirtualBoxã‚’2024å¹´12月時点で最新の7.1.4へアップデートすることで改善されました。
  • VirtualBox 7.1.4でWindows 11 24H2への互換対応がされたようです

さいごに

  • 大型OSアップデートや新規OSリリースのタイミングでVirtualBoxも対応のためにアップデートしているようなので、その時に自分の環境も見直したほうがいいなと感じました

pyenvのインストールと利用方法について

概要

  • pyenvは複数のPythonバージョンをプロジェクトよって切り替えて使用することができるツールです。
  • 今回はpyenvのインストールと利用方法について記載します

環境

  • RHEL9.4
  • pyenv 2.4.10

pyenvのインストール

curl https://pyenv.run | bash
  • pyenvがインストールされていることを確認
pyenv --version

pyenvコマンドが実行できない場合はPATHが通ってない可能性があるのでGitHub - pyenv setup your shell environment for pyenvを参照し、PATHの設定を実施してください

pyenvの利用方法

利用可能なPythonバージョンの確認

  • pyenv install -lでインストール可能なバージョンの一覧を表示することができます
pyenv install -l

pyenv環境にPythonのインストール

  • pyenvを利用してPythonをインストールするには下記コマンドを実行
pyenv install <バージョン>

pyenvでPythonバージョンの切り替え

  • pyenvで利用するPythonバージョンを切り替える場合は下記のコマンドを実施します
    • globalはシステム全体で使うバージョンを変えたいときに利用
    • localはプロジェクトごとで違うバージョンを変えたいときに利用
pyenv global <バージョン>
pyenv local <バージョン>
  • 切り替え後はPythonバージョンを確認してみてください
python --version

Perlで外部コマンドを実行する方法

概要

  • Perlで外部コマンド(Linuxコマンド)を実行する方法について記載

Table of Contents

環境

system関数を使った方法

  • Perlの組み込み関数であるsystemを使うことで、外部コマンドを実行することができます
  • コマンドの引数もリストで渡すことで実行できます
#!/usr/bin/env perl

use strict;
use warnings;

my $cmd_result = system('uname', '-r');
print $cmd_result . "\n";
  • 実行結果
$ perl system.pl 
6.5.0-1022-azure
0
  • system関数によって実行された結果は標準出力に出力されます
  • コマンドの出力をキャプチャする機能がなく、今回のように変数に格納した場合、戻り値が格納されます
  • コマンドの出力をキャプチャしたい場合は、後述するバッククォートを使ったコマンド実行を利用してください

バッククォートを使った方法

  • コマンドをバッククォート(``)で囲むことで実行することができます
#!/usr/bin/env perl

use strict;
use warnings;

my $cmd_result = `uname -r`;
print $cmd_result;
  • 実行結果
$ perl backquote.pl 
6.5.0-1022-azure

Windowsに対してAnsibleを実行してみる

概要

  • Windowsに対してAnsibleを実行する方法について記載します
    • Windows Server 2022とWindows 10に対して実行してみます

Table of Contents

環境

  • OS
  • Ansible
    • 2.15.9

Windowsへの接続要件を確認する

  • AnsibleでWindowsへ接続するにはAnsible Community Documentation - Setting up a Windows Hostに記載の要件を満たす必要があります
    • Microsoft の現在のサポートと延長サポートの対象となる Windows バージョンを一般的に管理できる
    • Windows ホストに PowerShell 5.1 以降と少なくとも .NET 4.0 をインストールする必要がある
    • WinRM リスナーを作成してアクティブ化する必要があります。

サポート対象のWindowsバージョン確認

PowerShellのバージョン確認

  • PowerShellのバージョンはPowerShellで下記のコマンドを実行することで確認できます
    • エラーが出る場合はWinRMサービスが起動していないことが想定されるため、Windows Remote Managementを起動しているかご確認ください
PS C:\Users\Administrator> winrm enumerate winrm/config/Listener
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 127.0.0.1, 192.168.48.138, ::1, fe80::902f:4d50:638f:38e%14

.Net Frameworkのバージョン確認

PS C:\Users\Administrator> $release = Get-ItemPropertyValue -LiteralPath 'HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release
PS C:\Users\Administrator> switch ($release) {
>>     { $_ -ge 533320 } { $version = '4.8.1 or later'; break }
>>     { $_ -ge 528040 } { $version = '4.8'; break }
>>     { $_ -ge 461808 } { $version = '4.7.2'; break }
>>     { $_ -ge 461308 } { $version = '4.7.1'; break }
>>     { $_ -ge 460798 } { $version = '4.7'; break }
>>     { $_ -ge 394802 } { $version = '4.6.2'; break }
>>     { $_ -ge 394254 } { $version = '4.6.1'; break }
>>     { $_ -ge 393295 } { $version = '4.6'; break }
>>     { $_ -ge 379893 } { $version = '4.5.2'; break }
>>     { $_ -ge 378675 } { $version = '4.5.1'; break }
>>     { $_ -ge 378389 } { $version = '4.5'; break }
>>     default { $version = $null; break }
>> }
PS C:\Users\Administrator>
PS C:\Users\Administrator> if ($version) {
>>     Write-Host -Object ".NET Framework Version: $version"
>> } else {
>>     Write-Host -Object '.NET Framework Version 4.5 or later is not detected.'
>> }
.NET Framework Version: 4.8

AnsibleでWindowsに接続

winrmモジュールのインストール

  • Windowsへ接続するためにAnsibleサーバにpywinrmモジュールが必要のためインストールします
pip install pywinrm

インベントリの準備

  • Windowsに接続するための情報を記載したインベントリを作成
---
all:
  hosts:
    Win2022:
      ansible_host: 192.168.48.138
      ansible_user: Administrator
      ansible_password: P@ssword
      ansible_connection: winrm
      ansible_port: 5985
      ansible_winrm_transport: ntlm
    win10:
      ansible_host: 192.168.48.139
      ansible_user: hii
      ansible_password: hii
      ansible_connection: winrm
      ansible_port: 5985
      ansible_winrm_transport: ntlm

Playbookの準備

  • Windowsへの接続を確認するためのPlaybookを作成
---
- name: Windows connection test
  hosts: all
  gather_facts: false
  tasks:
    - name: Ping
      win_ping:

Playbook実行

ansible-playbook -i inventory.yml main.yml

PLAY [Windows connection test] ***********************************************************************************************************************************************************************

TASK [Ping] ******************************************************************************************************************************************************************************************
ok: [Win2022]
ok: [win10]

PLAY RECAP *******************************************************************************************************************************************************************************************
Win2022                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
win10                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Windows 10へ実行した際のエラー

  • Windows 10に対して実行した際に下記のエラーが出力されました
fatal: [win10]: UNREACHABLE! => {
    "changed": false,
    "msg": "ntlm: the specified credentials were rejected by the server",
    "unreachable": true
}
  • 結果としてWindows 10のネットワーク接続の種類がPublicになっているとNGらしく、Privateに変更することで解消できました

さいごに

  • httpでの接続ですが無事接続することができました。
  • httpsで接続する場合は証明書を準備したりと手間はかかりますがより安全に接続することができるので要件に合わせて実施してみてください

Windows11で日本語キーボードと英語キーボードの切り替え方

概要

  • Windows11のキーボードレイアウトを日本語キーボードから英語キーボードに切り替える方法を記載します
  • また、私自身HHKBを使っており全角/半角切り替えがデフォルト設定だと切り替えずらかったため、Ctrl + Spaceでできる設定も記載します

環境

  • Windows11

キーボードレイアウトの変更方法

  1. [設定]を開く
  2. [時刻と言語]-[言語と地域]を開く
  3. 言語欄にある[日本語]の右にある[…]をクリックし、[言語のオプション]をクリックする
  4. キーボード欄にある[レイアウトを変更する]をクリックする
  5. [日本語キーボード(106/109キー)]から[英語キーボード(101/102キー)]に変更する
  6. レイアウト変更後にPCを再起動することでレイアウトの変更は完了です

全角/半角切り替えをCtrl + Spaceで出来るように設定

  1. [設定]を開く
  2. [時刻と言語]-[言語と地域]を開く
  3. 言語欄にある[日本語]の右にある[…]をクリックし、[言語のオプション]をクリックする
  4. キーボード欄にある[Microsoft IME]の右にある[…]をクリックし、[キーボードオプション]をクリックする
  5. [キーとタッチのカスタマイズ]をクリックする
  6. Ctrl + SpaceのプルダウンでIME-オン/オフを選択する

Shell Scriptの実行時間を計る方法

概要

  • Shell Script実行時に処理時間を計測したい場合の方法について記載します

環境

  • OracleLinux 9.1

時間の計測が可能なコマンド

timeコマンド

  • コマンドの実行時間を計測するためのコマンドです
time コマンド
  • 計測する時間は下記の3種類となります。

    • real コマンドの実行時間
    • user ユーザCPU時間
    • sys システムCPU時間
  • 実際にtimeコマンドを利用してsleepコマンドを実行した結果

$ time sleep 3
real    0m3.002s
user    0m0.001s
sys     0m0.000s

dateコマンド

  • 指定したフォーマットに応じた時間を表示するためのコマンドです
date オプション コマンド
  • 実際にdateコマンドを実行した結果
$ date "+%Y-%m-%d"
2024-07-18

Shell Scriptの実行時間を実際に計ってみる

  • Shell Script全体の実行時間を計る場合はdateコマンド
  • コマンド単体の実行時間を計る場合はtimeコマンドを利用
#!/bin/bash

# 処理開始時間を取得
start_time=`date "+%S"`

# 1個目の処理

echo 1個目の処理開始
time sleep 1
echo 1個目の処理終了

# 2個目の処理

echo 2個目の処理開始
time sleep 2
echo 2個目の処理終了

# 3個目の処理

echo 3個目の処理開始
time sleep 3
echo 3個目の処理終了

# 処理終了時間を取得
end_time=`date "+%S"`

# スクリプトの実行時間を表示
total_time=$((end_time - start_time))
echo "実行時間: $total_time秒"

KubernetesにGrafanaをデプロイしてZabbixで取得したデータを可視化してみる

概要

  • Kubernetes(k3s)にGrafanaをデプロイして、Zabbixで取得したデータを可視化してみたいと思います

環境

  • RHEL 8.7
  • Zabbix 5.4
  • Grafana 11.1.0

Table of Contents

前提条件

  • Kubernetes環境が用意されていること

KubernetesにGrafanaをデプロイ

Grafana Labs Documentation - Install Grafanaを参考にしてます

  • Kubernetes環境にGrafana用のnamespaceを作成する
kubectl create namespace grafana
  • namespaceが作成されていることを確認
kubectl get namespace -A
touch grafana.yml
  • kubernetes環境にデプロイ
kubectl apply -f grafana.yml --namespace=grafana
  • 各オブジェクトのステータスを確認する
kubectl get pvc -n grafana -o wide
kubectl get deployments -n grafana -o wide
kubectl get svc -n grafana -o wide

Grafanaへアクセス

  • Grafanaのステータスを確認
kubectl get all -n grafana
  • Webブラウザでhttp://<Server IP>:3000にアクセスしadminユーザーでログイン(パスワードもadminでした)
    • 初回ログイン後にパスワード変更を求められます

GrafanaにZabbixのプラグインをインストール

  • Grafanaにログイン後、[Home] - [Administration] - [Plugins and data] - [Plugins]にアクセスし、zabbixを検索しPluginをインストール
    • インストール後に[Enable]をクリックし有効化する

Grafanaにデータソースを追加&Dashboard作成

  • [Home] - [Dashboards]にアクセスし、Create dashboardをクリック

  • [New dashboard]画面でAdd visualizationを選択し、[Select data source]画面でConfigure a new data sourceをクリック

  • [Add data source]画面からZabbixをクリックする

  • Zabbixの情報入力画面が表示されるため、情報を入力後にSave & testをクリック
    • ConnectionのURLはhttp://<Zabbix Server IP>:<port>/api_jsonrpc.phpで接続できました
  • 前述の項番1、2と同様の手順を行い、[Select data source]画面で追加したZabbixのデータソースをクリック

  • ここまできたら好きなように好きなようにPanelを作ってDashboardを作るだけです

    • とりあえずCPUとMemoryのグラフを作成

参考リンク