SSHFSずRaspberry Piを䜿甚したネットワヌクハヌドドラむブ



みなさんこんにちは

Raspberry Piでネットワヌクハヌドドラむブを䜜成した経隓を共有したいず思いたす。 私の蚘事は、メむンOSずしおLinuxを䜿甚しおいる人に最適です。 ここでは、SSHFSを積極的に䜿甚しおいたす。

猫に興味がある人は誰でも聞いおください。

ステップ0。準備


必芁なもの


ステップ1.むンストヌル


たず、Raspberry PiにRaspbianたたはArch Linux ARMをむンストヌルする必芁がありたす。
この蚘事では、Raspbianを䜿甚したす。
  1. Raspberry Pi Webサむトのダりンロヌドセクションに移動し、Raspbianむメヌゞをダりンロヌドしたす
  2. アヌカむブを解凍したす
  3. タヌミナルを開き、画像のあるフォルダヌに移動したす
  4. メモリカヌドをコンピュヌタヌに挿入したす
  5. タヌミナルでdf -hず入力しお、出力を確認したす。 出力には、/ dev / mmcblk0p1たたは/ dev / sdd1が含たれおいる必芁がありたす。 私の堎合、これは/ dev / mmcblk0p1です。 p1たたは、カヌドが/ dev / sdd1ず衚瀺される堎合は1がパヌティション番号であり、カヌドに耇数のパヌティションがある堎合、出力は/ dev / mmcblk0p2たたは/ dev / sdd2のたたです。 出力の゚ントリの数は、パヌティションの数によっお異なりたす。
  6. そのため、システムでのカヌドの衚瀺方法を確認した埌、画像蚘録に進みたす。
    1. タヌミナルで、umount / dev / mmcblk0p1たたはumount / dev / sdd1を実行したす。 耇数のパヌティションがある堎合は、すべおのマりントを解陀する必芁がありたす。
    2. dcflddプログラムを䜿甚しお、カヌドに画像を曞き蟌みたす。 dcflddプログラムはddず同じように機胜したすが、すでに曞き蟌たれた量を定期的に報告したす。 次のコマンドを端末に入力したす。

      $ sudo dcfldd bs=4M if=___.img of=___ 

      私の堎合、コマンドは次のようになりたす。

       $ sudo dcfldd bs=4M if=2014-12-24-wheezy-raspbian.img of=/dev/mmcblk0 

      マップぞのパスにセクション番号を指定する必芁はありたせんセクション番号が1぀であっおも。 画像はカヌド党䜓に蚘録されたす。
      bs-ブロックサむズ-カヌドに曞き蟌たれる1ブロックのサむズ。 4Mをむンストヌルした状態で録音が機胜しない堎合は、1Mを蚭定する必芁がありたすが、これにより録音時間が長くなりたす。
    3. 画像が蚘録されたら、次のコマンドを実行したす。

       $ sync 

      これにより、すべおのデヌタがカヌドに曞き蟌たれ、バッファがクリアされたす。
  7. それだけです カヌドを取り倖しお、Raspberry Piに挿入できたす。


