Kamuycikap - SentenceDataBase

日々の勉強の記録を気分で書き綴るブログ

Raspberry Pi OSにEmacs 27.2をインストールする

Raspberry Pi OSにEmacs27.2をビルドインストール

Raspberry Pi OSにapt installコマンドでEmacsを導入すると、バージョン26.1がインストールされるのですが、折角なので最新版をソースコードからビルドして構築してみます。

ソースのダウンロード

GNU Emacs download - GNU Projectにある「 nearby GNU mirror」をクリックして、最新のソースをダウンロードします。
2021年11月16日時点での最新は、emacs-27.2.tar.gzでした。

開発環境のインストール

無事にemacs-27.2.tar.gzをダウンロードできたら、Linuxターミナルを起動してコンパイルの前作業を実施。
コンパイルをするために必要なあれこれを事前にインストールしておきます。

# まず解凍
$ tar zxvf emacs-27.2.tar.gz

# 解凍したディレクトリへ移動
cd emacs-27.2

# コンパイルするための不足ぶんを確認
./configure

すると、GUI表示のライブラリ一式が無いですよと画面に表示されます。
なのでGUI表示に必要なライブラリ一式をインストール。

sudo apt install build-essential texinfo libx11-dev libxpm-dev libjpeg-dev libpng-dev libgif-dev libtiff-dev libgtk2.0-dev libncurses-dev gnutls-dev libgtk-3-dev libgif-dev

コンパイル

スーパーユーザー権限でコンパイル開始
下記のコマンドを順番に実行。

$ sudo make
$ sudo make install

しばらく待てば、Emacs27.2がインストールされる。

起動

$ emacs

Go言語1.17でgodocを利用する

Go言語 1.17でgodocパッケージを利用する

バージョン1.16で利用していたgodoc利用を1.17で使おうとしてハマったので備忘録
今回は事情あってWindows上の話
※考え方はLinuxでも一緒

事前条件

すでにGO言語がインストールされ、goコマンド及びgo installでインストールしたパッケージの実行ファイルにコマンドプロンプトでアクセスできる事。
さらに、自分がソース管理しているディレクトリのパスを把握しておく事

> go version
go version go1.17.2 windows/amd64

上記の通りバージョン表示されない場合は、正しくgo言語がセットアップされていない。

GOROOTの確認
> go env

とすると、Go言語に関係する環境変数の設定値がズラッと並ぶ。
その中に、GOROOTがあるはず。
意図的に変えてなければ、下記のデフォルト値が設定されているはず。

GOROOT=C:\Program Files\Go
自分がソース管理しているディレクト

仮に、下記のディレクトリに自作Goソース(パッケージ)を配置しているものとする

C:\mygolang\src\
  ┃
  ┠ pkg01
  ┃ ┠ go.mod 
  ┃ ┗ pkg01.go 
  ┃
  ┠ pkg02
  ┃ ┠ go.mod 
  ┃ ┗ pkg02.go 
  ┃

godocインストール

> go install github.com/golang/tools/tree/master/godoc@latest

バージョン1.17からは、積極的にinstallでのパッケージ導入が推奨されている模様。
結果、環境変数GOPATH配下のbinディレクトリに入れられる。

※2021/12/21 追記
Chromebookにインストールしようとしたら、上記のコマンドではだめだと怒られた。。。
下記のコマンドでインストールした。
Linuxでも同じ様な結果になるかもしれない。

$ go get golang.org/x/tools/cmd/godoc

GOROOT配下のsrcディレクトリにシンボリックリンク作成

godocにドキュメントとして認識してもらうため、GOROOT直下にあるsrcディレクトリに、自分がソース管理しているディレクトリのシンボリックリンクを作成する。
仮にシンボリック名をworkspaceとする。

> cd "C:\Program Files\Go\src"
> mklink /d workspace "C:\mygolang\src\"

上記は、Windows10のコマンドプロンプトでのシンボリックリンク作成コマンド

godoc起動

コマンドプロンプトからgodocを起動する

> godoc -http=:8080

URL入力

godocの起動ができたら、Webブラウザでgodocページにアクセスしてみる

http://localhost:8080/pkg/workspace/

