虹とトルネード

趣味のこととか少し技術的なこととかメモします

qiitaはじめました

qiitaもはじめました。最初ははてなブログ一本でいこうかと思ったのだけれども、使い分けるのもいいんじゃないかと思いました。

  • qiita : 技術的に共有したい、もしくは純粋な技術メモ
  • hatena blog : その他、日記や実験的なこと

こんな感じで使い分けていきたいと思います。どちらもMarkdownで書けるのがいい。はてなブログはどちらかといえばすごく気軽に投稿できる感じがする。情報共有に特化しているだけにquiitaは少し緊張する。

たまに両方同じ記事を載せることもあるかもしれないです。マイクラのことは絶対こっちだな。

python virtualenv

pythonにはvirtualenvという仮想環境が簡単に作れるモジュールがある。お試しに何かモジュールをインストールしたい場合、virutalenvで環境を作ってそちらにインストールして試せば、システム環境は無傷で使える。いくつも環境が作れるのでpythonのバージョンで分けたりと色々と便利なのだ。 気に入らなければその環境を消すか使わなければいいだけ。

virtualenvとそれを簡単に管理できるvirtualenvwrapperをセットで導入するのが便利なのでそちらをメモ。

  • ubuntu14.04
  • Mac OSX Yosemite(10.10.3)

install and setup

ubuntu

# pipがなければインストール
$ sudo apt-get install python-pip
# pythonを使うなら依存関係でエラーが出るかもしれないのでこちらもインストール
$ sudo apt-get install python2.7-dev

# virtualenv / virtualenvwrapperのインストール
$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper

mac

Macpipは最初から使えるはず。

# virtualenv / virtualenvwrapperのインストール
$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper

setup

virtualenvwrapperを使うには以下のスクリプトbashrcに追加する必要がある。

$ vim ~/.basrh  # macは`~/.bash_profile`
    source /usr/local/bin/virtualenvwrapper.sh
    export WORKON_HOME=~/.virtualenvs

使ってみる

作成

オプションは色々とあるが、システムのまっさらな状態で使ってみたいので、基本的に自分は--nosite-packageのみつける。

# mkvirtualenv <option> <環境名>
$ mkvirtualenv --no-site-package hoge
    # --never-download        : ネットワークからDLをしない
    # --system-site-packages  : インストール済みモジュールを使用する
    # --no-site-packages      :  インストール済みモジュールを全て外した状態で仮想環境が作成される

# 作成されるとコマンドプロンプトに一番左に環境名が追加される
(hoge)$

作成した環境ディレクトリを確認

  • 環境ディレクトリに移動
(hoge)$ cdvirtualenv
# ディレクトリを調べてみる
(hoge)$ pwd
    /home/hoge/.virtualenvs/hoge
# 中身はこんな感じ
(hoge)$ ls
    bin  include  lib  local

モジュールをインストールしてみる

  • gitでバックアップをとって他のモジュールをインストールしてみる
# 環境全体をローカルgitにコミットしておく
(hoge)$ git init; git add -A; git commit -a -m "init"
# 何かと便利な`Twisted`モジュールをインストールしてみる
(hoge)$ pip install twisted
  • gitで差分を見てみると、いろいろ新しく追加されている。
     On branch master
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #  bin/cftp
    #  bin/ckeygen
    #  bin/conch
    #  bin/lore
    #  bin/mailmail
    #  bin/manhole
    #  bin/pyhtmlizer
    #  bin/tap2deb
    #  bin/tap2rpm
    #  bin/tapconvert
    #  bin/tkconch
    #  bin/trial
    #  bin/twistd
    #  lib/python2.7/site-packages/Twisted-15.1.0-py2.7.egg-info/
    #  lib/python2.7/site-packages/twisted/
    #  lib/python2.7/site-packages/zope.interface-4.1.2-py2.7-nspkg.pth
    #  lib/python2.7/site-packages/zope.interface-4.1.2-py2.7.egg-info/
    #  lib/python2.7/site-packages/zope/
    #  pip-selfcheck.json
    #
  • 早速インストールしたモジュールを使ってみる
# importできる
(hoge)$ python -c "import twisted"
  • 環境を離れて使ってみる
# 環境の停止
(hoge)$ deactivate
# 元のシステムで使ってみるとエラーが出る
$ python -c "import twisted"
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ImportError: No module named twisted

これにより、システム環境にはインストールされていないことがわかる。

よく使うコマンド一覧