ステップ2.最初の開始


  1. カヌドをRaspberry Piに挿入したす。
  2. Raspberry Piむンタヌネット、モニタヌ、キヌボヌドに接続したす。
  3. Raspberry Piの電源を入れたす。
  4. システムが起動するず、Raspberry Pi゜フトりェア構成ツヌルりィンドりが衚瀺されたす。
    1. 「ファむルシステムの展開」を遞択しお、Enterキヌを抌したす。 これにより、OSがカヌドのボリュヌム党䜓にアクセスできるようになりたす。
    2. 次に、ステップ2-ナヌザヌパスワヌドの倉曎に進み、新しいパスワヌドを入力したす。
    3. ステップ3-ブヌトを有効にする...に進み、コン゜ヌルテキストコン゜ヌルを遞択したす。
    4. ステップ4-囜際化オプションに進み、ロケヌルの倉曎に進み、リストでru_RU.UTF-8 UTF-8を探し、スペヌスでマヌクしおEnterを抌したす。 次に、システムはデフォルトで䜿甚するロケヌルを尋ねたす。 ロシア語を遞択しおEnterキヌを抌したす。
    5. 再び囜際化オプションに移動しおから、タむムゟヌンの倉曎に移動したす。 ペヌロッパを遞択し、リストから郜垂を探したす。 次に、Enterを抌したす。
    6. ステップ7-オヌバヌクロック赀ちゃんを少しオヌバヌクロックに進み、䞭レベルを遞択したす。
    7. ステップ8-詳现オプションに進み、ステップA2-ホスト名に進みたす。 ロヌカルネットワヌクで赀ちゃんを衚瀺する名前を入力しお、Enterキヌを抌したす。
    8. もう䞀床[詳现オプション]に進み、ステップA4-SSHに進んでSSHをオンにしたす。
    9. ここで、Raspberry Pi゜フトりェア構成ツヌルでの冒険は終わりです。 右矢印をクリックしお終了したす。
  5. このプログラムに再床アクセスする必芁がある堎合は、次を入力する必芁がありたす。

     $ sudo raspi-config 
  6. 次に、システムを再起動する必芁がありたす。 コン゜ヌルで、次のコマンドを入力したす。

     $ sudo reboot 
  7. システムの再起動埌、アカりントに移動したす。 ログむンpiパスワヌドは、以前に入力したものです。
  8. 次に、OSを曎新する必芁がありたす。 これを行うには、次を入力したす。
     $ sudo rpi-update 
    そしおその埌
     $ sudo apt-get update 
    そしお
     $ sudo apt-get upgrade 



ステップ3. SSHを構成する


  1. たず、キヌを生成する必芁がありたすただ生成されおいない堎合。 これを行うには、メむンOSで次を実行したす。

     $ ssh-keygen -t rsa -C "your_email@example.com" 
  2. その埌、キヌをRaspberry Piにコピヌする必芁がありたす。
    1. これを行うには、赀ちゃんがオンラむンになっおいるIPの䞋で芋぀ける必芁がありたす。 これは、たずえばルヌタヌにアクセスするか、次のコマンドを䜿甚しお芋぀けるこずができたす。
       $ ifconfig 

      IP 192.168.0.102がありたす。
    2. 次に、メむンOSでコマンドを実行したす。

       $ ssh-copy-id pi@192.168.0.102 

      接続を続行するには、同意を入力するよう求められたす。 yesず入力する必芁がありたす。 その埌、Raspberry Piのアカりントのパスワヌドを入力するよう求められたす。 それも玹介したす。
  3. これで、sshを介しおRaspberry Piに接続できたす。 これを行うには、メむンマシンで次のように入力したす。

     $ ssh pi@192.168.0.102 
  4. あいさ぀メッセヌゞが衚瀺されたら、歓声を䞊げおログむンしおいたす
  5. これで、モニタヌずキヌボヌドをRaspberry Piから切断できたす。 SSHを介しおすべおの远加アクションを実行したす


ステップ4. Raspberry Piを組み合わせる


  1. たず、ルヌトのパスワヌドを蚭定する必芁がありたす デフォルトでは存圚したせん。 これを行うには、次を実行したす。
     $ sudo passwd root 
    そしお、ルヌトの新しいパスワヌドを入力したす
  2. vim゚ディタヌをむンストヌルしたす。
     $ sudo apt-get install vim 
    既にむンストヌルされおいるnano゚ディタヌを䜿甚するこずもできたす。 しかし、私はvimを奜む。
  3. 次に、ナヌザヌ名を倉曎したす。 これを行うには、exitコマンドを䜿甚しお終了したす。 sshで再床ログむンしたすが、すでにルヌトの䞋にありたす。
     $ ssh root@192.168.0.102 
    コマンドを実行したす
     $ usermod -l _ -d /home/_ -m pi 
    新しい名前ずしおinn0kentyを䜿甚したす。 私の堎合、コマンドは次のようになりたす。
     $ usermod -l inn0kenty -d /home/inn0kenty -m pi 



ステップ5.静的IP


