カテゴリー: 技術系

  • GitLabをaptでアップデートしたらエラー(Gitlab 17.1.0-ce)

    今回のアップグレードは、Gitlab 17.0.1-ce から Gitlab 17.1.0-ce 。アップグレードパスとしては、問題はないはずだったのだが、下記のエラーが出た。

    Running handlers:
    [2024-06-25T18:47:40+09:00] ERROR: Running exception handlers
    There was an error running gitlab-ctl reconfigure:
    
    redis_service[redis] (redis::enable line 19) had an error: RuntimeError: ruby_block[warn pending redis restart] (redis::enable line 88) had an error: RuntimeError: Execution of the command `/opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket INFO` failed with a non-zero exit code (1)
    stdout:
    stderr: Could not connect to Redis at /var/opt/gitlab/redis/redis.socket: No such file or directory
    
    
    
    Running handlers complete
    [2024-06-25T18:47:40+09:00] ERROR: Exception handlers complete
    Infra Phase failed. 11 resources updated in 37 seconds
    [2024-06-25T18:47:40+09:00] FATAL: Stacktrace dumped to /opt/gitlab/embedded/cookbooks/cache/cinc-stacktrace.out
    [2024-06-25T18:47:40+09:00] FATAL: ---------------------------------------------------------------------------------------
    [2024-06-25T18:47:40+09:00] FATAL: PLEASE PROVIDE THE CONTENTS OF THE stacktrace.out FILE (above) IF YOU FILE A BUG REPORT
    [2024-06-25T18:47:40+09:00] FATAL: ---------------------------------------------------------------------------------------
    [2024-06-25T18:47:40+09:00] FATAL: RuntimeError: redis_service[redis] (redis::enable line 19) had an error: RuntimeError: ruby_block[warn pending redis restart] (redis::enable line 88) had an error: RuntimeError: Execution of the command `/opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket INFO` failed with a non-zero exit code (1)
    stdout:
    stderr: Could not connect to Redis at /var/opt/gitlab/redis/redis.socket: No such file or directory
    
    
    ===
    There was an error running gitlab-ctl reconfigure. Please check the output above for more
    details.
    ===
    
    dpkg: パッケージ gitlab-ce の処理中にエラーが発生しました (--configure):
     installed gitlab-ce package post-installation script subprocess returned error exit status 1
    xxd (2:8.1.2269-1ubuntu5.23) を設定しています ...
    vim-common (2:8.1.2269-1ubuntu5.23) を設定しています ...
    vim-tiny (2:8.1.2269-1ubuntu5.23) を設定しています ...
    dbus (1.12.16-2ubuntu2.3) のトリガを処理しています ...
    desktop-file-utils (0.24-1ubuntu3) のトリガを処理しています ...
    mime-support (3.64ubuntu1) のトリガを処理しています ...
    hicolor-icon-theme (0.17-2) のトリガを処理しています ...
    gnome-menus (3.36.0-1ubuntu1) のトリガを処理しています ...
    man-db (2.9.1-1) のトリガを処理しています ...
    処理中にエラーが発生しました:
     gitlab-ce
    E: Sub-process /usr/bin/dpkg returned an error code (1)
    zen@LAB:~$

    もう一度、sudo apt upgrade を実行したところ、正常に終了した。

    sudo gitlab-ctl restart を実行するように出ていたので、実行した。

    GitLabのウェブ画面上からも確認したが、最新(17.1.0)にアップグレードができており、問題はなかった。

  • vSphere8.0でVMの自動起動設定を調べる方法

    vSphere8.0でESXiの起動時(電源ON時)にVMも起動させる設定がされているVMを調べる方法のメモ

    1. vCenter Server にログインする。

    2. 「ホストおよびクラスタ」のメニューを開く。

    3. 自動起動させたいホストを選択する。

    4. 「構成」タブを選択する。

    5. 「仮想マシンの起動およびシャットダウン」を選択する。

    6. 「仮想マシンの起動およびシャットダウン」のメニューに「自動順位付け」「自動」の選択項目があるので、それぞれを選択する。

    7. 起動の部分が「有効」になっているVMが自動起動するVM。起動遅延時間や起動順番を確認すると、どの順番でVMが起動してくるのかがわかる。

  • メモ:.NET8.0の対応Windows OS

    ちょっと検索で探しにくかったので、メモ。

    .NET8.0(.NET9.0も同じだった)が対応しているWindows OSは以下。

    • Windows server 2012以上(2012の場合は、Extended Security Updatesがインストールされていること。サポート無しならばランタイムは動く)
    • Windows server Core 2012以上(2012の場合は、Extended Security Updatesがインストールされていること。サポート無しならばランタイムは動く)
    • Windows10 バージョン1607以上
    • Windows11 バージョン22000以上

    参考:

    https://github.com/dotnet/core/blob/main/release-notes/8.0/supported-os.md

    https://github.com/dotnet/core/blob/main/release-notes/9.0/supported-os.md

  • vSphere8.0でESXiの起動時にVMも起動させる設定

    vSphere8.0でESXiの起動時(電源ON時)にVMも起動させる設定のメモ。

    自動起動は、「ホストがvSphere HAクラスタの一部である場合、仮想マシンの自動起動とシャットダウンが無効になります。」という仕様があるので注意すること。

    vSphere8でのホスト起動時の自動VM起動設定

    1. vCenter Server にログインする。

    2. 「ホストおよびクラスタ」のメニューを開く。

    3. 自動起動させたいホストを選択する。

    4. 「構成」タブを選択する。

    5. 「仮想マシンの起動およびシャットダウン」を選択する。

    6. 「仮想マシンの起動およびシャットダウン」のメニューに「自動順位付け」「自動」「手動での起動」の選択項目があるので、「手動での起動」を選択する。ここで表示されている仮想マシンは自動起動設定がされていないVMである。

    7. 「編集」をクリックする。

    8. 画面内のポップアップで「仮想マシンの起動/シャットダウン設定の編集」が開く。

    9. 「手動での起動」を選択し、一覧から自動起動させる仮想マシンを選択する。

    10. 「移動先」をクリックし、「自動」または「自動順位付け」を選択する。(移動先の場所はわかりにくいので注意)

    11. 上記で選択した「自動」/「自動順位付け」を選択し、選択した仮想マシンが表示されていることを確認する。

    12. 確認後、「OK」をクリックする。(クリック前の起動の表示は無効になっているが、これでよい)

    13. ポップアップが閉じるので、「仮想マシンの起動およびシャットダウン」で、「自動」/「自動順位付け」を選択し、選択した仮想マシンの起動が有効になっていることを確認する。

    もし、自動起動やシャットダウンのタイミングを変更する場合は、編集画面で、起動時間とシャットダウンの時間の秒数を変更する。

  • 「vixエラーコード=21009」でVMware Tools のインストールが失敗。

    vCenter Serverから、VM(Windows Server)のVMware Toolsのバージョンアップをおこなったところ、「vixエラーコード=21009」でVMware Tools のインストールが失敗した。その後、vCenter Serverの画面では、その仮想マシンは「VMware Toolsはインストールされていません」にかわった。

    アンインストールは成功しているようで、仮想マシン上もVMware Toolsは無くなっていた。

    対処方法

    1. 念のため、VM(Windows Server)のVMware Toolsのインストールで利用されていたフォルダを削除。下記のフォルダを中身ごと削除する。アクセス権がないと言われるはずなので、アクセス権を取得してから削除する。

    C:\Windows\Temp\vmware-SYSTEM

    2. vCenter Serverから、VMware Toolsのインストールを実行する(仮想サーバ上に、VMware Toolsのインストーラーをマウントする)。

    3. VMにログインして、VMware Toolsをインストールする。

  • SQL Server 2019からSQL Server 2005へのリンクサーバ経由でアクセスするプロシージャーがエラー

    SQL Server 2019からSQL Server 2005へのリンクサーバ経由でアクセスするプロシージャーでエラーが発生した。

    SQL ServerにSSMSでアクセスしてみると、リンクサーバーは存在する。リンクサーバーへの接続も問題なし。Select文でもリンクサーバー先のテーブルを参照できる。プロシージャーを実行すると、OLEDBのエラーが表示される。

    リンク サーバー "サーバ名" の OLE DB プロバイダー "MSOLEDBSQL" から、メッセージ "トランザクションは既に暗黙的または明示的に、コミットまたは中止されています。" が返されました。
    メッセージ 7391、レベル 16、状態 2、プロシージャ dbo.プロシージャー名、行 99 [バッチ開始行 2]
    リンク サーバー "サーバ名" の OLE DB プロバイダー "MSOLEDBSQL" で分散トランザクションを開始できなかったので、この操作を実行できませんでした。
    リンク サーバー "サーバ名" の OLE DB プロバイダー "MSOLEDBSQL" で分散トランザクションを開始できなかったので、この操作を実行できませんでした。

    状況をまとめると・・・

    • SQL Server 2005もSQL Server 2019も稼働している。
    • もともとはプロシージャーも正常に実行できていた。
    • リンクサーバーの接続確認は問題なし
    • Select文などを発行すると、正常にリンクサーバーのテーブルにアクセスできる。(Viewでも同様)
    • プロシージャーは、失敗する。
    • 分散トランザクションの設定はちゃんとできている(もともとは成功していた)。
    • リンクサーバーの接続で使用するユーザはアクティブであり、パスワードも問題なし。
    • 実行結果を見ていくと、ごくまれに成功しているときがある(SQL Serverへのコネクションは異なる)

    いろいろと切り分けた結果、認証先?のAD(Active Directory)のOSバージョンによって、プロシージャーの実行が成功するか失敗するかが分かれていた。古いWindowsOSのADに問い合わせがいくと成功する。新しいOS(Windows Server 2022)だと失敗する。

    Windows Server 2022のADに問い合わせされて、SQL Server 2005にアクセスされると、プロトコルとかセキュリティのキーセットの問題ではじかれて分散トランザクションが失敗して、タイムアウトになっているようだ。古いものは、互換性も無くなってきているので、きつい。

  • メモ: 「これdo台SAS (KD25/35SAS)」を使ってHDD消去をしたときの時間

    「これdo台SAS (KD25/35SAS)」を使って、HPEのサーバ用HDDを消去した。

    「HPE 900GB SAS 6G DP 10K」のディスクで、7回消去で14時間くらいで作業が終わった。

    アメリカ国防総省(DoD)規格のDoD消去なら、3回なので半分くらいの6~7時間で終わる。

    ログもUSBメモリに出力できるので、証明も残せる。消去はメニューを選んでボタンを押して、放置するだけ。機器廃棄のときに廃棄証明をとるにしても、事前の作業としてはちょうどいい。

  • Veeam Backupの使用ライセンスから不要なサーバを減らす

    Veeam Backupで取得するVMware vSphere環境の変更を行った。新しい環境のバックアップを行ったところ、別の仮想サーバとして認識され、使用されるライセンス数が2倍になった。

    Inventoryで不要なサーバを削除しても使用されるライセンスは減らない。(Inventoryで不要なサーバを削除するためには、利用されているバックアップタスクの削除も必要)

    不要なサーバで、使用されているライセンスを減らすには、以下の作業でライセンス割り当てを解除する。

    1. Veeam Backup の管理コンソールを開く

    2. メニューからライセンス(License)を開く

    3. 「Instances」のタブを開く

    4. 「Manage…」をクリックする

    5. ライセンスを使用しているサーバの一覧が表示されるので、NameとHostをみて、不要になったサーバを選択して、「 Revoke」をクリックする

    6. 「Revoke」のところ、不要な台数だけ繰り返す。

    7. 終わったら、OKで閉じていく。

  • 仮想基盤を移行したときのVeeam Backupの注意点

    Veeam Backupで仮想基盤のバックアップを取得している場合、vCenter Server や、ダイレクト登録しているESXiを入れ替えて、仮想マシンを移行すると、同じ仮想マシン名でもVeeam Backup上は別のVMとして認識される。そのため、既存のバックアップタスクでは、移行先のホストをVeeam Backupに登録しても、バックアップ対象の仮想マシンは切り替わらない。

    新しい仮想基盤にVMを移行させた場合は、Veeam Backupのバックアップタスクで、バックアップ対象となるVMを、指定しなおす必要がある。具体的には、個別のタスクで旧ホスト側のVMを削除して、新しいホストのVMを指定しなおす。このとき、別VM扱いになるので、バックアップ容量は気を付ける必要がある。

  • .NET アプリがどのランタイムバージョンで動作しているかを調べる

    現在、稼働している.NETのアプリが、どのバージョンのライタイムで、アプリケーションが動作するようになっているのかを調べてみる。この方法は、.NET5よりも後の.NETアプリについて、調べることができる。

    アプリのフォルダで、下記の名前のファイルがあるかを調べる。[appname]の部分には、そのアプリの名前がついている。

    [appname].runtimeconfig.json

    次のそのJSONファイルを開く。メモ帳などのテキストエディタで開けばよい。

    下のような中身になっているので、「tfm」や「version」の部分を確認し、どの.NETバージョンを利用するようになっているのかを確認する。

    {
      "runtimeOptions": {
        "tfm": "net8.0",
        "includedFrameworks": [
          {
            "name": "Microsoft.NETCore.App",
            "version": "8.0.5"
          },
          {
            "name": "Microsoft.AspNetCore.App",
            "version": "8.0.5"
          }
        ],
        "configProperties": {
          "System.GC.Server": true,
          "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
          "System.Reflection.NullabilityInfoContext.IsSupported": true,
          "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
        }
      }
    }

    参考: https://learn.microsoft.com/en-us/dotnet/core/runtime-config/