pkgというディレクトリ指定に違和感があるが、内部的にはGOROOT直下のsrcディレクトリと置き換えられる模様。
うまく行けば、下記のようなWeb画面が表示されるはず
下記画面に表示されているのは、私がテストとしてあれこれ試したGo言語プログラム(パッケージ)

f:id:kamuycikap:20211115155607p:plain
godoc実行後のサンプル画面

HTMLで保存するには?

godocで表示されるHTMLをローカルに保存するにはどうすればいいか?
その答えは、Webページをダウンロードすればいい。
ただし、Windowsの場合、wgetが標準でインストールされていないので、Windowsの上で動くwgetをどうにかしてインストールするか・・・使った事はないがbitsadminと呼ばれるWindows上のwget代替えコマンドを利用する。

以下、wgetバージョン。
上記説明の通り、Windows版のwgetを入手して利用できるようにしておく事。

> godoc -http=localhost:8080 &
> wget -r -np http://localhost:8080/pkg/workspace

Emacsでバイナリファイル作成・編集

nhexl-modeによるバイナリファイル作成と編集


Emacsでバイナリファイルを利用する為に必要なパッケージと編集モード。

nhexl-modeのインストール

M-x package-list-packages で、nhexl-modeをインストール

モードの説明

GNU ELPA - nhexl-mode
hexl-modeとは違い、データの削除と追加が可能。
ニブルエディタマイナーモードに切り替えれば、直接16進数でデータを編集できる。

ニブルエディタマイナーモード

M-x nhexl-nibble-edit-mode
カーソルがニブル(4ビット)で進むふりをし、
自己挿入キーを使用すると、16進数を直接編集できます。

テキストの移動を回避するためのマイナーモード

M-x nhexl-overwrite-only-mode
このマイナーモードでは、自己挿入キーだけでなく、既存のキーも上書きされます
テキストですが、「yank」や「kill-region」などのコマンドも同様です。

KiCAD 5.1.10(Windows)にRaspberryPI Picoのシンボルを登録

Windows10のKiCADにRaspberry Pi Picoのライブラリを登録する

ライブラリのダウンロード

Githubからダウンロードする。

rpi/pico/kicad at master · blippy/rpi · GitHub
busybox32を利用できるようにしてたので、wgetコマンドでインストールした。
ダウンロードできるならば何でもよい。

> wget https://github.com/blippy/rpi/raw/master/pico/kicad/pico_rp2040.dcm
Connecting to github.com (52.69.186.44:443)
Connecting to raw.githubusercontent.com (185.199.110.133:443)
saving to 'pico_rp2040.dcm'
'pico_rp2040.dcm' saved

> wget https://github.com/blippy/rpi/raw/master/pico/kicad/pico_rp2040.lib
Connecting to github.com (52.69.186.44:443)
Connecting to raw.githubusercontent.com (185.199.110.133:443)
saving to 'pico_rp2040.lib'
'pico_rp2040.lib' saved
SWDピン付きのライブラリ(2021/11/05 追記)

上記のライブラリは、SWDピンが出ていない。

https://datasheets.raspberrypi.com/rp2040/hardware-design-with-rp2040.pdf
この資料に書いてある(Chapter.3 )んだけれど、SWDピンまで出ているライブラリが含まれているzipファイルのURLがこれ。
https://datasheets.raspberrypi.com/rp2040/VGA-KiCAD.zip

ファイルを解凍すると「RPi_Pico.lib」が含まれており、それがSWDピン付きのPicoライブラリ。

フットプリントのコピー(2021/11/05 追記)

シンボルとは別ではあるが、基盤レイアウトをするときに必要なフットプリントも同梱されているのでコピーしておいたほうが良い。
ファイルを解凍すると「RPi_Pico.pretty」フォルダが含まれており、それがSWDピン付きのPicoフットプリント。
フォルダをまるっとコピーしてあげればよい。
→ C:\Program Files\KiCad\share\kicad\modules\
※コピー先フォルダは、インストール時のオプション変更によって変わる可能性がある?ので注意したほうが良いかも。

KiCADのライブラリ用フォルダにコピー

ダウンロードしたファイルを、KiCADのライブラリフォルダにコピー
・pico_rp2040.dcm
・pico_rp2040.lib
→ C:\Program Files\KiCad\share\kicad\library\
※別に任意のフォルダでも問題ない様子。(日本語や半角スペースなどが含まれるファイルパスは避けたほうが良いかも)
※KiCADのバージョンやインストールする時の設定によっては上記PATHと異なる場合があるので、そこは適度読み替えてほしい。