DHCPは私のために機胜するので、Raspberry Piをホヌムネットワヌクに接続するたびに新しいIPアドレスが䞎えられたすが、これはもちろん私には適しおいたせん。 IPを静的にするには、次のこずを行う必芁がありたす。
  1. タヌミナルに入る
     $ sudo vim /etc/network/interfaces 
    。 開いたファむルで、倉曎
     iface eth0 inet dhcp 
    に
     iface eth0 inet static address 192.168.0.98 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 
    ネットワヌクのパラメヌタヌを指定したす。 コマンドを䜿甚しおネットマスクずブロヌドキャストを芋぀けるこずができたす
     $ sudo ifconfig 

    およびゲヌトりェむを䜿甚しお
     $ sudo route -nee 
  2. 次に、sudo rebootコマンドでRaspberry Piを再起動したす
  3. ここで、shh経由でRaspberry Piに接続するには、入力する必芁がありたす
     $ ssh inn0kenty@192.168.0.98 


ステップ6. SSHを組み合わせる


このステップでは、ssh接続を単玔化し、より安党にする方法を瀺したす。
  1. たず、次のコマンドでssh構成ファむルを開きたす。
     $ sudo vim /etc/ssh/sshd_config 
    そしお、sshにrootずしおログむンし、パスワヌド認蚌をオフにするように犁止を蚭定したした。
     PasswordAuthentication no PermitRootLogin no 
    たた、ポヌトを倉曎したす
     Port 22226 () 
  2. 次に、Raspberry Piを再起動したす
     $ sudo reboot 
  3. ここで、Raspberry Piに接続するには、ポヌト22226を指定する必芁がありたす
     $ ssh -p 22226 inn0kenty@192.168.0.98 
    しかし、このような長いチヌムは簡玠化および最小化できたす。 これを行うには、メむンOSで構成ファむルを線集したす。 ホヌムディレクトリで、次の操䜜を行いたす。
     $ vim .ssh/config 
    次の行をそこに貌り付けたす
     Host 192.168.0.98 Hostname 192.168.0.98 User inn0kenty Port 22226 

    その埌、Raspberry Piに接続するには、ダむダルするだけです
     $ ssh 192.168.0.98 



ステップ7.倖郚からRaspberry Piに接続したす。


このセクションでは、ロヌカルネットワヌクからだけでなく、倖郚からもsshを介しおRaspberry Piに接続する方法を説明したす。
倖郚IPが静的な堎合、也杯、スチヌムバスを济びる必芁はありたせん。 倖郚IPから内郚IPにリダむレクトするだけで十分です。
しかし、あなたが、私のように倖郚IPダむナミックを持っおいるなら、ダむナミックDNSが私たちの助けになりたす。
個人的に、私はnoip.comを䜿甚しおいたす 無料ですが、定期的にサむトにアクセスし、提䟛されたアドレスを匕き続き䜿甚するこずを確認する必芁がありたす。
そこで、そこに登録しお、ホストの远加に進みたす。
  1. ホスト名に、倖郚からの接続に䜿甚するアドレスを入力し、他の䜕も倉曎せずに[ホストの远加]ボタンをクリックしたす
  2. ここで、ipが倉曎されたずきにnoipが知っおいる必芁がありたす。 2぀の方法がありたす。 たず、ルヌタヌがダむナミックドメむンネヌムシステムDDNS機胜をサポヌトしおいる堎合は、ルヌタヌ蚭定でアカりント情報ずドメむン名を入力するだけです。 その埌、ルヌタヌはIPアドレスの倉曎に぀いおnoipに通知したす。 次に、メむンコンピュヌタヌにプログラムをむンストヌルする必芁がありたす。 Noipには動的DNS曎新クラむアントがありたす。 ここから取るこずができたす
  3. 次のステップ倖郚IPからロヌカルIPぞのリダむレクトを行う必芁がありたす。
    これを行うには、ルヌタヌで[転送]-> [仮想サヌバヌ]に移動し、次の゚ントリを远加したす。
    サヌビスポヌト22226
    内枯22226
    IPアドレス192.168.0.98
    プロトコルすべお
  4. 次に、メむンOSのssh蚭定ファむルに倖郚ログむン情報を远加する必芁がありたす。
    蚭定ファむルを開きたす
     $ vim .ssh/config 
    そしおそこに远加したす
     Host _ Hostname _ User inn0kenty Port 22226 
    保存したす。
  5. それだけです 自宅からだけでなく、Raspberry Piに接続できるようになりたした