deactivate : 環境の停止

# 環境の停止
(hoge)$ deactivate
$

workon : 環境に移行する

すでに環境があるならばworkonコマンドでその環境に移行することができる

$ workon hoge
(hoge) $

lssitepackages : インストールしたパッケージ一覧

(hoge)$ lssitepackages
    Twisted-15.1.0-py2.7.egg-info  pip-6.1.1.dist-info        zope
    _markerlib                     pkg_resources              zope.interface-4.1.2-py2.7-nspkg.pth
    easy_install.py                setuptools                 zope.interface-4.1.2-py2.7.egg-info
    easy_install.pyc               setuptools-15.0.dist-info
    pip                            twisted

rmvirtualenv : 環境を消す

フォルダをまるごと消しても事は済むのだが、もちろん環境を削除するコマンドもある。

$ rmvirtualenv hoge

おしまい

これ使っていていいのは、色々と試しても環境ごと削除すれば綺麗さっぱりできる。ドジな自分にはもってこいな環境なのである (;^_^

launch MCServer on Raspberry Pi 2

f:id:caad1229:20150428153206p:plain

MCServerはC++で書かれた軽量なMinecraftサーバだ。 C++で書かれているためJavaのVanillaサーバよりも軽快な動作が期待できる。

vanillaサーバー構築については前の記事にあります。 caad1229.hatenablog.com

マルチプラットフォーム対応で、Raspberry Pi用のバイナリも用意されている。 しかも設定すればサーバーと同時にウェブサーバも立ち上がり、ブラウザから管理できるのも魅力的だ。それに、確かにvanillaサーバーよりも起動が早いし、CPU使用率は低く、ラグなども起こらなかった。 が、少しばかり違和感があった。

  • 敵の動作、またダメージを与えた時の挙動がちょっと変。具体的には、ダメージを与えると結構吹っ飛ぶ。その吹っ飛び方もちょっとゆっくりで、なんていうのか月にいる感じ?
  • 1.7と1.8にマルチで対応しているらしく、特にバージョンで分かれていることはないようだ。だからなのか不明だが、1.8対応のブロックをおいてもそのブロックにはならなかった。

そんなんだけども動かした時のことをメモ。

Download

サイトからDLできるし、Githubからソースごと取得もできる。ここではwgetでダウンロード。

$ mkdir -p ./work/minecraft; cd ./work/minecraft
$ wget http://builds.cuberite.org/job/MCServer%20Linux%20armhf/lastSuccessfulBuild/artifact/MCServer/MCServer.tar
$ tar -xvf MCServer.tar

起動

一発目の起動でワールド生成や、コンフィファイルが生成される。特にいじる必要がない、もしくは最初からコンフィグファイルなどが用意出来ているのであればそのまま運用してもいい。

$ cd ./MCServer
$ ./MCServer
    # stopはvanilla同様`stop`で終わらせる

Web Serverの設定

起動すると、デフォルトでもウェブサーバーも立ち上がっている。しかしユーザの追加などしていないためログインできないため追加する必要がある。

  • userの追加
$ vim ./webadmin.ini
    # defaultポートは8080
    [WebAdmin]
    Ports=8080
    Enabled=1

    # ユーザを追加するには以下のようにする
    # [User:<user name>]
    # Password=<pass>
    [User:admin]
    Password=admin
  • Serverの再起動
$ ./MCServer
  • web serverにアクセスしてWebAdmin Log inをクリック。

f:id:caad1229:20150428153224p:plain

  • パスワードを求められるのでwebadmin.ini編集時に追加したユーザ名とパスワードを入力

f:id:caad1229:20150428153235p:plain

  • ログインできた

f:id:caad1229:20150428153246p:plain

色々と設定できる。こちらで管理できるのですごく便利だと思う。加えて、コマンドなどvanillaサーバーとは違うのでwikiを参照する必要がある。

おしまい

メモしておいてなんだが、こちらは現在使っていない。が、そんなに大した作業でもないので試してみてはいかがだろうか。webから管理もできるし、こういったことが簡単にできるのはやっぱり作った人たちに感謝したい。現在も開発が続いているようだし今後に期待である。1.7でやったらいいかもしれないし。。

AndroidコマンドでGradleプロジェクトを作る

f:id:caad1229:20150422110351p:plain 最近好きなのはGradleAndroidツールはGradleをサポートしている。 サクッとプロジェクトを作ってテストアプリとか作れるのはいい。

IntelliJ IDEAAndroid Studioから作ったほうが楽だと思う。 でもコマンドからでも作れるのをメモしておきたい。それにGradleを理解するのに役に立った。実験的な要素も含んだメモ。

ちなみに自分はIntelliJを使っているのだが、それでプロジェクト作るとマルチプロジェクトになるからIDEから作るのはちょっと好きではないのだ。

Gradleの導入

Wrapperがあるが、Gradleを使うなら自身のPCにインストールしておいて損はない。

GVMのインストール

様々な方法があるが、自分の場合はバージョン管理も楽だしGVMから。 サイトにあるインストールスクリプトをコピペで終わり。超簡単。

$ curl -s get.gvmtool.net | bash

Gradleのインストール

GradleインストールするならGroovyもインストールしておこうじゃないか。 GroovyってのはjavaライクなGradleで使われている言語。

$ gvm install groovy # groovyをインストール
$ gvm install gradle  # gradleをインストール

Project作成

Android SDKのパスが通っているものとする。 で、Androidツールコマンドを使ってGradleのAndroidプロジェクトを作成する。

$ android create project
    -gradle -v 1.1.3    # gradleを使用する (バージョン番号指定する)
    --target 7         # ターゲット番号(`$ android list target`で確認)
    --name hoge         # project name
    --path hoge         # プロジェクトディレクトリ名
    -- package com.caad1229.hoge    # パッケージ名
    --activity MainActivity         # アクティビティ名

# Gitでローカルブランチにコミットしておく。後半にちょっと確認したい部分があるので。
$ cd ./hoge
$ git init; git add -A; git commit -a -m "init";

Gradle Android Pluginのバージョン指定はここから。2015年4月現在、ベータを抜かした最新バージョンは1.1.3。 現在も頻繁にバージョンが変わっている模様。

wrapperでビルド

で、せっかく生成してWrapperによりGradleもはいっているのでgradlewでビルドしたところエラー orz

$ cd ./hoge
$ ./gradlew build
    FAILURE: Build failed with an exception.

    * Where:
    Build file '/home/hoge/temp/hoge/build.gradle' line: 9

    * What went wrong:
    A problem occurred evaluating root project 'hoge'.
    > Could not create plugin of type 'AppPlugin'.

    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    BUILD FAILED

    Total time: 1.703 secs

WrapperされたGradleのバージョンを確認してみると、1.12のようだ。古い。

$ cat ./gradle/wrapper/gradle-wrapper.properties
    #Wed Apr 10 15:27:10 PDT 2013
    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists
    distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip

自分のGradleでビルド

Wrapperを使わずに自分のGradleでビルドする。がこれも失敗する。

$ gradle build
    FAILURE: Build failed with an exception.

    * Where:
    Build file '/home/sasaki/temp/hoge/build.gradle' line: 17

    * What went wrong:
    A problem occurred evaluating root project 'hoge'.
    > Could not find method runProguard() for arguments [false] on BuildType_Decorated{name=release, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, applicationIdSuffix=null, versionNameSuffix=null, minifyEnabled=false, zipAlignEnabled=true, signingConfig=null, embedMicroApp=true, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}}.

    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    BUILD FAILED

    Total time: 2.536 secs

