Skip to content

yunkya2/smbfs-x68k

Repository files navigation

smbfs, smbclient - X68000 SMB サーバアクセスツール

概要

smbfs, smbclient はネットワーク接続が可能な X680x0 から、ネットワーク上の Windows ファイル共有 (SMB) サーバにアクセスするためのツールです。

smbfs

smbfs は、SMB ファイルシステムドライバです。 smbfs.x をデバイスドライバとして常駐させた後、smbmount.x コマンドによって Windows ファイル共有サーバ上の共有フォルダをマウントし、通常のファイルシステムと同様にファイル操作を行うことができます。

smbclient

smbclient は、SMB サーバにアクセスするためのコマンドラインツールです。 Linux/UNIX 系 OS 向け SMB サーバ/クライアントソフトウェア Samba に含まれている smbclient コマンドと同様に、コマンドラインから Windows ファイル共有サーバに接続して共有フォルダ内のファイル操作を行うことができます。

使用前の準備

動作環境

動作には、 http://retropc.net/x68000/software/internet/kg/tcppacka/ で無償配布されている (株)計測技研製 Human68k 用 TCP/IP ドライバまたはその互換ドライバと、このドライバに対応したネットワークアダプタ、およびそのドライバが必要になります。

以下のようなネットワークアダプタが利用できます(動作は XM6 TypeG, X68000 Z + ZUSB で確認)。

  • X680x0 実機向け: Neptune-X, Nereid, RaSCSI 等
  • X68000 エミュレータ向け: XM6 TypeG (Nereidエミュレーション機能)
  • X68000 Z 向け: ZUSB (zusbether) + BUFFALO LUA3-U2_ATX

利用するネットワークアダプタ用ドライバのドキュメントに従って設定を行い、TCPPACKA 付属のコマンドでネットワーク接続ができることを確認してください。

Windows ファイル共有の準備

smbfs, smbclient からの接続は Microsoft アカウントをサポートしていないため、接続先の Windows PC にローカルアカウントがない場合には追加して、共有フォルダにそのアカウントへのアクセス権を与える必要があります。

  1. Windows PC にローカルアカウントを追加します
  2. アクセスしたいフォルダに共有設定を行います
    • フォルダを右クリック→「プロパティ」→「共有」タブを選択→「詳細な共有」で「このフォルダーを共有する」にチェックを入れ、「アクセス許可」で 1. で追加したローカルアカウントに対して読み取り/書き込みの権限を与えます

ユーザ情報ファイルの指定(任意)

環境変数 NTLM_USER_FILE にユーザ名とパスワードを記述したテキストファイルの名前を指定しておくことで、接続の際のパスワードをファイルから読み込むことができます。 (ファイル名はフルパスで指定しないと、実行時のカレントディレクトリから読みに行ってしまうので注意してください)

ファイルには、行ごとに以下のようにドメイン名(省略可能)、ユーザ名、パスワードをコロンで区切って記述します。

[<ドメイン名>]:<ユーザ名>:<パスワード>

smbfs, smbclient は、接続時に指定されたユーザ名がこのファイルに存在する場合に、その行からパスワードを取得して接続に使用します。 パスワードは平文で記述するため、ファイルの取り扱いには注意してください。

使い方 (smbfs)

smbfs の常駐

smbfs.x をデバイスドライバとして常駐させます。以下のようにコマンドラインから起動します。
(CONFIG.SYS での登録はできません。事前に TCP/IP ドライバが常駐した状態で実行してください。)

smbfs [/u<ドライブ数>] [/r]
  • /u<ドライブ数> で、smbfs で利用するドライブ数を1~8の範囲で指定します(省略するとドライブ数 1 になります)
  • /r を指定すると、常駐している smbfs を常駐解除します

常駐すると、指定したドライブ数のドライブが smbfs 用に確保されます。

共有フォルダのマウント

smbmount.x で smbfs で確保したドライブに Windows ファイル共有サーバ上の共有フォルダをマウントします。以下のようにコマンドラインから起動します。

smbmount <接続先URL> [<ドライブ>:] [<オプション>]