ステップ8. HDDを接続する


  1. たず、HDDをマりントするRaspberry Piにフォルダヌを䜜成する必芁がありたす
     $ mkdir hdd 
  2. 次に、ハヌドドラむブをRaspberry Piに接続し、コマンドを入力したす
     $ sudo blkid 
    出力は次のようになりたす。
     /dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="936C-7154" TYPE="vfat" /dev/mmcblk0p2: UUID="c1398422-7a7c-4863-8a8f-45a1db26b4f2" TYPE="ext4" /dev/sda1: LABEL="Seagate Expansion Drive" UUID="7CD8E7DCD8E792A6" TYPE="ntfs" 
    最埌の行は、たさに必芁なものです。 UUIDを芚えおおいおください。
  3. 次に、ファむルシステムサポヌトをむンストヌルする必芁がありたす
     $ sudo apt-get install ntfs-3g 
  4. fstabファむルを開きたす
     $ sudo vim /etc/fstab 
  5. そこに次の行を远加したす。
     UUID="*" ** ntfs-3g rw,force,exec,users 0 0  * -   UUID (  7CD8E7DCD8E792A6)  ** -       (  /home/inn0kenty/hdd) 
  6. Raspberry Piを保存しお再起動する
  7. 再起動埌、ハヌドドラむブのすべおのファむルずフォルダヌがhddフォルダヌに衚瀺されたす。


ステップ9. SSHFS


  1. メむンOS sshfsにむンストヌルする
     $ sudo apt-get install sshfs 
  2. Raspberry Piをマりントするホヌムディレクトリにフォルダヌを䜜成したす。
     $ mkdir pi 
  3. このフォルダヌにRaspberry Piをマりントしたす。
     $ sshfs 192.168.0.98:/home/inn0kenty/hdd pi 
    それだけです ハヌドドラむブからのすべおのファむルは、メむンマシンのpiフォルダヌにありたした。
  4. Raspberry Piをアンマりントするには、コマンドを入力する必芁がありたす
     $ sudo umount pi 
    たたは
     $ fusermount -u pi 
  5. 倖郚から同じこずを行うには、コマンドを少し倉曎したす。
     $ sshfs _:/home/inn0kenty/hdd pi 
  6. これらのコマンドはメむンマシンのfstabで䜜成できるため、コンピュヌタヌの電源を入れるたびにむンストヌルが実行されたすが、私にずっおはこれは良い遞択肢ではありたせん。 私がラップトップを持っおいるメむンコンピュヌタヌず、電源を入れたずきのむンタヌネットが垞にあるずは限りたせん。 したがっお、1぀の短いコマンドでRaspberry Piを簡単にマりントする小さなスクリプトを䜿甚するこずをお勧めしたす。
     #!/bin/bash ABSOLUTE_FILENAME=`readlink -e "$0"` #  #      DIRECTORY=`dirname "$ABSOLUTE_FILENAME"` if [ "x$1" = "x-nh" ] || [ "x$1" = "x-nothome" ] ; then sshfs -o nonempty _:/home/inn0kenty/hdd $DIRECTORY # -o nonempty  sshfs       #    else sshfs -o nonempty 192.168.0.98:/home/inn0kenty/hdd $DIRECTORY fi 
    1. このスクリプトをmount.shに保存し、実行可胜にしたす
       $ chmod +x mount.sh 
    2. そしお、それをpiフォルダヌに入れたす
       $ mv mount.sh pi/ 
    3. 次に、゚むリアスを远加しお、1぀のコマンドでスクリプトを実行したす。 bashrcを開きたす䜜成されおいない堎合は䜜成したす。
       $ vim .bashrc 
      そしおそこに行を远加したす
       alias pimount='/home/inn0kenty/pi/mount.sh' 
      もちろん、デヌタを眮き換えたす。
      bashを保存しお再起動したす。
      これで、1぀のコマンドでRaspberry Piをマりントできたす
       $ pimount 
      さらに、-nhたたは-nothomeスむッチを指定するず、Raspberry Piはドメむン名぀たり、 Raspberry Piは、同じLANに接続しおいなくおも最倧限に掻甚できたす。
       $ pimount -nh 
      たたは
       $ pimount -nothome 


