2024/03/31(日)ECO-Wiki (acronia) 環境ダウンロード

ECO-Wiki (acronia) 環境ダウンロード

ダウンロードURL

ECO-Wiki (acronia) 環境ダウンロードデータ を公開しました。以下のOneDriveフォルダからダウンロードできます。

  • https://1drv.ms/f/s!AnSRcn9f69SKc4CAx9lQfF72edQ
    • 20240331
      • ecowiki.tar.gz (2024/03/31時点のECO-Wikiデータ)
      • wiki.zip (Wikiプログラム)
      • img_20240331.zip (画像)
        • ファイル名がUTF-8のため、アーカイバによっては文字化けします。展開するときはUTF-8対応のアーカイバを使用してください。(7zipなど)

現在のECO-Wikiデータ(現時点のecowiki.tar.gz)は以下からダウンロードできます。(高負荷なので頻繁なアクセスは避けてください。)

ECO-Wiki (acronia) 環境構築手順

  • Wikiプログラムとデータを展開してください。(以下のコマンドを使うか、適当なアーカイバを使用。)
    unzip wiki.zip
    tar -zxvf ecowiki.tar.gz
    
    • 展開後は以下のようなディレクトリ構造になります。
      <pukiwiki>/
        backup/
        cache/
        counter/
        diff/
        image/
        lib/
        mobdb/
        plugin/
        skin/
        wiki/
        1x1.png
        default.ini.php
        echo_exlink.js
        en.lng.php
        index.php
        ja.lng.php
        keitai.ini.php
        pukiwiki.ini.php
        rules.ini.php
      
  • pukiwiki.ini.phpの$modifier、$modifierlinkを書き換えてください。
  • pukiwiki.ini.phpの$adminpassは必要に応じて設定してください。(そのままだと凍結解除ができません。)
  • 画像img_20240331.zipを好きなディレクトリに展開してください。
  • 画像の格納場所に合わせて、wiki/*.txt と backup/*.gz 内の http://eco.acronia.net/img/ を置換してください。
  • plugin/mobdb.inc.phpの以下の箇所の記述を修正してください。
    	const IMG_URL_BASE  = 'http://eco.acronia.net/img/';
    	const DISP_URL_BASE = 'http://eco.acronia.net/mobdb/#id=';
    	const POST_URL_BASE = 'http://eco.acronia.net/mobdb/#mode=post&amp;id=';
    
  • echo_exlink.jsの外部リンクホワイトリストを必要なら書き換えてください。
    		var hosts = [window.location.host,'jasmin.sakura.ne.jp','pukiwiki.sourceforge.jp','pukiwiki.osdn.jp','www.gnu.org','factage.com','twitter.com'];
    
  • 添付機能を復活させたい場合は、plugin/attach.inc.phpを元のPukiWikiのファイルに差し戻してください。

更新履歴

  • [2024/04/08] plugin/mobdb.inc.phpの修正箇所を追記。
  • [2024/04/08] echo_exlink.jsの外部リンクホワイトリストについて追記。
  • [2024/04/08] plugin/attach.inc.phpについて追記。

2024/01/04(木)WireGuard VPN 設定メモ (ASUSルーター)

PC::Memo

WireGuard VPN 設定メモ (ASUSルーター)

やりたいこと

  • VPNサーバーを経由したLAN内PCへのアクセス(ファイル共有など)
  • VPNサーバーを経由したインターネットアクセス

前提条件など

WireGuard0.png
  • ルーター(VPNサーバー): ASUS TUF GAMING AX6000
  • VPNサーバーがあるLAN: 192.168.1.0/24
  • VPNクライアントに割り当てるアドレス: 192.168.2.0/24

LAN内にVPNサーバーを立てることも考えていましたが、ルーターの機能でできそうだったので使うことにしました。

VPNサーバー設定

  1. ASUS TUF GAMING AX6000設定画面の詳細設定からVPNを選択。
  2. WireGuard VPNを選択。
    WireGuard1.png
  3. 「Tunnel IPv4 abd / or IPv6 Address」に「192.168.2.1/32」を入力。
  4. 「Listen Port」に任意のポート番号を入力。
    • v6プラス、OCNバーチャルコネクトなどのIPv4 over IPv6を利用している場合は、利用可能なIPv4ポート番号を入力。利用可能ポートは「システムログ」→「IPv6」で確認できる。
  5. 「VPNクライアント」の(+)ボタンをクリック。
    WireGuard2.png
  6. 「Address」に「192.168.2.2/32」を入力。
  7. 「許可されたIP (サーバー)」に「192.168.1.0/24,192.168.2.0/24」を入力。
    • 192.168.1.0/24もいれておかないとLAN内PCにアクセスできないと思う。
    • 192.168.2.0/24は192.168.2.2/32でも良いと思う。
  8. 「許可されたIP (Client)」に「0.0.0.0/0」を入力。
    • インターネットアクセスを含めた全ての通信をVPN側にルーティングする設定。

VPNクライアント設定

WireGuard3.png

上の設定で作成したVPNクライアントから、設定をエクスポートできるのでそのまま使います。

WireGuard4.png

以下のようになっているはず。

[Interface]
PrivateKey = ********
Address = 192.168.2.2/32
DNS = 192.168.2.1

[Peer]
PublicKey = **********
AllowedIPs = 0.0.0.0/0
Endpoint = <インターネット側IPアドレス>:<設定したポート番号>
PersistentKeepalive = 25

補足: Windows 11のファイアウォール

Windows 11標準のファイアウォールが有効になっている場合、以下のようにNetlogonサービスの通信を許可しないと、ネットワークセグメント超えのファイル共有アクセスができませんでした。

WireGuard5.png

なお、ネットワークセグメント越えのホスト名解決は別途考える必要があります。(hostsファイル使うとか、IPアドレス指定でアクセスするとか。)

2023/09/07(木)ジャンクション(NTFS)の更新日時を変更する

ジャンクション(NTFS)の更新日時を変更する

ちょっとジャンクション(NTFS)の更新日時を書き換えようとしたら、すんなりできなくて結構手間取ったのでメモ。

通常の方法ではリンク先の更新日時が変更される

まずはディレクトリとジャンクションをセットで作成。

$directory = New-Item -Path "test_directory" -ItemType Directory
$junction = New-Item -Value "test_directory" -Path "test_junction" -ItemType Junction
dir

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023/09/07      3:48                test_directory
d----l        2023/09/07      3:48                test_junction

そして、ジャンクションの方に更新日時を設定してみると、ジャンクションではなくリンク先のディレクトリの更新日時が書き換えられてしまいました。

$junction.LastWriteTime = "2000-01-02T03:04:05+09:00"
dir

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2000/01/02      3:04                test_directory
d----l        2023/09/07      3:48                test_junction

仕様と言えばそうなのかも知れませんが、それだったら表示される更新日時もリンク先のものでないと一貫性が無いような……。

ジャンクションそのものの更新日時を変更する方法

まずは「Junction LastWriteTime」とかで調べてみると、英語圏で同様の疑問が挙がっていましたが手っ取り早い解決策は無さそうでした。(Windows APIを直接使う必要がありそうな感じ。)

更新日時変更をWindows APIを使って行う場合、CreateFile→SetFileTimeという手順になるのでこっちを調べてみたところ、ジャンクション(リパースポイント)をCreateFileで開くときにOPEN_REPARSE_POINTフラグを付けて開くとリンクを辿らずに開いてくれそうです。

FileTimeコピープログラム作成

OPEN_REPARSE_POINTを指定するにはWindows APIで直接指定するしか無さそうなので、自分でプログラムを作ることにしました。

日時を自由に指定できるようにするには日時文字列の解釈が必要になって面倒なので、他のファイル・フォルダの日時をコピーするプログラムです。これなら、GetFileTimeが使えるので楽。

SetFileTimeがcreationTime/lastAccessTime/lastWriteTimeを扱うので全部コピーしています。(コピーしたくなければNULLを渡せば変更されない。)

手抜きなので失敗してもメッセージとかは出ません(^_^;)

  • ソースコード
    #include <windows.h>
    #include <tchar.h>
    
    int _tmain(int argc, _TCHAR *argv[])
    {
        HANDLE hFrom;
        HANDLE hTo;
    
        FILETIME creationTime, lastAccessTime, lastWriteTime;
    
        if (argc < 3)
        {
            return 1;
        }
    
        //----------------------------------------
        // Get FILETIME from argv[1]
        //----------------------------------------
        hFrom = CreateFile(
            argv[1],
            GENERIC_READ,
            0,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_BACKUP_SEMANTICS,
            NULL);
        if (hFrom == INVALID_HANDLE_VALUE)
        {
            return 1;
        }
        if (!GetFileTime(hFrom, &creationTime, &lastAccessTime, &lastWriteTime))
        {
            return 1;
        }
        CloseHandle(hFrom);
    
        //----------------------------------------
        // Set FILETIME to argv[2]
        //----------------------------------------
        hTo = CreateFile(
            argv[2],
            GENERIC_READ | GENERIC_WRITE,
            0,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
            NULL);
        if (hTo == INVALID_HANDLE_VALUE)
        {
            return 1;
        }
        if (!SetFileTime(hTo, &creationTime, &lastAccessTime, &lastWriteTime))
        {
            return 1;
        }
        CloseHandle(hTo);
    
        return 0;
    }
    
  • コンパイル
    "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars32.bat"
    cl.exe /DUNICODE /D_UNICODE /source-charset:utf-8 CopyFileTime.c
    

ジャンクションへのFileTimeコピー実験

CopyFileTime.exe test_directory test_junction

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2000/01/02      3:04                test_directory
d----l        2000/01/02      3:04                test_junction

ちゃんと日時コピーできてました。

コピー元の方はOPEN_REPARSE_POINTを付けずに開いている(リンク先を辿る)ので、

CopyFileTime.exe test_junction test_junction

としても同じ効果のはず。

2023/06/11(日)Synology DS218+ Entware導入 & Subversion導入

PC::NAS

Synology DS218+ Entware導入 & Subversion導入

以前、Entware-ngというパッケージ管理ツールを導入しましたが、Entware-ngとEntware-3xが統合されてEntwareになったようなので、Entwareを導入してみます。それから、DSM7からパッケージセンターのSVN Serverが使えなくなったので、Subversionの導入もやってみます。

続きを読む

2023/05/17(水)X-Finder → Tablacus Explorer 移行メモ

PC::Memo

今さらながらファイラーをX-FinderからTablacus Explorerに移行したので設定などをメモ。

以前移行を試したときは独自メニューの作り方が分からなくて諦めたけど、今回はちゃんとできました。

tc.png

続きを読む