<接続先URL> には接続したい SMB サーバを記述します。以下のフォーマットで指定してください。

  • [smb://][<ドメイン名>;][<ユーザ名>@]<ホスト名>[:<ポート番号>]/<共有名>[/<パス名>]
    • <ユーザ名> には接続に使用するユーザ名を指定します
    • <ホスト名> には接続先サーバ名または IP アドレスを指定します
    • <ポート番号> は省略可能で、指定しない場合にはデフォルトの 445 番ポートが使用されます
    • <共有名> には接続先の共有フォルダ名を指定します
    • <パス名> には接続先の共有フォルダ内のパス名を指定します

<オプション> は以下の通りです。

  • -U <ユーザ名>[%<パスワード>] : 接続に使用するユーザ名とパスワードを指定します
    • <接続先URL> によるユーザ名指定よりも優先されます
    • パスワードを省略した場合には接続時にパスワードの入力が求められます
  • -N : サーバへの接続時にパスワードの入力を求めないようにします

<ドライブ>: には、マウントする smbfs ドライブを指定します。 省略した場合には、最初に見つかった smbfs ドライブを使用します。

共有フォルダのアンマウント

マウントしたドライブは、smbmount.x の -D オプションでアンマウントすることができます。 また、smbmount.x を smbumount.x というファイル名に変更すると、アンマウント専用コマンドとして動作します。

smbmount -D [-a] [<ドライブ>:]
smbumount [-a] [<ドライブ>:]

指定したドライブをアンマウントします。 -a オプションを追加すると、すべての smbfs ドライブをアンマウントします。

使い方 (smbclient)

コマンドラインからの起動

コマンドラインから以下のように起動します。

smbclient <接続先URL> [<オプション>]

<接続先URL> には接続したい SMB サーバを記述します。以下のフォーマットで指定してください。

  • [smb://][<ドメイン名>;][<ユーザ名>@]<ホスト名>[:<ポート番号>]/<共有名>[/<パス名>]
    • <ユーザ名> には接続に使用するユーザ名を指定します
    • <ホスト名> には接続先サーバ名または IP アドレスを指定します
    • <ポート番号> は省略可能で、指定しない場合にはデフォルトの 445 番ポートが使用されます
    • <共有名> には接続先の共有フォルダ名を指定します
    • <パス名> には接続先の共有フォルダ内のパス名を指定します

<オプション> は以下の通りです。

  • -U <ユーザ名>[%<パスワード>] : 接続に使用するユーザ名とパスワードを指定します
    • <接続先URL> によるユーザ名指定よりも優先されます
    • パスワードを省略した場合には接続時にパスワードの入力が求められます
  • -N : サーバへの接続時にパスワードの入力を求めないようにします
  • -L : サーバで利用可能なファイル共有一覧を表示します
  • -c <コマンド...> : コマンドを実行します。複数のコマンドを実行する場合にはセミコロン(;)で区切って指定します
    • -c 以降のすべての引数がコマンドとして扱われるので、オプションの最後に指定してください

コマンドの例:

smbclient smb://user@server/share     # 指定した共有フォルダに接続

smbclient user@server -L              # サーバで利用可能な共有フォルダ一覧を表示

smbclient smb://server/share -U user%password -c ls; get file.txt
                                      # 指定した共有フォルダに接続し、ファイル一覧を表示した後 file.txt を取得

smbclient のコマンド

起動してサーバへの接続に成功すると、以下のような smbclient のコマンドプロンプトが表示されます。

SMB Client - Type 'help' for commands, 'quit' to exit
smb: />

ここでは以下のコマンドが使用できます。

コマンド 説明
dir (ls, l) ディレクトリ内容の表示
chdir (cd) カレントディレクトリの変更/表示
mkdir (md) ディレクトリの作成
rmdir (rd) ディレクトリの削除
del (rm) ファイルの削除
rename (ren) ファイル/ディレクトリの名前変更
stat ファイル/ディレクトリ情報の表示
statvfs (df) ファイルシステム情報の表示
lcd ローカルカレントディレクトリの変更/表示
shell (!) シェルコマンドの実行
get リモートファイルのダウンロード
mget 複数リモートファイルのダウンロード
put ローカルファイルのアップロード
mput 複数ローカルファイルのアップロード
quit (exit) プログラムの終了
help (?) ヘルプの表示

help <コマンド名> で、各コマンドの詳細な使い方を表示します。

制約事項

  • ファイルアトリビュートの隠しファイルやシステム属性、書き込み禁止属性などは無視されます
  • smbfs では、21文字以上のファイル名や2GB以上のサイズのファイルは表示されません。smbclient の dir コマンドでは表示されますが、get, mget コマンド等での取得はできません
  • Human68k の DSKFRE が 2GB 以上のディスクサイズを想定していないため、smbfs でのドライブの残容量表示は不正確です

ビルド方法

elf2x68k の 20251124 版以降が必要です。

git clone --recursive https://github.com/yunkya2/smbfs.git

で、サブモジュール込みで clone した後、以下のコマンドでビルドします。

make

謝辞

Human68k のリモートドライブの実装は以下を参考にしています。開発者の皆様に感謝します。

Human68k の起動後のブロックデバイスの常駐・解除の実装は susie.x を参考にしています。開発者の GORRY 氏に感謝します。

Windows ファイル共有へのアクセスにはライブラリ libsmb2 を使用しています。開発者の Ronnie Sahlberg 氏に感謝します。

ライセンス

Copyright (c) 2023,2024,2025 Yuichi Nakamura (@yunkya2)

本プログラムは、オリジナルで開発したソースコードについては MIT ライセンスとします。その他利用されている以下のソフトウェアについては開発元のライセンス条件に従います。

  • libsmb2 (LGPL-2.1)

本プログラムは LGPL を採用している libsmb2 を静的リンクしているため、ビルド生成物のバイナリ配布の際には LGPL が適用されます。独自の修正を加えてビルドしたバイナリを配布する際にはソースコードの開示が必要となります。