RaspberryPI3 へ ftp でアクセス

RaspberryPI3 で nextcloud を動かしてグラフィカルなファイルサーバが稼働できたらいいのですが、実験的な動作しか確認できなかったので、とりあえず ftp サーバでも。

と思ってインストールしてみました。

 

pi@raspberrypi:~ $ sudo apt-get upgrade

パッケージリストを読み込んでいます... 完了

依存関係ツリーを作成しています

状態情報を読み取っています... 完了

アップグレードパッケージを検出しています... 完了

アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
pi@raspberrypi:~ $ sudo apt-get update

ヒット:1 http://archive.raspberrypi.org/debian stretch InRelease               

取得:2 http://raspbian.raspberrypi.org/raspbian stretch InRelease [15.0 kB]    15.0 kB を 1秒 で取得しました (7,665 B/s)                      

パッケージリストを読み込んでいます... 完了
pi@raspberrypi:~ $ sudo apt-get install vsftpd

パッケージリストを読み込んでいます... 完了

依存関係ツリーを作成しています                

状態情報を読み取っています... 完了

以下の追加パッケージがインストールされます:

 ssl-cert

提案パッケージ:

 openssl-blacklist

以下のパッケージが新たにインストールされます:

 ssl-cert vsftpd

アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。163 kB のアーカイブを取得する必要があります。

この操作後に追加で 390 kB のディスク容量が消費されます。

続行しますか? [Y/n] y

取得:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf ssl-cert all 1.0.39 [20.8 kB]

取得:2 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf vsftpd armhf 3.0.3-8 [143 kB]163 kB を 1秒 で取得しました (110 kB/s)

パッケージを事前設定しています ...

以前に未選択のパッケージ ssl-cert を選択しています。

(データベースを読み込んでいます ... 現在 134256 個のファイルとディレクトリがインストールされています。)

.../ssl-cert_1.0.39_all.deb を展開する準備をしています ...

ssl-cert (1.0.39) を展開しています...

以前に未選択のパッケージ vsftpd を選択しています。

.../vsftpd_3.0.3-8_armhf.deb を展開する準備をしています ...

vsftpd (3.0.3-8) を展開しています...

vsftpd (3.0.3-8) を設定しています ...

Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /lib/systemd/system/vsftpd.service.ssl-cert (1.0.39) を設定しています ...

systemd (232-25+deb9u6) のトリガを処理しています ...

man-db (2.7.6.1-2) のトリガを処理しています ...

pi@raspberrypi:~ $ sudo cp /etc/vsftpd.conf /etc/vsftpd.confbak

pi@raspberrypi:~ $ sudo vi /etc/vsftpd.conf

# (変更箇所のみ記載)

# ユーザ権限設定

local_enable=YES #ローカルユーザを有効に(デフォルト)

write_enable=YES #書き込み可能に(デフォルトではコメントアウト)local_umask=022  #書き込んだ際のパーミッションのマスク(デフォルトではコメントアウト) 

# ASCIIモードの設定

ascii_upload_enable=YES #アスキーでアップロードを有効(デフォルトではコメントアウト

ascii_download_enable=YES #アスキーでダウンロードの有効(デフォルトではコメントアウト) 

# ユーザ権限

chroot_local_user=YES #ローカルユーザの制限(デフォルトではコメントアウトchroot_list_enable=YES #リストにより制限を行う(デフォルトではコメントアウトchroot_list_file=/etc/vsftpd.chroot_list #リストのパス
pi@raspberrypi:~ $ sudo vi /etc/vsftpd.chroot_list
pi
pi@raspberrypi:~ $ sudo service vsftpd restart

pi@raspberrypi:~ $ 

 

 

これで完了

RaspberryPI3で GYAO! を観るには

RaspberryPI3を、普段使いのPCとして活用しても速度以外ではほとんど困ることがないのですが、GYAO! の動画が観れませんでした。

 

GYAO!のサイトで動作環境を確認すると Windows,MAC,iPhone,Androidなどが書かれていますが、LInux系は記載がないのでだめなのだと思っていましたが、 LinuxChromiumとの問題ではなく、単純にChromiumのuBlockの設定でした。

 

