電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

レトロPCコレクション 2022年6月

毎年恒例の記事ですが、ここ1年で新しく増えたものはなく、逆にX68000 CompactとHB-F1XVとPC-286Cを手放してしまいました。
X68000 Compactはやはり現役で使ってなかったせいか愛着があるわけでもなく1年も遊ぶと飽きてきて全く起動しなくなったので、スペースの関係から売却してしまいました。
HB-F1XVは雑な改造してたので売却することを躊躇してましたが、FS-A1STの予備機がある以上特に必要が無く収納場所も圧迫されるのでジャンク品として放出してしまいました。とはいえ、S端子増設とベルトレスドライブ化してたので、思ったより値段が付きました。(2万円以上)
PC-286CはXBOXとPS5を入手して場所も手狭になったこともあり手放してしまいました。PC98はデスクトップ1台とノート1台の体制でこれは意地でも将来にわたっておいておこうと思います。

PC-9821Xa16/R12

https://blog-e.uosoft.net/entry/20200124/1579804390 参照
2018年入手
PC98のメインマシン。
コンデンサ交換等の整備品を約2万円で購入
色々追加して結構フル装備になりました。
80286以前にしか対応していないゲームや速すぎて遊びにくいゲームはPC-286Cで遊ぶとして、それ以外のことはDOS環境では大抵できるようになってます。

PC-486note au

https://blog-e.uosoft.net/entry/20200421/1587449084 参照
2020年入手
動作品で約25000円。
FDドライブが2台でPC-9801-26互換FM音源搭載のノート。640x480のTFT液晶
PC-9821Nxから乗り換えたノート環境です。FDドライブが2台なので、遊べるゲームが増えました。
DOS環境保存用のノートでは最適な機種だと思います。

FS-A1ST

2014年頃入手
当時約4万円
元MSXユーザである以上、ずっと憧れていた機種であり、いつか手に入れたいと思った機種でした。
MSX現役当時はMSX2だったので、入手したときは最高の機種がやっと手に入った気持ちでした。
FS-A1GTはディスプレイケーブルが専用なので、普通のケーブルが使用できるFS-A1STを選択しました。
音声にノイズが乗る様になったのを機に電解コンデンサを全部交換しています。その他にメモリ512KBに増設、ベルトレスFDドライブに換装をしました。
その後将来入手できなくなる可能性も考え、2017年に予備機としてもう1台同等処置を施した整備品を初回より倍近い金額で入手しました。

Libretto 70

2005年頃入手
MS-DOSが手に入るうちにと思いPC-DOS2000を購入してMS-DOS専用環境にした機種。
昔所有してたLibretto SS1000が欲しかったが結構高かったので、手ごろな値段で入手できた旧デザインのLibretto 70を選択したような記憶があります。

Vaio type W

2009年頃入手
当時流行したネットブック。他のネットブックが軒並み解像度が1024x600でしたが、その中で1366x768だったのでこれにしました。ネットブックの中では少々高価でしたが、それでも購入時5万円以下だったと思います。
これは現在も持ち続けてWindowsXP保存環境として使用しています。
Windows95時代のゲームは大抵WindowsXPでも動作するので、古いWindowsゲームでは重宝しています。


M5StickC Plus で時計制作

眠ってたM5StickC Plusを有効活用できないかと思い、時計を作ってみました。

プログラムもそんなに大きくならなかったので、全文掲載します。

#include <WiFi.h>
#include <M5StickCPlus.h>
#include <time.h>

const char* ssid       = "(Wi-fiアクセスポイントのSSID)";  
const char* password   = "(Wi-fiアクセスポイントのパスワード)";