理由はrunProguardの名前が1.0.0以降変わっているのだ(参考)。 なので以下のように修正する。

$ vim ./build.gradle
-            runProguard true
+            minifyEnabled true

で、再度挑戦すると成功した。

$ gradle build
    : # 省略
    check
    :build

    BUILD SUCCESSFUL

    Total time: 3.928 secs

自分のGradleでWrapperしなおす

もし、このプロジェクトを他の人に渡す場合、他の人にもGraleインストールしてくださいという必要がある。が、そんなことしたらGradleのいいところを半分以上捨てているようなもの。環境が変わってもプロジェクト単位で開発環境を保持できるwrapperがあるのがGraldeのすごい魅力的なところだと思う。

Gralde Wrapper

早速wrapperをやってみる。

$ gradle wrapper
    :wrapper

    BUILD SUCCESSFUL

    Total time: 2.826 secs

Wrapperでビルド

今度はgradlewスクリプトでビルド実行すると成功する。

$ gradle build
    : # 省略
    check
    :build

    BUILD SUCCESSFUL

    Total time: 3.928 secs

なにがどうなったのか

gitで最初のソースをコミットしているので差分を確認してみる。

$ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   build.gradle
        modified:   gradle/wrapper/gradle-wrapper.jar
        modified:   gradle/wrapper/gradle-wrapper.properties

    Untracked files:
      (use "git add <file>..." to include in what will be committed)

        .gradle/
        build/

    no changes added to commit (use "git add" and/or "git commit -a")