GYAO!のサイトを開いてChromiumの右上のuBlockの設定で GYAO!サイトをuBlock無効にすれば、普通にGYAO!の動画が観れるようになります。

 

いよいよPCいらなくなりそうです。

RaspberryPI3で128GのマイクロSDカードを使うには

RaspberryPI3 でいろいろ実験的な事をして遊んできました。

 

これはRaspberryPI の本来の目的である学習用途なのですが、だんだん試してみたいこともなくなってきてます。(自分の想像力の欠如?)

このまま放置するのも可哀想なので なにか実用的な事に使えないかな、とNextcloudでファイルサーバとか、WordPressでホームページの作成とかを試してましたが、やはりスペック的に貧弱なとこがネックになってしまい、お試し程度で限界が見えます。(当然ですね)

 

サーバ系は諦めて、普段の動画、音楽、ネット閲覧用の端末として使おうとすると、ストレージが小さいのが微妙に困ります。

 

32GのマイクロSDカードを使っていたのですが、128GのマイクロSDカードを買って利用可能な容量を増やそうとしたのですが、うまくブートできなくなりました。

 

これはマイクロSDカードの初期化の方法に問題があるらしいです。

I-O DATA ハードディスクフォーマッタ | サポートライブラリ | IODATA アイ・オー・データ機器 | IODATA アイ・オー・データ機器

こちらから フォーマッター をダウンロードしてFAT32 MBR 形式でフォーマットすれば問題なく使えるようになりました。

 

RaspberryPI3へのNextcloudのインストール

しばらく RaspberryPI を触ってませんでした(*^^*)

Windowsパソコンのファイルサーバになってくれてもいいじゃん、と思っていたところ、日経Linux1月号に RaspberryPI3にNextcloudを入れてファイルサーバにする記事がありました。

 

これじゃん!

 

と、記事どおりにインストールして起動することができたのですが、写真をアップロードしすぎたのか、急に動作が遅くなってしまいファイルサーバとして使えなくなりました。

うーん、RaspberryPI3 の性能では実用的なサーバ運用は無理なのかなぁ

動作テストレベルなら十分動いてますけどね。

 

(後述)

RaspberryPI に Nextcloudを導入しファイルサーバとして動作させることはできましたが、当初思っていたものと違っていて、便利に使うことができませんでした。

・Nextcloudにファイルを複数登録していくと、どんどん画面操作が遅くなっていく。

・Nextcloudにファイルを登録すると、全クライアントにその全てのファイルが複写される。

 

つまりスマフォからアクセスすると、全ファイルがダウンロードされてきます。

 こりゃいかんす。

 

RaspberryPI3でのWebサーバは情報が少ない

RaspberryPI3をWebサーバとして使うのは、消費電力とか、冷却装置とか、静音性とかの問題が少なく、先人が沢山いると思ったのですが、Webで探してみると、Apacheをインストールしてみました、標準サンプルの画面が表示されました、のような記事ばかりで運用やセキュリティについては、実際にRaspberryPIを使ってみての記事ではなく、一般的にLinuxならこうだからRaspberryPIもこうでしょうみたいな記事が多く、参考になっても実際にやるとなるとできない事ばかり。

 

RaspberryPI3を独自に調査してWebサーバとして使うのはちょっと困難かも。

あ、セキュリティも何も考えないで公開するならインストールするだけです。

 

 

Python 言語の理解 その9

GPIO接続したスイッチ入力とLED出力を組み合わせてみる

LED 6個を順に光らせ、スイッチが押されたら反転させる

 

GPIO_inout_LED6.py

 

#Raspberry Pi3 GPIO 入出力

#ライブラリの読み込み
import RPi.GPIO as GPIO
from time import sleep

SW_PIN = 4
LEDNO = [23,24,25,16,20,21]

#初期化
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