const char *wd[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

// NTPサーバのURL
const char* ntpServer =  "ntp.jst.mfeed.ad.jp";
//  GMT+9(日本時間)
const long  gmtOffset_sec = 9 * 3600;
// サマータイム時差(無し)
const int   daylightOffset_sec = 0;


void setup() {
  M5.begin();
  
  M5.Lcd.fillScreen(TFT_BLACK);
  M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
  M5.Lcd.setRotation(1);

  adjust();

}

void loop() {
  struct tm t;
  if (getLocalTime(&t)) {
    M5.Lcd.setTextSize(5);
    M5.Lcd.setCursor(20, 25);
    M5.Lcd.printf("%02d:%02d", t.tm_hour, t.tm_min);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(175, 38);
    M5.Lcd.printf(":%02d", t.tm_sec);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(10, 90);
    M5.Lcd.printf("%04d/%02d/%02d", (1900 + t.tm_year), (t.tm_mon + 1), t.tm_mday);
    M5.Lcd.setTextSize(2);
    M5.Lcd.setCursor(197, 97);
    M5.Lcd.printf("%s", wd[t.tm_wday]);

    if (t.tm_hour == 4 && t.tm_min == 0 && t.tm_sec == 0) {
      adjust();
    }
  }
  
  delay(100);

}

void adjust() {
  WiFi.begin(ssid, password);

  // 500ms*120回なので、1分でタイムアウト
  for (int i = 0; i < 120 && WiFi.status() != WL_CONNECTED; i++) {
    delay(500);
  }
  if (WiFi.status() != WL_CONNECTED) {
    // Wifi接続エラー
  }

  if (WiFi.status() == WL_CONNECTED) {
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
    struct tm t;
    if (!getLocalTime(&t)) {
      // NTPサーバ接続エラー
    }
  }
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}

M5StickC Plus

M5StickC Plus

  • スイッチサイエンス
Amazon

chromebookに手を出しました

小学校の子供がGIGAスクール構想の一環でChromebookが配布されることになりました。
そこで今まであまり興味がなかったChromebookが気になり色々と調べてたところ自分も欲しくなってきました。

お試しの感覚で安い方から物色したところ、Lenovo IdeaPad Duet Chromebook の128GBのモデルにしました。

2022年6月5日現在で33,349円だったのですが、Amazon発送の付属品一通り揃って状態の良さそうな中古品が25,000円くらいであったので、そちらで購入しました。

実際に使用したところ、ウィンドウ表示で扱えるAndroidといった印象を受けました。
ブラウザもウィンドウ表示できるため、PCと同じ感覚で扱えます。
いくつかのAndroidアプリも使用でき、スマホ前提の画面サイズ固定のアプリがそのまま表示されるのは不思議な間隔です。

今回欲しいと思った一番のポイントはLinux環境としても使用できることです。
support.google.com
正体はDebianの仮想環境ですが、元々Androidには無いデスクトップアプリもaptコマンド等でインストールできます。
インストールしたアプリはアイコン化されChromeOSの方のランチャーに登録されるため、直接起動することができます。
Androidには無いVisual Studio CodeやArduino IDEをインストールしてみました。
また仮想環境内のユーザディレクトリはChromeOSからアクセスできるため、ChromeOSのテキストエディタで書いたPythonコードをLinuxのコンソールで実行するという使い方もできます。

今回購入したLenovo IdeaPad Duet Chromebook はキーボードが分離できるタイプでタブレットとしても使用できます。
キーボードを分離すると、ウィンドウ表示はできなくなり、ただのAndroidタブレットみたいになります。

ChromeOS自体の動作も軽量で、J4125のPCでWindowsやUbuntuを使用した時よりも快適に使用できました。

ChromeOSはセットアップ直後でシステム自体が28GBもディスクを占有してました。今回購入した機種は128GBもあるので大して問題ではないのですが、小学校で配布される機種はNEC Chromebook Y2 (Y3だったかも?)でディスクが32GBしかないようです。
カスタマイズでもっと最適化されてもっと余裕があるかもしれませんが、余計なアプリはインストールせずにWebベースのアプリを使用してデータの保存もGoogleDriveに保存といった使い方をすると思われます。
多分ゲームを入れたら怒られますね。GooglePlay自体も使用できないようにしていると予想されます。

全体的な印象として、AndsoidとChromeOSの関係はiOSとMacOSの関係と近いものがあると思いました。
思った以上に自由度があり、色々と使えるものだと思いました。

Chroombookは自動更新の有効期限がありこの期間内はOSの更新がサポートされます。
2020年以降発売の機種は最長8年の期間があり、Lenovo IdeaPad Duet Chromebook は2028年6月までです。
たぶん飽きずに来年まで使い続けていたら、来年にはもっと上位の機種に買い替えると思います。

Macのこと

まだ学生の頃はPC-9801BXでMS-DOS→Windows3.1→Windows95を使用してました。
Windos95も無理をしながら使用してたものの、i486ではいい加減重いのでPentiumのDOS/Vに乗り換えました。
いくら安かったとは言えメーカー物はまだ学生には高かったので、自作をしました。この時から最近までデスクトップはパーツを交換しながらずっと自作してました。

自作PCをやめてミニPC Minisforum HM90 にしました - 電子趣味の部屋


学校の友人がMacを使用してWebや音楽制作をしてるのを見て画面がさわやかでなんか使ってて面白そうだと思い自分も欲しいと思ってましたが、まだその頃のMacはWindows機と比較しても高くてなかなか手が出ない存在でした。

一番初めにMacを買ったのは故スティーブ・ジョブズがAppleに戻ってきて発売した Power Macintosh G3 (B&W)でした。
この頃はただの憧れで買ったのですが結局使い慣れたWindowsの方ばかり使ってしまい、ただのおもちゃでした。
MacOSでVBのようなプログラミングができるREALbasicを購入していつものパズルゲーム等を作ったりもしてました。
結局2年ほどで後継機も買うことなく手放してしまいました。

久しぶりにMacを買ったのは Mac Mini が発売された時でした。
当時余ったパーツで作ったLinux機を作っていたのですが、OSXはBSD系ということもあり置き換えができるのとデザインが良く場所を取らないので飛びついてしまいました。
日本語のソフトも結構出てきた時なので普通のPCとしてもそこそこ使用してました。
1年ほど経過したときにCPUがIntelに変更になってしまいました。
当初は急激な移行はあるわけが無いと思っているとどんどんソフトがIntelにネイティブに対応していき、OSもIntelでないと使えない機能等も出てきました。
2年もするとIntelのみ対応のソフトも増えてPowerPC Macでは使いにくくなり、またMacから離れてしまいました。

その後はiPhoneOS2の頃にiPhoneSDKが公開された時にMacbookProを購入し、それ以来Macも持ち続けています。
今ではMacもWindowsと同じくらい使いこなせるようになってますが、長年の習慣からか色々な作業をする場合のメイン機種はWindowsになってます。
MacbookAirのサイズ感や手軽さからリビング等でWebやメール等の普段使いはMacを使うことが多いです。

認定整備済製品で MacBook Air (M1) を買いました - 電子趣味の部屋

結局 PS5 も買いました PlayStation 5

以前PS5は小型化されるまで買わないと書きましたが、ヨドバシに行った際に在庫があるのを見かけて、つい買ってしまいました。

今まで所有してたPS4は初代モデルなので、以前使用していたRyzen 7 3700X+GeForce GTR2060のデスクトップPC並みにファンがうるさくいつも気になっていました。スリムなモデルが登場し消費電力も下がりファンも静かになったところで何回も買い替えようと思ってましたが、結局いままで初代で粘っていました。

PS4はテーブルの上に8cmの高さのテレビ台を置いてその隙間に置いていたのですが、これを12cmの高さの台に変えてそこにPS5を横置きで置けたので、スペース問題もクリアしました。テレビの位置も4cm上になりましたが、逆に見やすくなりました。

今のところPS5専用で遊びたいゲームはなく、PS4で遊んでたグランツーリスモ7がPS5になって光がよりリアルになって良かった以外は特にPS4と変わらない使い方をしてます。
OSのレスポンスも良く、ディスクアクセスも早くなったので、操作性は快適になりました。ファンも静かになりました。
PS4ではHDDのまま使っていたため、PS5のゲームでなくても起動やローディングも早くなり快適になりました。
今までのような新しいゲーム機を買った感覚は特に無く、新しいPCに買い替えた感覚に近いです。
XBOXの方が本当に新しいゲーム機を買った感覚でした。

XBOX SERIES Xと比較すると、同じゲームの場合はほぼ同じ感覚です。細かく検証するとどちらの方がフレームレートが高いとかどちらの方がより詳細に描写されるとかあると思いましが、正直優劣がわかるほどの差はありません。
最近では大型タイトルは大抵両機種で発売されるので、ストアを見てもそんなに差はありませんが、あえて言うとPS5は大型タイトル+国内向けのゲーム、XBOXは大型タイトル+PCにもあるような洋ゲーといったところですかね。
個人的にはGPUを追いかけるのをやめてゲームはゲーム機でやろうと思ったのでPS5を買った後でもXBOXの方で遊ぶことが多いですが、ダウンロードで買ったゲームやレトロゲームも好きなのでアーケードアーカイブも結構あり、PS5も結局は必要になったという感じです。

改めて目的を見てもただの買い替えであり、やはり小型するまで待ってても良かったと少し後悔してます。

【PS5】グランツーリスモ7

【PS5】グランツーリスモ7

  • ソニー・インタラクティブエンタテインメント
Amazon

MakeCode Arcade で遊んでみました

Microsoft MakeCode Arcade で簡単なゲームを作ってみました。

Space Attack
Catch Apple

Microsoft MakeCode Arcadeはゲームを作成できる開発環境です。
初めから基本的な機能や素材が用意されているので、簡単にゲームを作ることができます。
プログラム方法はブロック、JavaScript、Pythonでできるのですが、今回はブロックで作ってみました。

実行はWeb上でもできるのですが、対応ハードで実行することができます。
今回はELECFREAKS Retro Arcade for Educationを購入しました。
すぐに欲しかったのと、メーカーの通販サイトで送料を含めるのとそんなに変わらない金額だったので、共立エレショップで購入しました。

USBを接続してからクリックで転送できるお手軽仕様です。
また、USBドライブとして見えているので、ここにダウンロードしたuf2ファイルをコピーしても転送することができます。

対応機種はこれの他にも色々あり、Amazonからも購入できるのもがあります。

UbuntuでNAS環境構築

現在Beelink U59でNASを構築してして運用していますが、このときに行ったセットアップ内容をまとめておきたいと思います。

自分へのメモも兼ねて一通り書いたので、長文になります。


ディスク構成

デバイス 種類 用途
/dev/sda 2.5インチHDD 2TB NAS領域のデータ用
/dev/sdb M.2 SATA SSD 128GB OS含むシステム用

Beelink U59の2.5インチスロットは厚さ7mmまで対応してます。9.5mmのものは入りませんので注意してください

導入

Ubuntuのインストールとディスク構築方法はここでは省略します。
また、Ubuntu以外でもDebian系のディストリビューションなら同じ手順で構築できると思います。

OSインストール後初期ディスク構成

Ubuntuインストール時に"ディスクを削除してUbuntuをインストール"を選択したので、/dev/sdbは自動で設定されました。
/dev/sdaはディスク全体をNAS用としてExt4でフォーマットして、/nasディレクトリを作りそこにマウントしてます。
フォーマットとマウント定義はUbuntu標準の"ディスク"アプリで行いました。

デバイス マウントポイント フォーマット サイズ
/dev/sdb1 /boot/efi FAT32 537MB
/dev/sdb2 / Ext4 128GB
/dev/sda1 /nas Ext4 2TB

/nasディレクトリはrootで作成

sudo mkdir /nas

Samba

インストール

sudo apt install samba

サービス開始、自動起動設定

sudo systemctl start smbd
sudo systemctl enable smbd

アクセスユーザ設定

SambaにアクセスしたいユーザがUNIXユーザにいない場合は作成。
ここでは仮にユーザ名をuser1とする。

sudo adduser user1

Sambaパスワード設定

sudo pdbedit -a user1

Sambaのパスワードは独自に管理しているため、すでに存在するUNIXユーザでもパスワード設定が必要。

共有フォルダ用のディレクトリ作成。

ゲスト等だれてもアクセスできる共有フォルダ

ディレクトリの所有者をroot、権限を777とする。
ここでは仮に共有フォルダ名をshareとする。

sudo mkdir /nas/share
sudo chmod 777 /nas/share
特定のユーザがアクセスできる共有フォルダ

ディレクトリの所有者をアクセスユーザ、権限を700とする。
ここでは仮にアクセスユーザをuser1、共有フォルダ名をprivate_user1とする。

sudo mkdir /nas/private_user1
sudo chown user1 /nas/private_user1
sudo chmod 777 /nas/private_user1

ワークグループ設定

Sambaの設定でワークグループはWORKGROUP
これを変更する場合は設定ファイル /etc/samba/smb.conf の以下の行を変更する

workgroup = WORKGROUP

共有フォルダ設定

/etc/samba/smb.conf に共有フォルダ毎の設定を追加する
詳細な説明は省略するが、基本的に[]内に共有フォルダ名、pathにサーバ内のディレクトリを設定する

ゲスト等だれてもアクセスできる共有フォルダ

ここでは仮に共有フォルダ名をshareとする。

/etc/samba/smb.conf の最後に追加。

[share]
comment = share folder
path = /nas/share
writable = yes
guest ok = yes
guest only = yes

guest only = yes を設定することによって、すべてのアクセスがnobody:nogroupになり、ファイルを作成した他のユーザが更新や削除ができないといったことがなくなる。

特定のユーザのみアクセスできる共有フォルダ

ここでは仮に共有フォルダ名をprivate_user1、アクセス可能なユーザをuser1とする。

/etc/samba/smb.conf の最後に追加。

[private_user1]
comment = only user1
path = /nas/private_user1
writable = yes
valid users = user1
設定後Samba再起動
sudo systemctl restart smbd

転送速度チューニング

デフォルト状態では転送速度が遅いので少しチューニングしてみた。
ここの設定は環境によるので各項目の説明は省略して参考程度に書いておく。

以下の設定を /etc/samba/smb.conf の[global]セクションに追加

[global]

unix charset = UTF-8
dos charset = CP932

client min protocol = SMB2

log level = 1

socket options = TCP_NODELAY

wsdd

Windows10でデフォルトでSMB1.0のプロトコルが無効化され、Web Service Discoveryを使用するようになり、このままではWindowsのネットワーク共有に表示されなくなった。
これを解決するために Web Service Discovery host daemon (wsdd) を導入する。

/etc/apt/sources.list.d/wsdd.list作成
↓内容

deb https://pkg.ltec.ch/public/ bullseye main

pgpキーを登録してインストール

sudo apt-key adv --fetch-keys https://pkg.ltec.ch/public/conf/ltec-ag.gpg.key
sudo apt update
sudo apt install wsdd

サービススタート、自動起動

sudo systemctl start wsdd
sudo systemctl enable wsdd

NAS基本機能構築完了

ここまででNASとしての基本機能は完了。
移行の項目は個人的にやりたいことをやったので、付加機能として書いておく。

bcache導入

システム部分は128GBのSSDを使用しているが、この段階で10GBほどしか使用していない。
今後多少のサーバ機能を追加してもそんなに急激に増えるとは考えられない。
これでは非常にもったいないので、半分の64GBをHDDのキャッシュとしてSSHD的な動作を行えるbcacheを導入することにした。

まずはインストールメディアとして使用したUSBメモリからライブブートし、"ディスク"アプリを使用して/dev/sda1を64GBに縮小し、新たに64GBのExt4でフォーマットした領域を確保した。

このディスク構成からの設定を行う。

デバイス マウントポイント フォーマット サイズ
/dev/sdb1 /boot/efi FAT32 537MB
/dev/sdb2 / Ext4 64GB
/dev/sdb3 未割当て Ext4 64GB
/dev/sda1 /nas Ext4 2TB

この構成で /dev/sda1 をバックディスク、/dev/sdb3 をキャッシュディスクとして扱う

インストール

sudo apt install bcache-tools

ファイルシステムのメータデータをクリア

sudo wipefs -a /dev/sda1
sudo wipefs -a /dev/sdb3

bcache作成

sudo make-bcache -B /dev/sda1 -C /dev/sdb3

正常に作成できた場合はデバイスファイル /dev/bcache0 が作られている。(0の部分は連番)

マウント定義

まず/dev/bcache0のuuidを取得

blkid /dev/bcache0

/etc/fstabを編集
元々/nasのマウント定義のデバイス部分が "/dev/disk/by-uuid/(UUID)"の形式だったのでこのUUIDを書き換えるだけにして他のパラメータはそのまま使うことにした

仮に/dev/bcache0のUUIDを14bb71b8-a012-47fb-8290-XXXXとする

/dev/disk/by-uuid/14bb71b8-a012-47fb-8290-XXXX /nas auto nosuid,nodev,nofail,x-gvfs-show 0 0

/nasをアンマウント、マウントするのも良いが、一旦再起動

sudo reboot

再起動したらマウント確認

mount | grep nas

/dev/bcache0 on /nas type ext4 (rw,nosuid,nodev,relatime,x-gvfs-show)

キャッシュモード

cat /sys/block/bcache0/bcache/cache_mode

現在は[writethrough]となっていた。
電源切断時のデータ損失が怖いので、そのままとする。(writethroughはファイル更新時に遅延なしにHDDも更新される)

評価

まだキャッシュにあるデータが少ないせいか、そんなに変わらないが多少早くなった気がする。
PC無線LAN-NAS有線LANの環境で試したので、ディスクアクセス速度より転送速度のほうがネックになってそう。
小さいファイルの連続アクセスは快適になった気がする。

バックアップ

外付けHDDにNAS領域をバックアップすることにした。
HDDはWindowsでも読めるように、Windows上でNTFSでフォーマットしたものを使用。

マウント

/media/backupにマウントするように定義

マウントポイント作成
sudo mkdir /media/backup
uuidを取得

USBディスクを接続して"ディスク"アプリで確認したところ/dev/sdd1と判明したので、これのUUIDを取得

blkid /dev/sdd1

接続する際にデバイス名が変わる可能性があるので、UUIDでマウント定義をする

/etc/fstabに追加
仮に/dev/sdd1のUUIDをB6149A52149AXXXXとする

UUID=B6149A52149AXXXX /media/backup/ ntfs auto,nosuid,nofail,user_id=0,group_id=0,default_permissions,allow_other 0 0

USBを接続して起動すると認識されるが、起動中に接続してマウントされない場合はマウントコマンドを実行

sudo mount /media/backup

バックアップスクリプト

Sambaでシェルを編集できるように定義

管理系のファイルを置くディレクトリを作成

sudo mkdir /nas/admin_tools
sudo chmod 777 /nas/admin_tools

とりあえず誰でもアクセスできる共有フォルダとする
/etc/samba/smb.conf の最後に追加。

[admin_tools]
comment = admin tools
path = /nas/admin_tools
writable = yes
guest ok = yes
guest only = yes
設定後Samba再起動
sudo systemctl restart smbd
バックアップスクリプト作成

今回作成したPythonのスクリプトを書いておきます。
ソースの始めの方にあるfoldersの配列定義部分にバックアップ対象の/nas以下のディレクトリ名を書いてください。

folders = [
	"share",
	"private_user1",
]


この部分


バックアップスクリプトのソースファイル
ファイル名は"/nas/admin_tools/daily_backup.py"で保存してください。

import datetime
import subprocess
import os

# バックアップする対象
folders = [
	"share",
	"private_user1",
]

# logsフォルダを除外するバックアップする対象
exclude_log_folders = [
	"admin_tools",
]

dt = datetime.datetime.now()
d = dt.strftime('%Y%m%d_%H%M%S')

backup_tool_dir = "/nas/admin_tools"
nas_dir = "/nas"
dist_dir = "/media/backup/nas"
backup_delete_dir = "/media/backup/backupfiles/backup_" + d
log_dir = backup_tool_dir + "/logs/" + d[:6] + "/" + d[:8]

os.makedirs(log_dir, exist_ok=True)

# mountチェック
check = subprocess.run("mount | grep backup", shell=True, capture_output=True, text=True)
if "media" not in check.stdout:
	log_file = log_dir + "/" + d + "_error.log"
	command = "echo \"disk mount error\" > " + log_file
	subprocess.run(command, shell=True)
	exit()

# 続行

# folders
for f in folders:
	target_dir = nas_dir + "/" + f
	log_file = log_dir + "/" + d + "_" + f + ".log"
	command = "rsync -avh --delete --exclude=\"*.DS_Store\" --exclude=\"._*\" --backup --backup-dir=\"" + backup_delete_dir + "\" --log-file=\"" + log_file + "\" " + target_dir + " " + dist_dir
	subprocess.run(command, shell=True)

# exclude_log_folders
for f in exclude_log_folders:
	target_dir = nas_dir + "/" + f
	log_file = log_dir + "/" + d + "_" + f + ".log"
	command = "rsync -avh --delete --exclude=\"*.DS_Store\" --exclude=\"._*\" --exclude=\"logs\" --backup --backup-dir=\"" + backup_delete_dir + "\" --log-file=\"" + log_file + "\" " + target_dir + " " + dist_dir
	subprocess.run(command, shell=True)

command = "chmod -R a+rw " + backup_tool_dir + "/logs/" + d[:6]
subprocess.run(command, shell=True)

更新や削除されたファイルは/media/backup/backupfiles以下の日時別ディレクトリに保存される。
この処理が不要な場合は、rsyncコマンドを定義している箇所(command = "rsync〜の部分)から"--backup"を削除する。

ubuntu上で作成した場合は権限変更をする

chmod 777 /nas/admin_tools/daily_backup.py

cron登録

バックアップスクリプトの実行をcronに登録する。
毎日4時に実行するように登録した場合を書く。
cronはrootで実行するようにする。

sudo crontab -e

↓追加する内容

# backup daily
0 4 * * * /usr/bin/python3 /nas/admin_tools/daily_backup.py

ログファイル

バックアップスクリプトが実行されるとログが/nas/admin_tools/logs/(日時)に保存される。

Netatalkサーバ

MacのTimeMachineのバックアップ先として使用できるようにnetatalkを導入
最大500GBを使用できるように設定

インストール

sudo apt install netatalk

メディアファイルを置くディレクトリ

/nas/timecapsuleに置くとする

sudo mkdir /nas/timecapsule
sudo chmod 777 /nas/timecapsule

設定ファイル編集

/etc/netatalk/afp.conf を編集
割と短いので全文載せます

;
; Netatalk 3.x configuration file
;

[Global]
; Global server settings
 mimic model = TimeCapsule6,106
 mac charset = MAC_JAPANESE

; [Homes]
; basedir regex = /xxxx

; [My AFP Volume]
; path = /path/to/volume

[nas timecapsule]
 path = /media/timecapsule
 time machine = yes
 vol size limit= 500000
 valid users = user1
 unix priv = yes

サービス開始、自動起動設定

sudo systemctl start netatalk
sudo systemctl enable netatalk

DLNAサーバ

NAS製品によくあるDLNAサーバの機能も欲しので、手軽なminidlnaを導入

インストール

sudo apt install minidlna

サービス開始、自動起動設定

sudo systemctl start minidlna
sudo systemctl enable minidlna

メディアファイルを置くディレクトリ

/nas/dlnaに置くとする
今回は動画、画像、音楽ファイルの置く場所を区別しない

sudo mkdir /nas/dlna
sudo chmod 777 /nas/dlna

とりあえず誰てもアクセスできる共有フォルダとする
/etc/samba/smb.conf の最後に追加。

[admin_tool]
comment = dlna
path = /nas/dlna
writable = yes
guest ok = yes
guest only = yes

設定後Samba再起動

sudo systemctl restart smbd

DLNA設定

/etc/minidlna.conf を編集する

media_dirを変更

media_dir=/nas/dlna

リストの自動更新を有効

inotify=yes

(コメントの#を削除するだけ)

自動更新時間を1分毎に変更

notify_interval=60

(コメントの#を削除して値を変更)

設定後minidlna再起動

sudo systemctl restart minidlna

WEBサーバ

ちょっとしたメモをウェブ上におけると便利だと思い、WEBサーバを導入
始めは慣れているApacheと思ったが、少しでも軽量にしたくてnginxを使うことにした

インストール

sudo apt install nginx

サービス開始、自動起動設定

sudo systemctl start nginx
sudo systemctl enable nginx

ファイルを置くディレクトリ

/nas/wwwに置くとする

sudo mkdir /nas/www
sudo chmod 777 /nas/www

とりあえず誰てもアクセスできる共有フォルダとする
/etc/samba/smb.conf の最後に追加。

[www]
comment = www
path = /nas/www
writable = yes
guest ok = yes
guest only = yes

設定後Samba再起動

sudo systemctl restart smbd

nginx設定

/etc/nginx/sites-available/default を編集
serverブロックにある root を /nas/www に変更する

        root /nas/www;

ついでにPHPインストール

sudo apt install php php-fpm php-common php-gd php-mbstring php-json php-xml

/etc/nginx/sites-available/default にPHPの定義があるので、下のようにコメントを外して編集する

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

設定後nginx再起動

sudo systemctl restart nginx