注目したいのはwrapperの中身が変わっていること。diffで確認。

$ git diff gradle/wrapper/gradle-wrapper.properties
        :   # 省略
    -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
    +distributionUrl=https\://services.gradle.org/distributions/gradle-2.3-bin.zip

gradleのバージョンが変わっている。これで他の人が他の環境でgradlewを実行したら自分と同じ2.3を使ってビルドしてくれるはず。

すごい初歩的なことだけど、こういったこと確認して納得できると楽しい。

udevでデバイス名を固定する

カーネルで認識するデバイスファイル名は、デバイスの抜き差しを行った時に変わってしまう場合がある。 そういった場合、デバイスファイルに直接読み書きを行うプログラムを作るとデバイスファイル名が定まらないために面倒なことになる。

こっちとしては特定の機器が接続された時、特定のデバイスファイルとしてアクセスしたいのである。

udevの恩恵にすがると動的にデバイスファイルを作成してくれる。その作成されたデバイスファイルはカーネルが認識したデバイスファイルのリンクである。

今回は手元にあったソニーNFCカードリーダを使ってデバイス名を固定にしてみたのをメモ。

  • ubuntu14.04

USB情報を取得

まず、必要なのはデバイスのUSB情報にあるベンダーIDプロダクトIDだ。ベンダーIDは企業ごとにあるIDでマックアドレスのベンダーコードよのうなもの。プロダクトIDは名前の通り、プロダクトのIDで企業が決めるIDである。

今回使うNFCカードリーダーを調べたところ以下の通りだった。

vender product
0x054c 0x06c1

usbの接続情報をみる方法はいくつかある。

lsusb

lsusbコマンドを打つとずらっと接続の情報がでる。接続したデバイスが何かを調べる場合、プリミティブな方法だが抜き差しでの表示する差分で把握する。

$ lsusb
    Bus 002 Device 002: ID 8087:8001 Intel Corp.
    Bus 003 Device 016: ID 054c:06c1 Sony Corp.
        :
    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

割り当てられたUSB BUSがわかったら、更に詳細を表示してみる。(長いから省略)

$ lsusb -s 003:016 -v
    Bus 003 Device 022: ID 054c:06c1 Sony Corp.
        :
      idVendor           0x054c Sony Corp.
      idProduct          0x06c1
        :

syslog

syslogを監視してデバイス情報を得る。

$ tail -f /var/log/syslog
    Apr 22 15:24:42 hoge kernel: [455013.359205] usb 3-10.3: new full-speed USB device number 22 using xhci_hcd
    Apr 22 15:24:42 hoge kernel: [455013.377018] usb 3-10.3: New USB device found, idVendor=054c, idProduct=06c1
    Apr 22 15:24:42 hoge kernel: [455013.377022] usb 3-10.3: New USB device strings: Mfr=1, Product=2, SerialNumber=4
    Apr 22 15:24:42 hoge kernel: [455013.377024] usb 3-10.3: Product: RC-S380/S
    Apr 22 15:24:42 hoge kernel: [455013.377026] usb 3-10.3: Manufacturer: SONY
    Apr 22 15:24:42 hoge kernel: [455013.377028] usb 3-10.3: SerialNumber: 0011179
    Apr 22 15:24:42 hoge kernel: [455013.378153] port100 3-10.3:1.0: NFC: Sony NFC Port-100 Series attached (firmware v1.11)
    Apr 22 15:24:42 hoge mtp-probe: checking bus 3, device 22: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10.3"
    Apr 22 15:24:42 hoge mtp-probe: bus: 3, device: 22 was not an MTP device

udevルールの作成

/etc/udev/rules.dにルールファイルを作成する。書き方の詳細

$ sudo vim /etc/udev/rules.d/80-nfc.rules
    SUBSYSTEM=="usb", ATTR{idVendor}=="054c", ATTR{idProduct}=="06c1", SYMLINK+="nfc"

早速抜き差ししてデバイスフォルダを見てみるとありました。

$ ls -la | grep nfc
    lrwxrwxrwx   1 root root            15  422 15:55 nfc -> bus/usb/003/023

launch Minecraft Server on Raspberry Pi 2