コピーしたシンボルをシンボルライブラリに登録

KiCADを起動し、「回路図レイアウトエディター」を起動。
回路図レイアウトエディターのメニューから、「設定」→「シンボルライブラリの管理(s)...」をクリック。

シンボルライブラリーダイアログが表示されるので、ダイアログ上部にある「グローバルライブラリー」タブをクリック。
その後、ダイアログ下部にある「+」ボタンをクリックして新たな入力行を作成し、RaspberryPi Picoを登録する。
f:id:kamuycikap:20211104105518p:plain

確認

無事に登録できていれば、シンボル一覧に表示されるようになる。
f:id:kamuycikap:20211104110017p:plain

MX Linux19にGo言語1.17.2をインストール~HelloWorld

DebianLinuxにGo言語1.17.2をインストール

まずはダウンロード

Downloads - The Go Programming Language
ここからLinux版をダウンロード。
自分のパソコンのCPUアーキテクチャに合わせて選ばないとダメなので注意です。
私の場合は、Lenovo X260モデル(64bit)なので「go1.17.2.linux-amd64.tar.gz」になります。
インテル系32bitCPUの場合は「go1.17.2.linux-386.tar.gz」かな。
RaspberryPi4の場合は「go1.17.2.linux-armv6l.tar.gz」ですね。

インストール

Download and install - The Go Programming Language
こちらのサイトに、Linuxインストール方法が記載されています。

tar.gzファイルを任意の場所に解凍

本家からダウンロードしたtar.gzファイルを、任意のディレクトリで解凍します。
※ファイラーでもコマンドラインでも・・・その方法はGoogle先生に質問で・・w

私は、ホームディレクトリは以下のoptディレクトリ内に配置しました。

$ cd ~/opt/golang/1.17.2/go
$ tree -d -L 1
.
├── api
├── bin
├── doc
├── lib
├── misc
├── pkg
├── src
└── test
環境変数PATHにGo言語バイナリディレクトリを登録

環境変数にGo言語本体が配置されているディレクトリを追加設定。
設定後、シェルを再起動すれば反映されているはず。

$ nano ~/.bashrc
## Go Language
export GOROOT=~/opt/golang/1.17.2/go
export PATH=$PATH:$GOROOT/bin
Goコマンド確認

新たにコマンドプロンプトを起動して、goコマンドをテスト

$ go version
go version go1.17.2 linux/

mainモジュール作成

Go言語のインストールが完了したら、いよいよソースコード書いてコンパイルしてみます。
任意のディレクトリを作成し、そこをソースコード置き場としていきます。

Goのバージョン1.16以前は、環境変数GOPATH配下に配置したディレクトリにまとめて置いていた様子ですが、1.17からは任意のディレクトリにソースを配置できます。

本記事では、「~/opt/golang/1.17.2/go/src」に置くことにしましょう。

ディレクトリ作成
$ cd ~/opt/golang/1.17.2/go
$ mkdir ./hello
モジュールコマンドによる参照モジュールの指定

このコマンドにより、以前あったGOPATHに縛られないソースコード配置が可能となります。

$ cd ~/opt/golang/1.17.2/go/hello
$ mkdir ./hello
$ go mod init example.com/hello

ソースコード作成

$ cd ~/opt/golang/1.17.2/go/hello
$ nano ./hello.go
package hello

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

ビルド

$ go build -o hello.exe .

コンパイルが通れば、hello.exeができているはず。

実行

$ ./hello.exe
Hello, World!

補足

環境変数GOPATHの設定は?

バージョン1.17から、GOPATHによるソースコード(パッケージ)の依存関係管理は非推奨になった模様。
それにともない、パッケージのインストール方法も「go get」ではなく「go install」が良いよと警告文が表示されるようになった。

$ go get github.com/future-architect/awsmfa/cmd/awsmfa
go: downloading github.com/future-architect/awsmfa v1.1.1
go: downloading gopkg.in/ini.v1 v1.62.0
go get: installing executables with 'go get' in module mode is deprecated.
        Use 'go install pkg@version' instead.
        For more information, see https://golang.org/doc/go-get-install-deprecation
        or run 'go help get' or 'go help install'.

