カテゴリー: サーバー管理

  • WinMergeの設定をiniファイルで管理する

     WinMergeはデフォルトだと、設定はレジストリに保存されているらしい。

    コンピューター\HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge

     手軽にバックアップできないので、iniファイルで管理するようにした。

     WinMergeU.exe /? を実行するとコマンドラインオプションが表示される。その中に /inifile オプションがあった。

    1. スタートメニューからWinMergeを起動する
    2. 設定-エクスポートで、設定を “%USERPROFILE%\Documents\WinMerge\WinMerge.ini” に書き出す
    3. スタートメニューからWinMergeのプロパティを開き、リンク先の最後に /inifile “%USERPROFILE%\Documents\WinMerge\WinMerge.ini” を追加する
    4. デスクトップにWinMergeのショートカットを作成しているときは、同様に修正する
    5. タスクバーにピン止めする
    6. WinMergeを終了する
    7. ピン止めしたWinMergeを右クリックし、一覧からWinMerge を右クリックし、プロパティを選択する
    8. リンク先の最後に /inifile “%USERPROFILE%\Documents\WinMerge\WinMerge.ini” を追加する
      例:”C:\Program Files\WinMerge\WinMergeU.exe” /inifile “%USERPROFILE%\Documents\WinMerge\WinMerge.ini”
    9. タスクバーにピン止めしたWinMergeを起動する
    10. タスクバーに二つWinMergeが表示されたら古いWinMergeのピン止めを外し、新しいWinMergeをピン止めする
    11. 適当に比較を行い、色がおかしかったら、設定で配色を一旦Default以外に変え、Defaultに戻す

     7.8.は不要かもしれない

     WinMergeをバージョンアップした場合は、初回の起動前に3.からやり直す。

     ついでに、前述のBackup.batで、バックアップを行うように追加した。

    @rem sakuraエディター、WinMergeの設定ファイルを保存
    robocopy "%APPDATA%\sakura"                 "%WORDPRESS_BACKUP%\sakura"   /MIR /NP >> %LOGFILE% 2>&1
    robocopy "%USERPROFILE%\Documents\WinMerge" "%WORDPRESS_BACKUP%\WinMerge" /MIR /NP >> %LOGFILE% 2>&1
    
  • win-acmeの新バージョン通知

     v2.1.15辺りからwin-acmeに自身のバージョンをチェックする機能が追加された。

     ただし、実行時のログファイルに記録されているだけなので、定期的にログファイルを確認しないと気付けかない。

     そこで、win-acmeの実行に合わせてログファイルを確認し、新バージョンが発行されていれば電子メールを送るようにする。リポジトリに登録すれば良いとかは無しで。

     まず、win-acmeでバージョンチェックを有効にする。
    展開されたwin-acmeのフォルダー内にあるsettings_default.jsonをsettings.jsonという名前でコピーし、VersionCheckをtrueにする。

      "Client": {
        "ClientName": "win-acme",
        "ConfigurationPath": null,
        "LogPath": null,
        "VersionCheck": true
    
      },
    

     ログファイルをチェックするバッチファイル(win-acme_checknew.bat)
    実行した結果をログファイルに追記しておく。

    @echo off
    @echo win-acmeの新バージョンがあれば、postmaster宛にメールを送る
    @echo %DATE%-%TIME: =0% : Excecuting ... %0 %*
    
    setlocal enabledelayedexpansion
    
    set ACME_LOGFILE=C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\Log\log-%date:~-10,4%%date:~-5,2%%date:~-2,2%.txt
    
    @rem ログファイルが無ければ、終了する。
    if not exist %ACME_LOGFILE% goto :DONE
    
    set AVAILABLE=
    @rem setlocal enabledelayedexpansion なので ^! で ! をエスケープする
    for /f "usebackq delims=" %%a in (`findstr /r /c:"\[WRN\] New version .* available^!" %ACME_LOGFILE%`) do Set AVAILABLE=%%a
    
    if not "%AVAILABLE%" == "" (
        @echo New version available!
        @echo call %~dp0SendMail.bat "win-acme New version available^!" "%AVAILABLE%"
              call %~dp0SendMail.bat "win-acme New version available^!" "%AVAILABLE%"
        @echo %DATE%-%TIME: =0% %~nx0 : Send mail.>>%ACME_LOGFILE%
    ) else (
        echo No new version.
        @echo %DATE%-%TIME: =0% %~nx0 : No New Version.>>%ACME_LOGFILE%
    )
    
    :DONE
    endlocal
    
    timeout /T 300
    
    exit /b
    
    

     PowerShellスクリプトを呼び出すバッチファイル(SendMail.bat)

    @echo off
    @rem 電子メールを送信する
    @rem 送信元アドレス
    @rem 送信先アドレス
    @rem 件名
    @rem 内容
    @rem 送信元アドレス、送信先アドレスの両方とも省略した場合は、postmasterのアドレスが使用される
    echo %DATE%-%TIME: =0% : Excecuting ... %0 %*
    
    setlocal enabledelayedexpansion
    
    if "%~4" == "" (
      set MailFrom="postmaster@domain.com"
      set MailTo="postmaster@domain.com"
    
      if not "%~1" == "" set Title=%~1
      if not "%~2" == "" set TxtBody=%~2
    ) else (
      if not "%~1" == "" set MailFrom=%~1
      if not "%~2" == "" set MailTo=%~2
      if not "%~3" == "" set Title=%~3
      if not "%~4" == "" set TxtBody=%~4
    )
    
    @echo powershell -file %~dp0SendMail.ps1 !MailFrom! !MailTo! "!Title!" "!TxtBody!"
          powershell -file %~dp0SendMail.ps1 !MailFrom! !MailTo! "!Title!" "!TxtBody!"
    
    endlocal
    
    exit /b %ERRORLEVEL%

     電子メールを送信するPowerShellスクリプト(SendMail.ps1)

    Param($from, $to, $subject, $body)
    
    $ary = $from.Split("@")
    $server = $ary[1]
    $port = 587
    $user = "xxx"
    $password ="xxx"
    
    $securepassword = ConvertTo-SecureString $password -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential(
      $user, $securepassword)
    
    Send-MailMessage `
      -From $from `
      -To $to `
      -Subject $subject `
      -Body $body `
      -Encoding UTF8 `
      -SmtpServer $server `
      -Port $port `
      -UseSsl `
      -Credential $credential
    

      タスクスケジューラーライブラリのwin-acme renew (acme-v02.api.letsencrypt.org)の操作に、win-acme_checknew.batを追加し、win-acme.exeの後に実行するようにする。

     Windows Server 2016上で実行したときは、SYSTEMアカウントで実行するとログファイルにアクセスできないようだったので、Administratorアカウントにて実行させた。

     なお、win-acmeや電子証明書が更新された場合はタスクスケジューラーからこのバッチファイルの設定が削除されるかもしれないので、そういう場合は再確認しておく。

  • WordPress 掲示板設置

     ユーザー間の情報交換のため、WordPressに掲示板を設置した。

     bbPress,GD bbPress Attachments,BuddyPressのプラグインをインストールした。

    bbPress

     テーマTwenty Twenty-Oneから実装されたダークモードを使うと、トピック内の文字が黒色のままで見えなくなるので、ダークモードは禁止した。

    GD bbPress Attachments

     ダッシュボード-フォーラム-Attachments-Settings
      Users Upload RestrictionsでBlockedをoff
      Topic and Reply DeletingをDelete

     以下の方法で日本語化した。

    C:\xampp\htdocs\wordpress\wp-content\plugins\gd-bbpress-attachments\forms\uploader.php を以下のように書き変え、UTF-8,BOTなしで上書き保存する。
        "Upload Attachments" -> "ファイルのアップロード"
        "Maximum file size allowed is %s." -> "最大サイズは %s です。"
        "Attachments" -> "添付ファイル"
        "Add another file" -> "さらに追加する"

    BuddyPress

     ダッシュボード-設定ーオプション
      ツールバー:off
      アカウント削除:off