Raspberry Pi の HDMI 出力の設定

HDMI にモニタが接続されていない状態で起動すると、NTSC(コンポジット)に切り替わってしまうので、それを防ぐために、/boot/config.txt の hdmi_force_hotplug の先頭にある # を削除します

#hdmi_force_hotplug=1

を下のように編集します

hdmi_force_hotplug=1

次に、hdmi_group の先頭の # を削除し、また hdmi_mode の先頭の # を削除するとともに、値を 5 に設定します ここの値については、Video options in config.txt を参考にしてください

#hdmi_group=1
#hdmi_mode=1

を下のように編集します

hdmi_group=1
hdmi_mode=5

変更後、再起動して以下のコマンドで設定された解像度等の確認ができます

# tvservice -s

Raspberry Pi 起動時に接続しているモニター(TV)がOnにならないようにする

/boot/config.txt に以下の行を追加します

hdmi_ignore_cec_init=1

参考

https://elinux.org/CEC_(Consumer_Electronics_Control)_over_HDMI

github.com

AvahiでHTTP Serverのサービスをアナウンス

Raspbian で HTTP Server を起動するようにしたので、Avahi でアナウンスするように設定したメモ

HTTP Server

/etc/avahi/services/http.service ファイルを次の内容で作成しました

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>

  <service>
    <type>_http._tcp</type>
    <port>80</port>
  </service>
</service-group>

Avahi-daemon の再起動

# systemctl restart avahi-daemon

iPhone の WIFI 設定に プロファイル を使う

macOS には、Apple Configurator 2 というアプリケーションがあって、これを使用すると iPhone 等の設定や制限を記述したプロファイルを作成することができます。

名称と識別子を入力します

f:id:section27:20171110232102p:plain

WIFISSID やパスワードを入力します

f:id:section27:20171110232142p:plain

名前をつけてプロファイルを保存します

f:id:section27:20171110232154p:plain

簡単に試すには、USB で iPhone 等を接続して、保存したプロファイルをデバイスに設定します

iPhone 側でインストールを実行すると、プロファイルがインストールされて、プロファイルにある WIFI 設定が有効になります

f:id:section27:20171110232321p:plain

Raspbian - Raspberry Pi 2 で scala を使う

sdkman のインストール

$ curl -s "https://get.sdkman.io" | bash

sbt のインストール

$ sdk install sbt

起動

$ sbt console

もっとメモリ領域が必要というとき

/var/swap のサイズを大きくします

$ sudo service dphys-swapfile stop
$ sudo vi /etc/dphys-swapfile

CONF_SWAPSIZE=2048

$ sudo service dphys-swapfile start
$ ls -l /var

-rw-------  1 root root  2147483648 10月 20 21:50 swap

AWS Greengrass - Java 8

AWS Greengrass が東京リージョンで使用できるようになりました。

Greengrass Core を動かす環境としてRaspberry Pi 3 を使います

$ sudo -s
# update-alternatives --install /usr/bin/java8 java8 /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/bin/java 0

Greengrass Core にデプロイするLAMBDAが使えるメモリは非常に少ないです。16MB程度にしておくのが良さそうです。

Scala or Java の場合にaws-lambda-java-coreだけだといろいろなクラスが見つからないという例外が発生します。

aws-lambda-java-coreだけで、AWSコンソール上でテスト実行できたものをGreengrass Coreで動かすと、jacksonのクラスが見つからないというエラーが発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

そこでjackson-databindを依存に加えてみます。すると今度はApache HTTPClientのクラスが見つからないというエラーが発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpEntity

AWSのドキュメントを注意深く読むとaws-java-sdk-greengrassを取り込む必要があるという記述にたどりつきようやく解決しました。

sbt-aws-cloudformationの使い方

sbt プラグインからAWSのCloudFormationを使う場合の手順です。

準備

sbt プロジェクトの project ディレクトリの plugins.sbt に次の内容を追記します

addSbtPlugin("com.pigumer.sbt.cloud" % "sbt-aws-cloudformation" % "5.0.22")

build.sbt に import と Plugin を有効にする設定を記述します

import cloudformation._

lazy val root = (project in file(".")).
  enablePlugins(CloudformationPlugin).
  settings(
    version := "0.1",
    scalaVersion := "2.12.6",
    awscfSettings := AwscfSettings(
      projectName = Some("example/"),
      region = "ap-northeast-1",
      bucketName = "YOUR BUCKET NAME",    // テンプレートをアップロードするS3バケット名
      templates = file("cloudformation")             // アップロードするテンプレートを作成したディレクトリ
    ),
    awscfStacks := Stacks(
      Alias("ALIAS") → CloudformationStack(  // スタック名のエイリアス
        stackName = "STACK_NAME",
        template = "YOUR_TEMPLATE_FILENAME",
        parameters = Map("KEY""VALUE"),
        capabilities = Seq("CAPABILITY_NAMED_IAM")))
    )

awscfSettings の設定項目は次の通りです

  • projectName - プロジェクト名は任意で、S3バケットのキーに追加されます。
  • region - リージョンを指定します。
  • bucketName - S3のバケット名です。
  • templates - テンプレートを作成したディレクトリを設定します。
  • roleARN - クラウドフォーメーションを実行するロールを指定する場合は、roleARNを記述します。

awscfStacks は、スタック名のエイリアスと CloudformationStack を設定します。

CloudformationStack はスタック定義を設定します。

  • stackName - スタック名
  • template - テンプレートファイル名(iam.yaml等)
  • parameters - テンプレートのパラメータに渡す値
  • capabilities - IAMロールのスタックの場合等に"CAPABILITY_IAM"や"CAPABILITY_NAMED_IAM"等の値を設定します

タスク

sbt コマンドを実行します。

sbt

テンプレートをアップロードするS3バケットの作成

awscfCreateBucket <stackName>

指定したスタック名でS3バケットを作成します(CloudFormationを使用します)

テンプレートのアップロード

awscfUploadTemplates

スタックの作成

awscfCreateStack <shortName>

shortName にはスタックのエイリアスを指定します。

スタックの更新

awscfUpdateStack <stage> <shortName>

スタックの削除

awscfDeleteStack <shortName>

Exportsの確認

awscfListExports

その他詳細、最新情報はhttps://github.com/PigumerGroup/sbt-aws-cloudformationを参照してください