f:id:caad1229:20150421220936p:plain Minecraft Serverをラズパイ2で動作させる。
運用に耐えれるのか否か。

  • Minecraft vanilla server 1.8.3
  • Raspberry pi 2

結論

いきなり結論から言わせてもらうと、なんとか運用はできるレベル だと思う。
自分のような以下の条件に当てはまる人は許容範囲なのかな。

  • DEFAULTマップで普通にサバイバルして楽しむ
  • 人数は3~4人 (それ以上は試していない)
  • 少人数でコツコツと自分たちの世界を作る
  • たまにラグるときはあるが気にしない

今の自分には十分なのだが、ガッツリ運営したい人向けではないと思う。
不安な部分は以下の通り。

  • マップ作成でのAMPLIFIEDはやばい。
  • 農業や家畜、経験値トラップなど作り、世界を拡大していった場合どうなるのかはまだ未知数
  • マップ探索や、クリエイティブモードなどでグイグイ前に行くと処理が追いつかなくて落ちる場合あり

特にクリエイティブモードの舞空術はマジ危険。結構な率で落ちる。

launch Minecraft Server

すごく簡単。他とかわらない。ラズパイ2はjavaがすでにあるので5分で終わるw

download

# 起動時にファイルが生成されるのでフォルダを作成
$ mkdir -p ~/mc
$ cd ./mc
# download
$ wget https://s3.amazonaws.com/Minecraft.Download/versions/1.8.3/minecraft_server.1.8.3.jar

認証とプロパティ設定

初回、Minecraftサーバを起動するとEULA認証ファイルが無いためすぐに終了する。
認証の同意はファイルを編集する。

