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
参考
- VNC (VIRTUAL NETWORK COMPUTING)
- CEC (Consumer_Electronics_Control) over HDMI
https://elinux.org/CEC_(Consumer_Electronics_Control)_over_HDMI
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
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を参照してください