まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:raspberry

小型コンピュータのラズベリーパイ、一般的には Raspbian OS で使われることが多いと思っています(自分も特別な理由がなければ Raspbian OS か、または Raspbian の派生 OS で使います)。

が、Raspbian OS って 32bit OS なんですよね。ラズベリーパイ自体は 64bit CPU である arm64 を搭載していることを考えると、「せっかくなので 64bit で使いたい」ともなるわけです。

ラズベリーパイ上で動く 64bit OS はいくつかあるようです。ただリストを見ると「64bit 機能の一部が動かない」という注釈もあったりして、全てが期待通りの挙動をするかというと、そうでもなさそう・・・

というわけで、ラズベリーパイに 64bit Linux である openSUSE を導入する方法を紹介します。といっても導入だけなら Raspbian OS と特別に違うことはなく、どこからイメージをダウンロードするか、程度の違いですけどね。


ラズベリーパイ向けの openSUSE イメージをダウンロードするには、SuSE のラズベリーパイ用ページを参照します:
2019040202


下にスクロールすると、ダウンロードイメージへのリンクが現れます。いくつか種類がありますが、Tumbleweed(開発版)か Leap(安定版)を選び、デスクトップの種類を選択してイメージをダウンロードします。ちなみに僕は Tumbleweed の E20 image を選びました:
2019040201


後は Raspbian OS と同様でダウンロードしたイメージを展開し、(DDWin などのツールを使って)MicroSD カードに書き込み、そのカードをラズベリーパイに差し込んで起動します。

デフォルトのままであれば ID: root, PW: linux でログインできます:
shot-2019-04-02_23-08-13




Windows 3.x 時代の標準ファイラー(もう「ファイラー」という用語すら耳にしなくなったけど・・)だった File Manager が Windows 10 向けに Microsoft Store からダウンロード可能になった、というニュースがありました:
2019021101


まあエクスプローラーを使っている人にその前身とも言える File Manager が使いやすいかどうかは??? ですが、マルチウィンドウ間でファイルをコピーしたり、それなりに便利だった記憶はあります。

が、自分にとって「ファイラー」と言えばやはり「FD」です:
2019021102


Microsoft Windows がまだ広まる前、MS-DOS/PC-DOS 全盛だった平成初期において、ファイルのコピーや閲覧/編集、圧縮/解凍、ディレクトリ操作、そしてコマンド実行といった基本操作を(GUI と呼ぶのは違う気がするけど)視覚的にわかりやすく操作できるフリーソフトのツールで、やはり当時全盛だったパソコン通信や雑誌の付録を中心に広まり、「ほぼ OS の一部」と思えるくらいみんなが使っていたツールとなりました。ちなみに DOS 版はバージョン 3.13 まで開発が続けられ、作者の A.Idei(出射厚)氏は 2004 年に逝去されました。

この FD は DOS 以外の環境でも動作するよう多くの移植が行われています。例えば 32bit Windows アプリケーションとして動く WinFD や、Java 環境下で動作する jFD2 などがあります。そして Linux/UNIX 環境向けに移植されたのが今回紹介する fdclone です:
2019021103


この fdclone はラズベリーパイ向けにも移植されており、以下のコマンドでインストールできます:
$ sudo apt-get install fdclone

fdclone を実行するにはコマンドラインから "fd" で実行できます:
$ fd

オリジナル FD のショートカットキーはほぼ全て移植されているようで指が覚えている人はそのまま使えます。例えば終了は "q" です。


FD を使っていたおじさんと、コマンドラインからのファイル操作に慣れていない人は入れておくのがいいと思います。


ラズベリーパイ(以下「ラズパイ」)で遊べるゲームも珍しくなくなってきていますが、ラズパイのテキストコンソールでも遊べるゲームを探してみました。


(1) BSD Games

まずは BSD Games です。FreeBSD など BSD ベースの UNIX に搭載されたテキストベースのゲームが元で、今では多くの UNIX ベースの OS に移植され、遊べるようになっています。個人的にもおそらく人生で最初に遊んだ UNIX のゲームがこの中に含まれている worm でした。

