今更だが最近,Dockerを使い始めた.
便利という話は聞いていたが,予想以上の代物でもっと早く使えば良かったと思う今日この頃.
しかし,世の中にはネットに繋がっていない(繋げられない)残念な開発環境も少なくない.
そんな環境でもDockerを使うため,コンテナのイメージをエクスポート/インポートする方法を調べた.
我が家のDebianでイメージを作成し,それをRedHat に取り込んで問題なく動いたので,
大抵のディストリビューションで可能な方法だと思う.
2021年11月23日火曜日
2021年10月24日日曜日
Linux サーバーでOpenVPN を構築する
Debianで作成した自作ルーターにOpenVPN を立てたので手順を残す.
今回参考にさせて頂いたのは以下のページ.非常にわかり易い.投稿者様に感謝.
OpenVPNのインストールとセットアップからインターネット接続までのガイドブック - Qiita
手順としては大きく分けて3段階あり,はじめにEasy-RSAで証明書を生成し,次にサーバー用の設定ファイルを作成してOpenVPN を起動する.最後にクライアント用の設定ファイルを作成して,クライアントからVPN 接続できれば完了だ.
まずは,実行環境の確認.Debian 系なら大差ないと思うが,適宜環境に合わせて欲しい.
以降,具体的な手順に移る.
今回参考にさせて頂いたのは以下のページ.非常にわかり易い.投稿者様に感謝.
OpenVPNのインストールとセットアップからインターネット接続までのガイドブック - Qiita
手順としては大きく分けて3段階あり,はじめにEasy-RSAで証明書を生成し,次にサーバー用の設定ファイルを作成してOpenVPN を起動する.最後にクライアント用の設定ファイルを作成して,クライアントからVPN 接続できれば完了だ.
まずは,実行環境の確認.Debian 系なら大差ないと思うが,適宜環境に合わせて欲しい.
$ cat /etc/debian_version 11.1 $ uname -srvmo Linux 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux
以降,具体的な手順に移る.
2021年7月11日日曜日
2021年6月16日水曜日
Celeron J3455 1.5GHz メモリ8GB SSD 128GB のミニPC ACEPC AK1を購入
タイムセールで安くなっていたのでACEPC という中華系メーカーのミニパソコン(AK1
シリーズ)を購入しました.
128 x 128 x 52 mm の小型PC.
CPU は Intel の Celeron(R) CPU J3455 1.5GHz
メモリは 8.0GB
補助記憶は 128GB の SSD
台座のようになっている下部に2.5インチのHDD/SSD を装着でき,最大2TB までストレージを拡張可能です.
128 x 128 x 52 mm の小型PC.
CPU は Intel の Celeron(R) CPU J3455 1.5GHz
メモリは 8.0GB
補助記憶は 128GB の SSD
台座のようになっている下部に2.5インチのHDD/SSD を装着でき,最大2TB までストレージを拡張可能です.
2021年6月11日金曜日
Debian のブータブル USBメモリを作成する
いままでOSのインストールにはDVDを使ってきましたが,最近購入したミニPCにドライブが搭載されておらず,外付けのドライブを使うと読み込み速度が低下するので,USBメモリでブータブルディスクを作成した.
あまりにも簡単に作れて,読み込み速度もDVDの比にならないくらい早いので,もっと早く実践しておけば良かったと後悔.
ということで,ブータブルUSBメモリの作り方.Debianでしか試していないため,他のディストリビューションでも同様の手順で作成できるかは未確認.
まずはISOイメージを取得.もちろんブラウザからアクセスしても問題ない.
ダウンロードが完了したら念の為,ハッシュ値を確認.
rootユーザになって,catコマンドでUSBメモリのデバイスファイルに吐き出し.最後にsyncコマンドを実行
これだけ.あとはパソコンにUSBメモリ挿して,ブートすればOSのインストール画面が開く.ビックリするほど簡単だった.
あまりにも簡単に作れて,読み込み速度もDVDの比にならないくらい早いので,もっと早く実践しておけば良かったと後悔.
ということで,ブータブルUSBメモリの作り方.Debianでしか試していないため,他のディストリビューションでも同様の手順で作成できるかは未確認.
まずはISOイメージを取得.もちろんブラウザからアクセスしても問題ない.
$ get https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.9.0-amd64-netinst.iso
ダウンロードが完了したら念の為,ハッシュ値を確認.
$ sha256sum debian-10.9.0-amd64-netinst.iso 8660593d10de0ce7577c9de4dab886ff540bc9843659c8879d8eea0ab224c109 debian-10.9.0-amd64-netinst.iso
rootユーザになって,catコマンドでUSBメモリのデバイスファイルに吐き出し.最後にsyncコマンドを実行
# su # cat debian-10.9.0-amd64-netinst.iso > /dev/sdb # sync
これだけ.あとはパソコンにUSBメモリ挿して,ブートすればOSのインストール画面が開く.ビックリするほど簡単だった.
2021年4月25日日曜日
NETGEAR製スマートスイッチ GS308T を使用して,NIC が1つしかない PC でルーターを自作する
我が家ではRaspberry Pi にUSB-NIC を接続することで,LAN
ポート(NIC)を増設してルーター化していますが,以下のサイトで紹介されているようにタグVLAN
を使用することで,LAN ポートを増設すること無く Linux PC
をルーター化できることが判ったので,早速試してみました.
Linuxルータのタコ足配線を解消しよう ~ タグVLAN(IEEE 802.1Q)の活用
http://dsas.blog.klab.org/archives/50391881.html
LinuxとVLANで作る、シンプル&スケーラブルネットワークの極意
https://www.irori.org/doc/infra/wd41.html
VLAN に対応したスイッチングハブを所持していなかったため,NETGEAR 製の GS308T を購入しました.5,000 円ちょっとでこれだけ高機能な代物が手に入るのは本当に凄いことだと思います.
近い将来,ネットワークカメラも導入したいと考えているので,PoE 対応製品にすることも考えましたが,GS308T と比べてだいぶ値段が上がってしまうことと,配線の関係から結局ネットワークカメラもWi-Fi 接続になるような気がしたので,PoE については見送ることにしました.
Linuxルータのタコ足配線を解消しよう ~ タグVLAN(IEEE 802.1Q)の活用
http://dsas.blog.klab.org/archives/50391881.html
LinuxとVLANで作る、シンプル&スケーラブルネットワークの極意
https://www.irori.org/doc/infra/wd41.html
VLAN に対応したスイッチングハブを所持していなかったため,NETGEAR 製の GS308T を購入しました.5,000 円ちょっとでこれだけ高機能な代物が手に入るのは本当に凄いことだと思います.
近い将来,ネットワークカメラも導入したいと考えているので,PoE 対応製品にすることも考えましたが,GS308T と比べてだいぶ値段が上がってしまうことと,配線の関係から結局ネットワークカメラもWi-Fi 接続になるような気がしたので,PoE については見送ることにしました.
2021年3月23日火曜日
Raspberry Pi ルーターでポートフォワーディングして,LAN 内の VPN に接続する.
最近,自作ルーターの話題ばかりですが今回はポートフォワーディングする話.
なお,これまでのルーターの設定は以下の記事に纏めてある.
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする
Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる
Raspberry Pi ルーターに Dynamic DNS を導入する
ざっくり言うと,ラズパイをIPv4 over IPv6接続に対応したルーターに設定することで,回線の混雑を避けて通信速度を維持しつつ,PPPoE接続も共存させることで外部からのアクセスを可能にし,Dynamic DNSによってホスト名による外部からのアクセスを可能にしている.
今回はさらに,ポートフォワーディング機能を追加する.
なお,これまでのルーターの設定は以下の記事に纏めてある.
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする
Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる
Raspberry Pi ルーターに Dynamic DNS を導入する
ざっくり言うと,ラズパイをIPv4 over IPv6接続に対応したルーターに設定することで,回線の混雑を避けて通信速度を維持しつつ,PPPoE接続も共存させることで外部からのアクセスを可能にし,Dynamic DNSによってホスト名による外部からのアクセスを可能にしている.
今回はさらに,ポートフォワーディング機能を追加する.
2021年3月18日木曜日
Raspberry Pi ルーターに Dynamic DNS を導入する
IPv4 over IPv6 接続した Raspberry Pi ルーターに PPPoE 接続を共存させ外部から
IPv4 で接続することができるようになったので,Dynamic DNS を導入した.
これまでの設定は以下の記事に纏めてあるので,最初から読みたい方はどうぞ.
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする
Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる
今回は無料で使える No-IP を利用する.
初めに,https://www.noip.com/ にアクセスしてアカウントの作成とホスト名の取得を完了したら,以下の記事に従ってクライアントソフトをビルドする.ただし,ルート権限の取得と make install はしないようにする.
これまでの設定は以下の記事に纏めてあるので,最初から読みたい方はどうぞ.
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする
Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる
今回は無料で使える No-IP を利用する.
初めに,https://www.noip.com/ にアクセスしてアカウントの作成とホスト名の取得を完了したら,以下の記事に従ってクライアントソフトをビルドする.ただし,ルート権限の取得と make install はしないようにする.
2021年3月14日日曜日
Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる
先日,楽天ひかりのIPv4 over IPv6
を利用するための設定方法をまとめたが,(下記参照)
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする
今回はその続きとして,PPPoE による接続も共存させる方法.
なぜ,こんなことが必要かというと,DS-Lite方式の接続では,結局のところ,dgw.xpass.jp に対して作成したトンネルの出口をゲートウェイとして使っているので,ルーターがネットの世界と直接繋がっているわけではなく,SSH でルーターにログインしたり,Apacheを立ててHTTPでアクセスしたりすることができない.(正確にはIPv6を使えば接続可能だけど,できれば慣れ親しんだIPv4で接続したい)
これを実現するには,PPPoE の接続が必要になるが,ルーティングテーブルを適切に設定しないと,PPPoE 接続と,DS-Lite 接続のどちらを優先すべきかルーターが判断できなくなってしまう.
これを踏まえ今回は,DS-Liteと共存させるための,PPPoE 接続の方法及びルーティングテーブルの設定方法を記載する.
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする
今回はその続きとして,PPPoE による接続も共存させる方法.
なぜ,こんなことが必要かというと,DS-Lite方式の接続では,結局のところ,dgw.xpass.jp に対して作成したトンネルの出口をゲートウェイとして使っているので,ルーターがネットの世界と直接繋がっているわけではなく,SSH でルーターにログインしたり,Apacheを立ててHTTPでアクセスしたりすることができない.(正確にはIPv6を使えば接続可能だけど,できれば慣れ親しんだIPv4で接続したい)
これを実現するには,PPPoE の接続が必要になるが,ルーティングテーブルを適切に設定しないと,PPPoE 接続と,DS-Lite 接続のどちらを優先すべきかルーターが判断できなくなってしまう.
これを踏まえ今回は,DS-Liteと共存させるための,PPPoE 接続の方法及びルーティングテーブルの設定方法を記載する.
2021年3月7日日曜日
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする
光回線の契約をソフトバンク光から楽天ひかりに乗り換えた.(一年無料なので,ソフトバンクに解約金を払っても十分にお釣りが来る.)
ソフトバンク時代は,IPv4 over IPv6を利用するのに光BBユニットのレンタルが必須だったが,楽天ひかりでは対応したルーターを用いれば専用機器をレンタルする必要はないので,Raspberry PiをDS-Lite・Xpassに対応させてルーターとして可動させた.
同時に,DHCP,RADVD,DNS,さらに,2.4GHz帯/5.0GHz帯のマルチSSD無線LANとしても可動させているので,その設定手順を備忘録として記録する.
最終構成は以下の通り.
ソフトバンク時代は,IPv4 over IPv6を利用するのに光BBユニットのレンタルが必須だったが,楽天ひかりでは対応したルーターを用いれば専用機器をレンタルする必要はないので,Raspberry PiをDS-Lite・Xpassに対応させてルーターとして可動させた.
同時に,DHCP,RADVD,DNS,さらに,2.4GHz帯/5.0GHz帯のマルチSSD無線LANとしても可動させているので,その設定手順を備忘録として記録する.
最終構成は以下の通り.
eth0 :ラズパイにある有線LANポート.スイッチングハブと接続する. eth1 :USB-NICで拡張した有線LANポート.ONUと接続する. wlan0 :ラズパイにある無線LANポート.5.0GHz 帯無線LANアクセスポイントとして動作させる. wlan1 :USBドングルで拡張した無線LANポート.2.4GHz 帯無線LANアクセスポイントとして動作させる. br0 :eth0,wlan0,wlan1をつなぐブリッジ.192.168.100.1/24に設定する. ds-lite:IPv4 over IPv6用のトンネル. br0 に DPCP及びRADVD を設定し,接続した機器には自動でIPv4アドレス及びIPv6アドレスを振るように設定.
2021年2月27日土曜日
Bash でプロセスの死活チェックをスマートにやる方法
プロセス名を hogehoge としたとき,
よく見かけるのはこんな感じ.
ps aux で全てのプロセスを表示して,それをプロセス名でgrep し,ただし grep 自身もヒットしてしまうので,それを grep -v で除き,最後に wc でライン数を数える.そのライン数が0よりも大きければプロセスが存在する.と判定する.
やっていることはよく判ります.でもパイプで色々繋いだりすると,想定外の例外で引っかかることが多い...
(例えばプロセス名自体が,どこかに「grep」を含んでいる場合,この方法では検出できない)
よく見かけるのはこんな感じ.
#!/bin/bash ProcessName=hogehoge IsActive=`ps aux | grep ${ProcessName} | grep -v grep | wc -l` if [ ${IsActive} -gt 0 ]; then echo "${ProcessName} is Active." else echo "${ProcessName} is Disactive." fi exit 0
ps aux で全てのプロセスを表示して,それをプロセス名でgrep し,ただし grep 自身もヒットしてしまうので,それを grep -v で除き,最後に wc でライン数を数える.そのライン数が0よりも大きければプロセスが存在する.と判定する.
やっていることはよく判ります.でもパイプで色々繋いだりすると,想定外の例外で引っかかることが多い...
(例えばプロセス名自体が,どこかに「grep」を含んでいる場合,この方法では検出できない)
これをもうちょっとスマートにやる方法を紹介します
2021年2月22日月曜日
Linux でGUI を自動操作するツール【自作】
GUI の自動ツールとしては,xdotool
などが有名だが,そういったツールを使用できない場合は自作するのもひとつの手段.
マウスポインターを指定した座標に動かして,クリックするだけのプログラムならば,数行のコードで実現できる.
マウスポインターを指定した座標に動かして,クリックするだけのプログラムならば,数行のコードで実現できる.
click.c -------------------------------------------------------------------------------- #include <stdlib.h> #include <X11/extensions/XTest.h> int main ( int argc, char ** argv ) { // Arguments 1 is Point of X, Argument 2 is Point of Y int position[2] = {atoi ( argv[1] ), atoi ( argv[2] ) }; // Open Default Display Display * display = XOpenDisplay ( NULL ); if ( display != NULL ) { // Open 'Virtual core XTEST pointer' XDevice * device = XOpenDevice ( display, 4 ); if ( device != NULL ) { // Move Poitner XTestFakeDeviceMotionEvent ( display, device, False, 0, position, 2, 0 ); // Press & Release Left Button XTestFakeDeviceButtonEvent ( display, device, Button1, True, NULL, 0, 0 ); XTestFakeDeviceButtonEvent ( display, device, Button1, False, NULL, 0, 0 ); XCloseDevice ( display, device ); } XCloseDisplay ( display ); } return 0; }
$ gcc -lX11 -lXi -lXtst click.c -o click $ ./click 100 500
2021年2月15日月曜日
Subversionの接続先のURLを変更する
サーバーの老朽化や,VPSの引っ越し,その他設定の見直し等々,Subversion のホストが変更になることは珍しいことではない.
接続先が変更された場合,ローカルのチェックアウトを無かったことにしてしまうのも一つの手だが,コミットする前の変更ファイルを引き継ぎたい場合などは,接続先を変更すると良い.
といっても,とても簡単で,svn switch --relocate [変更前の接続先] [変更後の接続先] とするだけ.
接続先が変更された場合,ローカルのチェックアウトを無かったことにしてしまうのも一つの手だが,コミットする前の変更ファイルを引き継ぎたい場合などは,接続先を変更すると良い.
といっても,とても簡単で,svn switch --relocate [変更前の接続先] [変更後の接続先] とするだけ.
2021年2月10日水曜日
【MySQL】 ソートで NULL を一番最後にするとき,IS NULL ASC としてはいけない理由.
少々挑戦的なタイトルですが,本当は IS NULL ASC で全然構いません.(笑)
ただ私が言いたいのは,魔法の呪文のように意味も分からず IS NULL ASC とするのはやめたほうが良い.
より厳密には,それだけ覚えてしまうのは勿体無い.ということです.
IS NULL ASC のように ORDER BY 句を用いれば,様々な条件でソートすることができるので,この記事では,
なぜ IS NULL ASC で NULL を後ろにできるのか実演しながら,より汎用的な条件付きソートについて考えていきます.
サンプルとして以下のようなテーブルを用意しました.(例によってラズパイを使っているので MariaDBですが,基本的に MySQL でも同じです)
ただ私が言いたいのは,魔法の呪文のように意味も分からず IS NULL ASC とするのはやめたほうが良い.
より厳密には,それだけ覚えてしまうのは勿体無い.ということです.
IS NULL ASC のように ORDER BY 句を用いれば,様々な条件でソートすることができるので,この記事では,
なぜ IS NULL ASC で NULL を後ろにできるのか実演しながら,より汎用的な条件付きソートについて考えていきます.
サンプルとして以下のようなテーブルを用意しました.(例によってラズパイを使っているので MariaDBですが,基本的に MySQL でも同じです)
MariaDB [sample]> SELECT * FROM SAMPLE; +------+-------+ | id | value | +------+-------+ | 1 | 0 | | 2 | 10 | | 3 | 4 | | 4 | NULL | | 5 | 8 | | 6 | 1 | | 7 | 3 | | 8 | 2 | | 9 | NULL | | 10 | -5 | +------+-------+
2021年2月7日日曜日
【MySQL,MariaDB】 レプリケーションを設定する
データベースでマスタースレーブ型のレプリケーションを設定する方法を示す.
手元のラズパイ2台を使用するため,MariaDBで設定するが,基本的にはMySQLも同様の方法でできるはずだ.
データベースの初期設定手順は以下のエントリーを参照されたし.
WM×LI: Raspberry Pi にデータベースを構築する【MySQL,MariaDB】
手元のラズパイ2台を使用するため,MariaDBで設定するが,基本的にはMySQLも同様の方法でできるはずだ.
データベースの初期設定手順は以下のエントリーを参照されたし.
WM×LI: Raspberry Pi にデータベースを構築する【MySQL,MariaDB】
Raspberry Pi のモデル名を確認する
性能が段違いなので,基本的なことはラズパイ4 にやらせているが,敢えてラズパイ4 からは切り離して可動させているサービスもあったりするので,我が家ではラズパイ3,ラズパイ2 もまだまだ現役だ.
基本,ホスト名で判別しているが,どのラズパイがどのモデルだったか分からなくなることが時々ある.
そんなときは,/proc/device-tree/mode を確認すると,モデル名が表示される.
基本,ホスト名で判別しているが,どのラズパイがどのモデルだったか分からなくなることが時々ある.
そんなときは,/proc/device-tree/mode を確認すると,モデル名が表示される.
2021年2月6日土曜日
Raspberry Pi で初回起動時からsshでアクセスする方法
何番煎じかわからないけれど,Raspberry Pi用のmicro SDカードにRaspberry Pi
OSをインストールした直後の初回起動時からsshでアクセスできるようにする方法.
結論から言うと,/boot/ 直下に ssh という名前のファイルを置くだけ.
それでは細かい手順を解説します.
結論から言うと,/boot/ 直下に ssh という名前のファイルを置くだけ.
それでは細かい手順を解説します.
2021年2月4日木曜日
マルチスレッドなプログラムをgdbでデバッグする
たまにはエンジニアらしくソフトウェアのお話を.
マルチスレッドなプログラムを書くとき, 常に念頭に置きながら設計しなければならないのが排他制御だが,そんなとき,どの処理がどのスレッドで実施されているか表示できることは非常に有効なテクニックだ.
そこで次のようなコードで実験する.
<サンプルコード:test.cpp>
これをコンパイルして,gdbで実行する
マルチスレッドなプログラムを書くとき, 常に念頭に置きながら設計しなければならないのが排他制御だが,そんなとき,どの処理がどのスレッドで実施されているか表示できることは非常に有効なテクニックだ.
そこで次のようなコードで実験する.
<サンプルコード:test.cpp>
test.cpp -------------------------------------------------------------------------------- #include <iostream> #include <thread> #include <unistd.h> void a( void ) { for( int i = 0; i < 30; i++ ) { std::cout << "i : " << i << std::endl; sleep( 1 ); } } void b( void ) { for( int j = 0; j < 10; j++ ) { std::cout << "j : " << j << std::endl; sleep( 3 ); } } int main( void ) { std::thread * _a = new std::thread( a ); std::thread * _b = new std::thread( b ); _a->join(); _b->join(); return 0; } ※本来は,coutする前後でmutexを貼る必要があるが,今回は可読性重視で割愛する.
これをコンパイルして,gdbで実行する
$ g++ -g -pthread test.cpp -o test $ gdb ./test
2021年1月17日日曜日
理想の手帳が無かったので自作してみた.一冊から製本できるオンデマンド印刷サービス"製本直送.com"が便利.
年が明けてから2週間以上も過ぎてしまいましたが,ようやく今年の手帳が届きました.
ここ数年は取引先の会社から頂いた手帳を使わせてもらっていましたが,いつまでも同じ会社と取引が続くとも限らないし,他社のロゴが入った手帳を持ち歩くのもなんだか虚しい...そこで昨年の12月,「来年はちゃんと自分で買った手帳を使おう」と,本屋の手帳コーナーで色々と手にとってみたのですが,理想の手帳は見つかりませんでした.
ここ数年は取引先の会社から頂いた手帳を使わせてもらっていましたが,いつまでも同じ会社と取引が続くとも限らないし,他社のロゴが入った手帳を持ち歩くのもなんだか虚しい...そこで昨年の12月,「来年はちゃんと自分で買った手帳を使おう」と,本屋の手帳コーナーで色々と手にとってみたのですが,理想の手帳は見つかりませんでした.
2021年1月13日水曜日
svnsync で定期的にSubversion のバックアップを取得する
これまでSubversion については,何度か取り上げてきたが,
WM×LI: Raspberyy Pi を Subversion のリポジトリサーバにして,systemd で自動起動するように設定する.
WM×LI: 【svnadmin dump】Subversionのリポジトリを別のサーバーに移行する.
WM×LI: Subversionで直前のコミットを取り消す.
今回はsvnsync コマンドを使用して,リモートで定期的にSubversion をバックアップを取るお話.
先日,WebArena IndigoでレンタルしているVPSをアップデート(apt upgrade)していたら,途中で突然停止し,その後アクセス不可,再起動不能になり,Subversionのリポジトリデータが全部吹っ飛んだので,やり方を調べた.
WM×LI: Raspberyy Pi を Subversion のリポジトリサーバにして,systemd で自動起動するように設定する.
WM×LI: 【svnadmin dump】Subversionのリポジトリを別のサーバーに移行する.
WM×LI: Subversionで直前のコミットを取り消す.
今回はsvnsync コマンドを使用して,リモートで定期的にSubversion をバックアップを取るお話.
先日,WebArena IndigoでレンタルしているVPSをアップデート(apt upgrade)していたら,途中で突然停止し,その後アクセス不可,再起動不能になり,Subversionのリポジトリデータが全部吹っ飛んだので,やり方を調べた.
登録:
投稿 (Atom)