# EURAファイルなど生成するため起動
$ java -Xmx1024M -Xms512M -jar ./minecraft_server.1.8.3.jar nogui
    [09:17:13] [Server thread/INFO]: Starting minecraft server version 1.8.3
    [09:17:13] [Server thread/INFO]: Loading properties
    # EULA認証ファイルがないために終了
    [09:17:13] [Server thread/WARN]: Failed to load eula.txt
    [09:17:13] [Server thread/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
    [09:17:13] [Server thread/INFO]: Stopping server
    [09:17:13] [Server Shutdown Thread/INFO]: Stopping server

EULA認証

EULA認証はeula.txtを編集するだけ。

# ライセンスの同意
$ vim ./eula.txt
    # false -> true
    eula=true

プロパティ設定

変更点はほとんどない。ただサーバ負荷を減らすためにview-distanceを調整する。

$ vim ./server.properties
    view-distance=7     # 10->7
    gamemode=0          # 0:サバイバル / 1:クリエイティブ / 2:アドベンチャー
    level-seed=xxx      # ワールド生成時にシード値指定したい場合はここに

起動準備

起動したら基本放置。いつまでもターミナルを開いているのもあれだ。
screenコマンドでログアウトしても動き続けるシェルを実行しておく。

screenコマンドのインストール

$ sudo apt-get install screen

起動スクリプトの作成

すぐにアクセスできるようにセッション名を-Sで指定しておく。

# 起動スクリプトファイルの編集
$ vim ./start.sh
    #!/bin/bash
    echo "start minecraft server !!!!"
    screen -S minecraft java -Xmx1024M -Xms512M -jar minecraft_server.1.8.3.jar nogui
# 実行権限付与
$ chmod 755 ./start.sh

起動

起動するとマップ作成が始まる。Doneまで待つ

$ ./start.sh
    [09:55:03] [Server thread/INFO]: Starting minecraft server version 1.8.3
    [09:55:03] [Server thread/INFO]: Loading properties
    [09:55:03] [Server thread/INFO]: Default game type: SURVIVAL
    [09:55:03] [Server thread/INFO]: Generating keypair
    [09:55:03] [Server thread/INFO]: Starting Minecraft server on *:25565
    [09:55:03] [Server thread/INFO]: Using epoll channel type
    [09:55:03] [Server thread/INFO]: Preparing level "world"
    [09:55:03] [Server thread/INFO]: Preparing start region for level 0
        :
    [09:55:03] [Server thread/INFO]: Preparing spawn area: 91%
    [09:55:04] [Server thread/INFO]: Done (xxxxxs)! For help, type "help" or "?"
    # 終了する場合は、このターミナルで`stop`

screenシェルを抜けるにはデタッチ(ctrl+actrl+d)する。
再度アクセスしてサーバ操作したい場合は(screen -r minecraft)でアクセスできる。


現在、普通に運用できていて数人の友人が好きなときにアクセスして作業してる。
そのためラズパイは完全マイクラ専用サーバとなっているのだ。
下手に遊べないから新しいの買おうかと思ったら5千円近くに値上がってんの。アベノミクス乙www

次回は番外編としてバニラサーバーよりも軽量なMCServerの紹介を書きたいと思う。

Raspberry Pi 2 (setting)

基本的な初期設定をメモ
イメージ書き込みはこちら

caad1229.hatenablog.com

SSHでアクセスする

# ユーザ名は`pi`
$ ssh pi@<raspberry pi ip>
    # passowrdは`raspberry`

最新の状態にしておく

$ sudo apt-get update; sudo apt-get upgrade -y

raspi-config

ラズパイ用のコンフィグ画面を表示

$ sudo raspi-config

私の場合、やっておくのは最低以下の2つ。
キーボードとかは後で。

  • Expand Filesystem : SDの残りの領域を拡張する
  • Timezone : タイムゾーン設定

Expand Filesystem

SDの残りの領域を拡張する

  • Expand Filesystem f:id:caad1229:20150418134121p:plain

  • OK押して再起動する f:id:caad1229:20150418134142p:plain

Timezone

タイムゾーンを東京にする

  • Internationlaisation Options f:id:caad1229:20150418134236p:plain

  • Change Timezone f:id:caad1229:20150418134243p:plain

  • Asia f:id:caad1229:20150418134251p:plain

  • Tokyo f:id:caad1229:20150418134532p:plain

vimの導入

viはあるけど物足りない。やっぱvimがほしいところ。
私はほとんどnanoを使わないので操作には困惑する。そのためデフォルトエディタも変更する。

vim install

vimrcとかプラグインとかはいつかまとめたいな。

$ sudo apt-get install vim

デフォルトエディタの変更

  • 3. /usr/bin/vim.basicを選択してデフォルトディタを変更する
$ sudo update-alternatives --config editor
    There are 4 choices for the alternative editor (providing /usr/bin/editor).

      Selection    Path                Priority   Status
    ------------------------------------------------------------
    * 0            /bin/nano            40        auto mode
      1            /bin/ed             -100       manual mode
      2            /bin/nano            40        manual mode
      3            /usr/bin/vim.basic   30        manual mode
      4            /usr/bin/vim.tiny    10        manual mode

    Press enter to keep the current choice[*], or type selection number: 

ホスト名の変更とか

ローカルネットワークでアクセスに便利なので設定

ホスト名の変更

$ sudo vim /etc/hostname
    hoge-pi
$ sudo vim /etc/hosts
    127.0.1.1  hoge-pi

avahi-daemonのインストール

ローカルネットワークアドレスの名前解決 (mDNS)

$ sudo apt-get update
$ sudo apt-get install avahi-daemon

これのおかけでローカルネットワーク同士がホスト名でアクセスできる。マックはBonjourだったと思う。
<host名>.localでアクセスできる。

セキュリティー関係の設定

デフォルトのユーザでもいいけど、外部からもアクセスしたい。
新規作成してsshも鍵を使ったアクセスのみとする。

新規ユーザーの設定してsudoユーザ化

# user作成
$ sudo adduser hoge
# sudoユーザに追加
$ sudo gpasswd -a hoge sudo

デフォルトユーザの権限変更

  • piユーザのsudo権限をなくす
# piユーザをsudoグループから外す
$ sudo gpasswd -d pi sudo
# piユーザのsudoerから除外する
$ sudo visudo
    # 以下のようにコメントアウトする
    # pi ALL=(ALL) NOPASSWD: ALL

ssh関連の設定

クライアントの公開鍵の登録

  • client側
# RSAで生成する。パスワードをつけるかは好みで。
client$ ssh ssh-keygen
# ラズパイに公開鍵を渡しておく
client$ scp ~/.ssh/id_rsa.pub hoge@hoge-pi.local
  • server(ラズパイ)側
# clientの公開鍵を登録
server$ cat ~/rsa.pub > .ssh/autorized_keys

sshdコンフィグの設定

# コンフィグの編集
$ sudo vim /etc/ssh/sshd_config
    PermitRootLogin no        # rootでのログインを無効
    PasswordAuthentication no # パスワードによるログインを無効
# sshdのリスタート
$ sudo service ssh restart

これで自分が作成したユーザでログインして色々と遊ぶ。
次回はマインクラフトサーバをば。