ラズパイにインストールする場合は以下のコマンドで導入できます:
$ sudo apt-get install bsdgames

導入が成功すると /usr/games/ 以下に多くのゲームが確認できるようになります:
2019020201


この中のファイルを指定してゲームを遊ぶことができます。例えば上記の worm も含まれていますが、コンソールから worm と入力することで worm を起動して遊ぶことができます:
2019020202
↑ vi のキーを覚える目的で使ってました・・


(2) CGames

CGames は Linux テキストコンソール向けに比較的メジャーな3つのゲーム(倉庫番、マインスイーパー、スライディングブロック)を提供するパッケージです。ラズパイの場合、apt-get install では導入できないのですが、ソースコードからビルドすることで導入できます。

ソースコードを入手して、ビルド、インストールするまでの操作コマンドは以下になります:
$ sudo apt-get install libgmp-dev libncurses5-dev

$ wget http://www.muppetlabs.com/~breadbox/pub/software/cgames-2.2a.tar.gz

$ tar xf cgames-2.2a.tar.gz

$ cd cgames-2.2a

$ ./configure --disable-mouse --with-ncurses

$ make

$ sudo make install

最後まで完了すると、/usr/local/games 以下に3つのゲームが導入されます。なお、このフォルダにはパスが通っていないので、必要に応じて環境変数を書き換えてください:
2019020203


csokoban(倉庫番)を起動するとこんな感じ。矢印キーで操作できます。これは持論なのですが、パズルゲームは1人で時間制限なしに遊べるのがいいと思っています。そして倉庫番やマインスイーパーはその条件を満たしていて、そんなゲームがラズパイのコンソールでも遊べる、というのはいいですよね:
2019020204


ラズパイ操作中の気分転換にいい感じです。


先日紹介したこの記事の続き、というか、本命版です:
ラズベリーパイと鳩サブレ缶で docker swarm クラスタを構築する

豊島屋の鳩サブレ缶がちょうどラズベリーパイ(以下「ラズパイ」)を4つ格納できるような仕切りになっていることに気付いて、この鳩サブレ缶とラズパイでクラスタ環境を作れないか、と思い立ったことがきっかけでした。先日は docker swarm のクラスタを構築しましたが、今回は kubernetes のクラスタを構築します:
20190117


なお、構築手順の途中までは先日と全く同じです。具体的にはこのページでも紹介している3台のラズパイそれぞれに docker を導入する所までは同じ手続きを行います。なお、ここまでの作業が完了している前提で以下を紹介します。


【スワップメモリの無効化】
ここからが Kubernetes 環境のための手順となります。まず Kubernetes 1.8 以降ではスワップメモリが有効な環境下では kubelet が起動しないため、3台のラズパイそれぞれでスワップメモリを無効にします:
$ sudo dphys-swapfile swapoff

$ sudo dphys-swapfile uninstall

$ sudo update-rc.d dphys-swapfile remove


【kubeadm, kubectl, kubelet のインストール】
いよいよ Kubernetes をインストールします。具体的には kubeadm, kubectl, kubelet を導入するのですが、まずはリポジトリを登録&更新します:
$ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg|sudo apt-key add -

$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kube.list

$ sudo apt-get update

そして kubeadm, kubectl, kubelet をインストールします。ただこちらで検証した限りでは kubernetes のバージョン 1.8 以下しか動作しませんでした。というわけでバージョン 1.8 を指定して kubernetes コマンド群をインストールします:
$ sudo apt-get install kubelet=1.8.14-00 kubeadm=1.8.14-00 kubectl=1.8.14-00 kubernetes-cni=0.5.1-00

これでラズパイノードに Kubernetes のコマンドが導入できました。ここまでの作業は3台それぞれで実施する必要があります。


