raspberry piの初期設定
とりあえず自分が行った設定のメモ
基本的にSSH接続して、操作することを想定している
環境
- Raspberry Pi 3モデルB
- TOSHIBA SDHCカード 16GB Class10
Raspbian 起動以前
ラズパイの標準OSであるRaspbianをインストールする
イメージファイルを用意する
公式サイト
Raspberry Pi Downloads - Software for the Raspberry Pi
過去のバージョン
Index of /raspbian/images
SDカードをフォーマットする
windows10なら右クリック -> フォーマットでできる
専用のソフト(SDFormatterなど)を使ったらもっと分かりやすいかもしれない
Mac OSならディスクユーティリティを使って可能
Raspberry Pi 3にRaspbianをインストール(Mac OS X を使用) - Qiita
OSをSDカードに書き込む
Windows
Win32 Disk Imager が簡単か
Win32 Disk Imager download | SourceForge.net
Mac OS
Raspberry Pi 3 初期セットアップ(Mac 用) - Qiita
*df -h
でSDカードを確認(仮に/dev/disk2s1とする)
% sudo diskutil unmount /dev/disk2 % sudo dd bs=1m if=2017-01-11-raspbian-jessie-lite.zip of=/dev/rdisk2 % sudo diskutil eject /dev/disk2
Raspbian で直接やること
キーボード、マウスなしで最初からやれるらしいが、持ってるならそれでやって問題ない
Raspberry Pi モニタなしキーボードなしマウスなし パソコンのみでRaspberry Piのデスクトップにアクセスする。 - Qiita
インターネットに接続する
raspberry pi 3はwifiが使えるので楽ですね
ファイルシステムの最適化
大きな容量のSDカードを入れても正しく認識してくれなかったりするらしい
新しいバージョンだと大丈夫なこともあるらしいが、一応確認した方がいいかも
% df -h
を実行し、/dev/root
のサイズを確認する
このサイズがSDカードの容量とほぼ一致していればOK
もし小さく表示されているようなら以下を実行
% sudo raspi-config
から Expand Filesystemを選択
raspi-configからやること
- Change Password
- Interfacing Options - SSH
ここまでやったらあとはリモートから操作可能。
SSHでログインする
% ssh -p [ポート番号] pi@[IPアドレス]
アカウント名を変えている場合はpiの部分を変更する
ファイルの転送を行いたい場合は
% scp -P [ポート番号] [送りたいファイル] pi@[IPアドレス]:[送りたい場所(/home/pi/...)]
SSHのポート番号を変更する
% sudo apt-get install vim % cd /etc/ssh % sudo vim sshd_config
ここでPort 22
をコメントアウトし、他の番号に変更しておく
色々更新する
% sudo apt-get update % sudo apt-get upgrade % sudo apt-get dist-upgrade # ディストリビューションを最新に % sudo rpi-update # ファームウェアを最新に
Tpis
.bashrc
.bashrc
ファイルをカスタマイズすると快適になる。
alias ls='ls -F --color=auto' alias ll='ls -l -1'
を追加しておいた
友人の特定ツイートにクソリプを自動的に送りたい
(Python 2.7.13)
Twitter APIを使ってみたという記事は山ほどあるので、今更という感じだが
成果物
特定のユーザが"二郎"という単語を含んだツイートをすると、自動的に二郎に誘うリプを送る
(二郎:一部の人が大好きな高カロリーラーメン)
Twitter API の準備
これも多くの人が解説してくれてるので、そちらを参照しよう
Twitterアプリケーションの作成(Consumer key、Consumer secret、Access token、Access token secretの確認方法)
以下の4つの情報が取得できればOK * Consumer Key (API Key) * Consumer Secret (API Secret) * Access Token * Access Token Secret
Python ライブラリ
わざわざライブラリを使うまでもないとは思うが、圧倒的に楽なので
様々なライブラリが存在するが、今回はこちらを用いる
GitHub - sixohsix/twitter: Python Twitter API
以下のコマンドでインストールする
% pip install twitter
基本的には以下のような形で用いる
各認証情報は先ほど取得したものに置き換える
また、タイムラインなどは辞書型で取得される
from twitter import * # 認証情報 CONSUMER_KEY = "Consumer Key" CONSUMER_SECRET = "Consumer Secret" ACCESS_TOKEN = "Access Token" ACCESS_TOKEN_SECRET = "Access Token Secret" twitter = Twitter( auth=OAuth(ACCESS_TOKEN, ACCESS_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET) ) home_timeline = twitter.statuses.home_timeline() # ホームのタイムラインを取得(デフォルトは20件) user_timeline = twitter.statuses.user_timeline(screen_name="@xxxx") # 指定したユーザのタイムラインを取得 twitter.statuses.update(status="hello") # "hello" とつぶやく
指定できるパラメータの情報などはこの辺りで確認しよう
POST statuses/update — Twitter Developers
特定のツイートに対してリプをする
各ツイートにはid
が設定されており、ツイートの際にこのidを指定することで、特定のツイートにリプが返せる
ユーザ@xxxx のツイートid yyyyにリプするときは以下のようにする
status_id = "yyyy" twitter.statuses.update(status="@xxxx hello", in_reply_to_status_id=status_id)
基本的な流れは、
- ユーザのタイムラインを取得
- 取得したツイートのテキストにキーワードが含まれているかを判定
- リプ済IDリストを確認し、まだリプしていないならクソリプし、IDをリストに追加
- 1分ほど待って、1.に戻る
これを繰り返すことで、自動的にチェックしてリプする
同じツイートにリプを返さないように、一度リプしたものは除外する処理が必要
# coding:utf-8 from twitter import * import time # 認証情報 CONSUMER_KEY = "Consumer Key" CONSUMER_SECRET = "Consumer Secret" ACCESS_TOKEN = "Access Token" ACCESS_TOKEN_SECRET = "Access Token Secret" SCREEN_NAME = "@xxxx" twitter = Twitter(auth=OAuth(ACCESS_TOKEN, ACCESS_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET)) status_id_list = [] # 同じツイートにリプしないように、リプしたidを記録しておく while True: # secreen_nameのユーザのタイムラインを取得 tweet_list = twitter.statuses.user_timeline(screen_name=SCREEN_NAME) # 二郎に関するツイートをしていた場合、クソリプを送る for tweet in tweet_list: if tweet["text"].find(u"二郎") != -1: # 探せなかった場合は、-1が帰ってくる status_id = str(tweet["id"]) # まだリプしていないツイートがあったらリプする if status_id not in status_id_list: twitter.statuses.update(status="だったら、二郎行こうぜ", in_reply_to_status_id=status_id) status_id_list.append(status_id) if len(status_id_list) >= 20: # 20以上保持する必要はないので、必要に応じて減らす status_id_list = status_id_list[1:] time.sleep(60)
プログラムを動かしっぱなしにすることを想定しているため、time
で制御している
cron
などで定期的にプログラムを実行させる方法もある
(こちらの場合は、IDリストを外部ファイルに書き出す必要がある)
GitHubへのプッシュとその周辺
githubにプッシュするまでの流れ辺りをいい加減覚えたい
まずはGithubでリポジトリを新規作成し、URLを取得する
Gitで有効になっている設定を確認し、編集する
Gitには3種類の設定が存在する。
名称 | 内容 |
---|---|
system | Gitシステム全体の設定 |
global | 対象となるユーザの設定(ユーザ名、メールアドレス) |
local | ローカルリポジトリ毎の設定 |
設定を確認するためには以下のようなコマンドを用いる
% git config --list % git config --global --list # global 設定のみを参照 % git config --local --list # local 設定のみを参照
まずはglobalの設定を行っておく
% git config --global user.name "ユーザ名" % git config --global user.email "メールアドレス"
ローカルリポジトリ編
% cd [対象ディレクトリ]
% git init
ファイルをコミット待ち状態にする
git add -A と git add . と git add -u の違い - Qiita
% git add [ファイル名] # 対象のファイルをaddする % git add . # 削除されていない部分を全てaddする % git add -u # 変更があった部分のみをaddする % git add -A # . OR -u で対象となる全てをaddする
ファイルをコミットする
% git commit -m "コメント"
ログを確認する
% git log
リモートリポジトリ編
ファイルがコミットできたら、Githubにプッシュする
まずはプッシュ先のURLを指定する(local設定ファイルに書き込まれるので、一度だけで良い)
% git remote add origin [URL]
プッシュする
% git push -u origin master
GitHubのコミット履歴に意図しない表示があるとき
違う環境からプッシュしようとしたり、最初のglobal設定を忘れていると、
commited with 名前
みたいな感じで本名が表示されたりすることがある
これはPCのアカウントをそのまま引っ張ってしまうことで発生する(MacOS限定の話?)
これはセキュリティ的によろしくない
(とは言っても、Gitというのは履歴を残すためのものなので、ある意味で間違いでは無い)
大量のコミット書き換えはgit filter-branch
コマンドで行う
git filter-branch -f --commit-filter ' GIT_AUTHOR_NAME=[名前]; GIT_AUTHOR_EMAIL=[メールアドレス]; GIT_COMMITTER_NAME=[名前]; GIT_COMMITTER_EMAIL=[メールアドレス]; git commit-tree "$@"; ' HEAD
Author と Commiter の2種類が存在し、これらに齟齬があるときに上記のような事象が生じる
そのため、どちらも一括で書き換えてしまう
これをプッシュしてGitHubに反映させる
% git push -f -u origin master