よって、本記事では環境変数GOPATHはインストール初期状態のままとし、任意のフォルダにソースを配置して管理する方法を紹介しています。

mainモジュールへ独自モジュールを読み込む時は?

例えば、下記のように配置したとします。

$ cd ~/opt/golang/1.17.2/go/src
$ tree -d -L 1
.
├── bar          <- 自作モジュールbar
├── foo          <- 自作モジュールfoo
├── hello       <- メインモジュール

それぞれのディレクトリで、下記の通りgo mod コマンドを実行します。

$ cd ~/opt/golang/1.17.2/go/src/bar
$ go mod init example.com/bar

$ cd ~/opt/golang/1.17.2/go/src/foo
$ go mod init example.com/foo

$ cd ~/opt/golang/1.17.2/go/src/hello
$ go mod init example.com/hello

その後、helloディレクトリで下記の追加コマンドを実行します
このコマンド実行により、URLによる外部モジュール参照ではなく、ローカルディレクトリのモジュール参照に置き換わります。
参照元がhelloディレクトリのhello.goから見た相対パスになるので、それぞれ「../bar」と「../foo」になります。

$ cd ~/opt/golang/1.17.2/go/src/hello
$ go mod edit -replace example.com/bar=../bar
$ go mod edit -replace example.com/bar=../foo
$ go mod tidy

その後、helloディレクトリにてプログラム実行

$ go run .

以下、それぞれのソースコードです。

■~/opt/golang/1.17.2/go/src/bar/bar.go

package bar

import "fmt"

// Hello returns a greeting for the named person.
func Hello(name string) string {
	// Return a greeting that embeds the name in a message.
	message := fmt.Sprintf("Hi, %v. Welcome!", name)
	return message
}

■~/opt/golang/1.17.2/go/src/foo/foo.go

package foo

import "fmt"

// Hello returns a greeting for the named person.
func Hello(name string) string {
	// Return a greeting that embeds the name in a message.
	message := fmt.Sprintf("Yahoo, %v. FooBar!", name)
	return message
}

■~/opt/golang/1.17.2/go/src/hello/hello.go

package hello

import (
	"fmt"

	"example.com/bar"

	"example.com/foo"
)

func main() {

	// Get a greeting message and print it.
	message := bar.Hello("hoge")
	message2 := foo.Hello("fuga")

	fmt.Println(message)
	fmt.Println(message2)
}
オススメパッケージのインストール
$ go install golang.org/x/tools/gopls@latest
$ go get -v  golang.org/x/tools/cmd/godoc
$ go install github.com/go-delve/delve/cmd/dlv@latest

RaspberryPI OSでGUIファイラーを起動するとすぐに終了してしまう症状の対策

pcmanfmのアップデート保留が原因

Raspbian(Buster)で、ファイルマネージャーを開くとすぐに閉じてしまう不具合が発生。 原因は、アップグレードの失敗によるものらしい。 下記のコマンドで解消。

$ sudo apt-get autoremove
$ sudo apt-get install pcmanfm

最後は再起動で消えなくなる。

$ sudo shutdown -r now

Node-RedにGUIノードを追加

node-red-dashboard パレットのインストール

Node-RedでGUI画面を構築する為のパレットをインストールできる。 2021年11月1日現在、様々なGUIパレットが存在する様子・・・ではあるが、一番標準的な物のインストールを実施する。

画面右上の「横3本線」アイコンをクリックして、ドロップダウンリストを表示。

デプロイボタンの右側にあるやつ。 バージョン情報とか表示できるやつ。 クリックすると、ドロップダウンでメニューが表示される。

「パレットの管理」をクリック。

「グループ」の下、「設定」の上あたりの項目。

「ノードを追加」タブをクリック。

閉じるボタンの、やや左下付近。 クリックすると、「ノードを検索」欄でカーソルが点滅している状態になる。

「ノードを検索」欄に「node-red-dashboard」と入力。

node-red-dashboardと入力すると、すぐ下の一覧に「node-red-dashboard」が表示される

「ノードを追加」ボタンをクリック

node-red-dashboardの右側、白色ボタンの「ノードを追加」をクリックすると、処理が進み、dashboardのパレットが追加される。