ステップ10.倧措氎


最埌のステップは、急流ロッキングチェアを蚭眮するこずです。 私はデリュヌゞが奜きです。
  1. コマンドを順番に入力したす。
     $ sudo apt-get install deluged deluge-webui 
  2. それから
     $ sudo vim /etc/default/deluge-daemon 
    そしおそこに以䞋を入力したす
     # Configuration for /etc/init.d/deluge-daemon # The init.d script will only run if this variable non-empty. DELUGED_USER="__" # !!!CHANGE THIS!!!! # Should we run at startup? RUN_AT_STARTUP="YES" 
    次に保存しお閉じたす
  3. そしおする
     $ sudo vim /etc/init.d/deluge-daemon 
    そしおそこに以䞋を入力したす
    玠晎らしいスクリプト
     #!/bin/sh ### BEGIN INIT INFO # Provides: deluge-daemon # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Daemonized version of deluge and webui. # Description: Starts the deluge daemon with the user specified in # /etc/default/deluge-daemon. ### END INIT INFO # Author: Adolfo R. Brandes # Updated by: Jean-Philippe "Orax" Roemer PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="Deluge Daemon" NAME1="deluged" NAME2="deluge" DAEMON1=/usr/bin/deluged DAEMON1_ARGS="-d" # Consult `man deluged` for more options DAEMON2=/usr/bin/deluge-web DAEMON2_ARGS="" # Consult `man deluge-web` for more options PIDFILE1=/var/run/$NAME1.pid PIDFILE2=/var/run/$NAME2.pid UMASK=022 # Change this to 0 if running deluged as its own user PKGNAME=deluge-daemon SCRIPTNAME=/etc/init.d/$PKGNAME # Exit if the package is not installed [ -x "$DAEMON1" -a -x "$DAEMON2" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME # Load the VERBOSE setting and other rcS variables [ -f /etc/default/rcS ] && . /etc/default/rcS # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ] then log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it." exit 0 fi if [ -z "$DELUGED_USER" ] then log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME." exit 0 fi # # Function to verify if a pid is alive # is_alive() { pid=`cat $1` > /dev/null 2>&1 kill -0 $pid > /dev/null 2>&1 return $? } # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started is_alive $PIDFILE1 RETVAL1="$?" if [ $RETVAL1 != 0 ]; then rm -f $PIDFILE1 start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile \ --exec $DAEMON1 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON1_ARGS RETVAL1="$?" else is_alive $PIDFILE2 RETVAL2="$?" [ "$RETVAL2" = "0" -a "$RETVAL1" = "0" ] && return 1 fi is_alive $PIDFILE2 RETVAL2="$?" if [ $RETVAL2 != 0 ]; then sleep 2 rm -f $PIDFILE2 start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile \ --exec $DAEMON2 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS RETVAL2="$?" fi [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2 } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE2 RETVAL2="$?" start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1 RETVAL1="$?" [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2 rm -f $PIDFILE1 $PIDFILE2 [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME1" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac : 

  4. このスクリプトを実行する暩利を付䞎したす。
     $ sudo chmod 755 /etc/init.d/deluge-daemon 
  5. スタヌトアップに远加
     $ sudo update-rc.d deluge-daemon defaults 
  6. そしお実行
     $ sudo invoke-rc.d deluge-daemon start 
  7. 次に再起動したす。
    192.168.0.98:8112に移動するず、トレントダりンロヌドのWeb UIにアクセスできたす。
  8. Web UIの倖郚からのアクセスを開きたしょう。 これを行うには、リダむレクト->仮想サヌバヌでルヌタヌに戻り、別の゚ントリを远加したす。
    サヌビスポヌト80
    むンナヌポヌト8112
    IPアドレス192.168.0.98
    プロトコルすべお

    保存埌、ブラりザのアドレスバヌにドメむン名を入力するだけで、Web UIにアクセスできたす。


おわりに


私の蚘事が少なくずも誰かに圹立぀こずを願っおいたす。 ご枅聎ありがずうございたした。

Source: https://habr.com/ru/post/J247783/


All Articles