【マスターノードの準備】
Kubernetes のマスターノードを作成します。今回は3台のラズパイの中の raspi001 をマスターノードとするので、以下のコマンドを raspi001 でのみ実施します。またその結果、この前に導入した docker のバージョンとの不整合が起きてしまうので、インストールコマンド時に「バージョンチェックをしない」ための --skip-preflight-checks オプションを指定します:
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --skip-preflight-checks

成功したら、成功時の画面に表示される以下のコマンドを順次実行して pod network をデプロイします:
$ mkdir -p $HOME/.kube

$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

後は flannnel をデプロイします:
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

これでマスターノードの準備は完了です。


【ワーカーノードの準備】

2台のワーカーノードをマスターノードに接続します。マスターノードの sudo kubeadm init コマンドを実行して成功した時に表示される kubeadm join コマンドを各ワーカーノードで実行します:
$ kubeadm join --token XXXXXX....XXXXXX 192.168.10.101:6443 --discovery-token-ca-cert-hash sha256:ZZZZZZZZZZZZ....ZZZZZZZZZZZZZZZ

【接続状態を確認】

マスターノードで "kubectl version" コマンドを実行してサーバーとクライアントのバージョンを、"kubectl get nodes" コマンドを実行して各ノードの状態が表示されることを確認します:
20190128


なんとかラズパイで kubernetes クラスタ環境が作れました。


 
(参考)
https://qiita.com/hatotaka/items/48a88ecb190e1f5e03c3

https://qiita.com/MahoTakara/items/2b39e06f077927bafa2c



ラズベリーパイに日本語の形態素解析エンジンである MeCab をインストールする方法を紹介します。

少しだけ補足をしておくと、ただ単にラズベリーパイに MeCab をインストールするだけであれば、普通に apt-get を使って、
$ sudo apt-get install mecab libmecab-dev mecab-ipadic

とかあれば導入できることは確認しました。ただこの方法で導入した MeCab を使うと、実行結果がことごとく文字化けしてしまうようでした(EUC-JP が指定されている?)。

という背景もあって、ラズパイでも文字化けせずに実行できる方法で、具体的にはソースコードからビルドする方法で MeCab を導入してみます。

まずは MeCab のダウンロードサイトから MeCab 本体と、MeCab とセットで一般的に使われている IPA 辞書のソースコードをダウンロードし、ラズベリーパイ内のファイルシステムに保存します:
2019012301


保存した2つのファイル(2019/01/23 時点では mecab-0.996.tar.gz と mecab-ipadic-2.7.0-20070801.tar.gz)を展開しておきます:
$ tar -xvf mecab-0.996.tar.gz

$ tar -xvf mecab-ipadic-2.7.0-20070801.tar.gz

まずは MeCab 本体をビルドしてインストールします。展開したフォルダで --with-charset=utf8 オプションを付けて configure し、その後でビルド&インストールします:
$ cd mecab-0.996

$ ./configure --with-charset=utf8

$ make

$ make check

$ sudo make install

$ cd ..

次に IPA 辞書をビルド&インストールします。こちらではビルド前に各種ファイルの文字コードを無理やり UTF-8 に変換し、かつ dicrc 内の config-charset 指定を UTF-8 にします。その後にソースコードをビルド&インストールします:
$ sudo apt-get install nkf

$ cd mecab-ipadic-2.7.0-20070801

$ nkf -w --overwrite *.csv

$ nkf -w --overwrite *.def

$ vi dicrc

config-charset = EUC-JPUTF-8   config-charset の値を UTF-8 に変更して保存

$ ./configure

$ make

$ sudo make install

$ cd ..

この方法で作成した MeCab と IPA 辞書はラズパイでも文字化けすることなく動作させることができます:
$ mecab -d /usr/local/lib/mecab/dic/ipadic
おはようございます
おはよう        感動詞,*,*,*,*,*,おはよう,オハヨウ,オハヨー
ござい  助動詞,*,*,*,五段・ラ行特殊,連用形,ござる,ゴザイ,ゴザイ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
EOS




このページのトップヘ