#入力モードとして設定
GPIO.setup (SW_PIN,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
#出力モード設定
for LED_PIN in LEDNO:
    GPIO.setup (LED_PIN,GPIO.OUT,initial = GPIO.LOW)


#出力設定
try:
    LED_PIN = 0
    LED_ADD = 1
    while True:
        GPIO.output (LEDNO[LED_PIN],GPIO.HIGH)
        sleep(0.3)
        GPIO.output (LEDNO[LED_PIN],GPIO.LOW)
        LED_PIN = LED_PIN + LED_ADD
        if (LED_PIN == 6):
            LED_PIN = 0
        if (LED_PIN == -1):
            LED_PIN = 5
        # スイッチが押されていたら反転
        if (GPIO.input(SW_PIN) == GPIO.HIGH) :
            print ( 'SW on :GPIO' + str(SW_PIN) + ' HIGH' )
            if (LED_ADD == 1) :
                LED_ADD = -1
                print ( 'LED_ADD = -1' )
            else :
                LED_ADD = 1
                print ( 'LED_ADD = 1' )
        else :
            print ( 'SW off:GPIO' + str(SW_PIN) + ' LOW' )

except KeyboardInterrupt:
    print ( 'CTRL + C' )
    pass

#GPIOリセット終了
GPIO.cleanup()

 

それなりに機能するのですが、スイッチの反応が悪くてなんかうまくいきません。
押されたトリガを捕まえられるとよいのですが、押された時に読み込まないと反応しないし、押されたままだと続けて反応してしまうので、ボタンを押したことがうまくLEDの光らせ順を変えるようには機能しない事が多いです。

で、押されたら話されるまで反転させないようにちょっとプログラムをいじってみました。

 

 

GPIO_inout-2_LED6.py

 

#Raspberry Pi3 GPIO 入出力

#ライブラリの読み込み
import RPi.GPIO as GPIO
from time import sleep

SW_PIN = 4
LEDNO = [23,24,25,16,20,21]

#初期化
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

#入力モードとして設定
GPIO.setup (SW_PIN,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
#出力モード設定
for LED_PIN in LEDNO:
    GPIO.setup (LED_PIN,GPIO.OUT,initial = GPIO.LOW)


#出力設定
try:
    SWC_CHK = 0
    LED_PIN = 0
    LED_ADD = 1
    while True:
        GPIO.output (LEDNO[LED_PIN],GPIO.HIGH)
        sleep(0.3)
        GPIO.output (LEDNO[LED_PIN],GPIO.LOW)
        LED_PIN = LED_PIN + LED_ADD
        if (LED_PIN == 6):
            LED_PIN = 0
        if (LED_PIN == -1):
            LED_PIN = 5
        if (GPIO.input(SW_PIN) == GPIO.HIGH) :
            print ( 'SW on :GPIO' + str(SW_PIN) + ' HIGH' )
            if (SWC_CHK == 0) :
                SWC_CHK = 1
                if (LED_ADD == 1) :
                    LED_ADD = -1
                    print ( 'LED_ADD = -1' )
                else :
                    LED_ADD = 1
                    print ( 'LED_ADD = 1' )
        else :
            print ( 'SW off:GPIO' + str(SW_PIN) + ' LOW' )
            SWC_CHK = 0

except KeyboardInterrupt:
    print ( 'CTRL + C' )
    pass

#GPIOリセット終了
GPIO.cleanup()

 

 

バッチリです!

ボタンを押すとLEDの光順が反転するようになりました。

Python 言語の理解 その8

if 文の不思議

今まで見てきたプログラム言語の制御文で、字下げが必須な言語は知りません!

pythonは初めて知った字下げが必要なプログラム言語!


test = 0
if test == 0 :
    print ("ifの中です")

もし、C言語ならこんな感じです。

test = 0
if ( test == 0) {
    print ("ifの中です\n") ;
}

見慣れているからか、C言語の方が見やすいです。

 

条件文は()でくくるし、その条件に合致した時に実行する文は{ }で囲んでました。

それが常識のように思ってました。
それが字下げで表現するなんて驚きです。でも見やすいような見づらいような。。

 

if (test == 0) { :
    print ("ifの中です")
}

SyntaxError: invalid syntax

 

if (test == 0) : {
    print ("ifの中です")
}

SyntaxError: invalid syntax

 

if (test == 0) :
{
    print ("ifの中です")
}

IndentationError: expected an indented block

いろいろ試してみましたが、駄目でした(>_<)

 

 

test = 0
if test == 0 :
    print ("if の then の中です tab")

else

        print ("if の else の中です tab*2")

 

これ else の後の字下げ幅が違うんですがエラーにならないし、ちゃんと機能しました。

うーん、慣れれば使いやすいのかもしれませんが、不思議な感じです。