カテゴリ別アーカイブ

10 Articles

shで文字列の判定がうまくいかない

by なたで 0 Comments

つい先日、shで文字列判定がうまくいかないときがありました。

問題のスクリプト

スクリプトを書いていて、どうも処理が期待通りにならずに、
コードを少しずつ狭めていき、原因を調査していたんです。

そしたら、下記のコードに問題があることが分かりました、

#!/bin/sh

readonly string="OK"

if [ ${string} = "OK" ]; then
	echo "OK"
fi

if [ ${string} = "NG" ]; then
	echo "NG"
fi

これを実行すると、

./test.sh
OK
NG

!?

なぜ、NGまで出るんだ・・・

調査

みんなに聞いてまわり、

  • 文字列の判定なら「=」ではなく「==」ではないか。
  • 変数名が間違っているのでは?
  • if文の書き方それであってるの?
  • 気合が足らない

といろいろアドバイスをもらったのですが、

結局、解決できず、もやもやしていました。

原因判明

いろいろいじってたら次のような現象がおきました。

#!/bin/sh

readonly string="OK"

if [ ${string} = "NG" ]; then
	echo "NG1"
fi

if [ ${string} = "NG" ]; then
	echo "NG2"
fi

これを実行すると、

./test.sh
NG1

うーん。

なぜか2回目のif文の判定はうまくいくようだ・・・

ん・・・

!?

「=」の前が全角スペースになっているではないか!?

原因は全角スペースの混入

いやー。そんなポカミスしてるとは思っていませんでした。

というか全角スペースが入っている時点でエラーが出ると思ったのですが、
出ないんですねー。(処理系に依存しますが)

今回、半角スペースの制御文字に色を付ける設定もしていなかったので、
全角スペースと半角スペースがエディタ上から見わけがつかずに
かなり混乱していました。

灯台下暗し

Debian GNU/Linux に色々インストールする

by なたで 0 Comments

以前、
Linuxで動作するCプログラムのデバッグ環境構築1
Linuxで動作するCプログラムのデバッグ環境構築2
の2回に渡って作成したDebian環境なので、
他に開発が便利になるように色々活用してみましょう!


ターミナルをカラフルにする

.bashrc を編集します

nano .bashrc 

開くと、

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

こうなっている部分があるので、コメントアウトを外して上書きします。

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

そして、次のコマンドをうつと設定が反映されます。

source ./.bashrc 

内部のネットワークにつなげられるようにする

interfacesを編集します。

nano /etc/network/interfaces

開くと、こんな感じです。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s3
iface enp0s3 inet dhcp

これを

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s3
auto enp0s3
iface enp0s3 inet static
address 172.16.10.xxx
network 172.16.10.0
netmask 255.255.255.0
broadcast 172.16.10.255

として、あとはVirualBoxの設定をホストオンリーアダプターに設定し、
Windows上でVirutualBox用のインターフェースのIPv4設定を適切に変更すれば、
自分のパソコンからのみ、安全に仮想PCへアクセスできるようになります。

ちなみに、Windows上でアダプタが表示されていない場合は、
コマンドプロンプトを管理者権限で実行し、下記を入力すればよいです。

cd "C:\Program Files\Oracle\VirtualBox"
VBoxManage.exe hostonlyif create

SSHでログインする

以前の私のブログをみながら、Debianをインストールしていけば、
SSHは初期で自動インストールされています。
従って、ネットワークが接続された状態であれば、SSHでログインが可能です。
ログインする際は、Debianインストール時に作成したアカウントでログインできます。

もしインストールされていない場合は、下記のようにインストールしてください。

apt-get install ssh

あとは、Windows 上で TeraTerm などを利用してアクセスしてください。


ファイルサーバーを利用する

下記のようにインストールしてください。

apt-get install samba

あとは、sambaの設定を開いて、

sudo nano /etc/samba/smb.conf

最終行に次を記載する。

[Share]
   path = /
   writable = yes
   guest ok = yes
   guest only = yes
   create mode = 0777
   directory mode = 0777

※これは、全ディレクトリを誰でも書き換えできるようになる危険な書き方です。
あくまで開発用ということで、上記の設定にしていますので注意。

再起動して設定を更新する。

sudo systemctl restart smbd

以下、今後自動起動するようにさせる。

sudo systemctl enable smbd

あとは、WindowsのエクスプローラのURLに以下を記載すればみれます。

\\172.16.10.xxx\

PHPを利用する

とりあえず、下記だけでいけるはずです。
Apache2 も自動でインストールされます。

sudo apt-get install php

Synaptic パッケージマネージャを使ってインストールしても良いですよ。
インストール後は、Webサーバーも自動で起動するようになりますので、
ブラウザでアクセスしてみてください。

http://172.16.10.xxx/

以下、開発するときの馴染み深いライブラリのメモです。

sudo apt-get -d install zlib1g-dev
sudo apt-get -d install libsqlite3-dev
sudo apt-get -d install libssl-dev
sudo apt-get -d install libevent-dev
sudo apt-get -d install libcurl4-openssl-dev
Linuxで動作するCプログラムのデバッグ環境構築2

Linuxで動作するCプログラムのデバッグ環境構築2

by なたで 0 Comments

前回の「Linuxで動作するCプログラムのデバッグ環境構築1」から引き続きます。
今回は、Eclipseを使って、Cのプロジェクトを作ってコンパイルしてみるところまで行ってみたいと思います。

では、さっそく解説をはじめます。
今回は図をふんだんに使って分かりやすく説明します!


プロジェクトを作成しよう

1

Eclipseを開きましたら、左のプロジェクトの部分で右クリックをしましょう。
新規からプロジェクトを追加していきます。

2

今回プロジェクト名は「Sample」と名付けます。
これがプロジェクトエクスプローラに表示されるタイトルになります。
また勉強のために、空のプロジェクトを選択します。
ツールチェーンは、このLinux環境で実行したいのでLinux GCCを選びます。

最後に「完了(F)」ではなく「次へ(N) >」を選んでください。

3

構成を選択できます。
構成というのは、どのようにコンパイルするかといった設定です。
デフォルトでDebugとReleaseがあります。
それぞれデバッグ向き、リリース向きとなっています。
今回勉強のために後で再設定を行う予定ですが、一旦「Debug」にのみチェックをうちましょう。
必ず1つは設定を持つ必要があるため、チェックを打たないという選択肢はありません。
ここで、「完了(F)」を押して、ウィザードを終わらせます。

 


ソースコードを準備しよう

1

今回は、例として下記のようなファイル構成にします。
プロジェクト・エクスプローラ内で右クリックでファイルやフォルダを作成していきましょう。
次のようなフォルダ構成にしてみました。

2

main.c は、オーソドックスに次のようにしました。

#include <stdio.h>

int main(void) {
	printf("Hello world !\n");
	return 0;
}

3

makeファイルも、オーソドックスに次のようにしました。
注意点として、この後デバッグをするために
コンパイルオプションとして「-g」と「-O0」が必ず必要となります。
また、実行ファイル名を「Hello」としました。
設定でデフォルト値に「all」と「clean」が存在しており、これらのコマンドが使用されます。
従って、「all」「clean」が使えるようにしておきましょう。

Target  = main.c
ExeName = Hello

all : $(ExeName)

$(ExeName) : $(Target)
	gcc -g -O0 -Wall -o $(ExeName) $(Target)

clean :
	rm -f $(ExeName)

プロジェクトの設定をしよう

1

先ほどはウィザードで初期設定を行いましたが、ここで改めて設定を構築しなおしていきます。
ファイルメニューから「プロパティ(R)」を選択します。

2

「C/C++ ビルド」で設定が行えます。
最初にウィザードで、構成の「Debug」にチェック入れました。
つまり、この最初に表示されたのが、「Debug」の初期構成となっています。
今回勉強のために、構成の名前を変えてみましょう。「構成の管理…」を押します。

3

Debugを選択して、「名前変更…」で「MyCompile」と変更して「OK」を押してみます。
これで自分で名前をつけた構成となります。

4

EclipseではMakefileを自動生成する機能がありデフォルトで有効となっていますが、
今回は自分でMakefileを管理するため「自動的にMakefileを作成(G)」のチェックを外します。
また、「ビルド・ディレクトリー(D)」でMakefileがおいてあるディレクトリを設定します。
設定が終わったら、「適用(A)」を押しましょう。

5

今度はコンパイルが終わって実行ファイルが作成された後の実行方法の設定を行います。
「実行/デバッグ設定」で、「新規(N)…」を選択します。

6

実行する手法に名前をつけられるので、「MyExecute」としました。
今回、makefileにコンパイル後の実行ファイル名は「Hello」と記載しました。
従って、makefileが実行されると「MyProcess/Hello」という実行ファイルが作成されます。
ここには、その実行ファイルのパスを「C/C++ アプリケーション」に記述します。
ここに記載されたパスが、実行ボタンを押すと実行されるようになるためです。
プロジェクトの欄は、この起動構成プロパティは、何のプロジェクトの起動構成プロパティかという設定です。
今回は、Sampleプロジェクトなので「Sample」とします。
設定を終えたら「OK」を押します。

7

これで設定の完了したので「OK」を押します。


コンパイルをしよう

1

「プロジェクト(P)」メニューの「プロジェクトのビルド(B)」を選びましょう。

2

下のコンソールに「Build Finished」が表示されたら成功です。
左側のプロジェクトエクスプローラーにも、実行ファイルが作成されていることが確認できます。

 


実行とデバッグをしよう

1

緑色の▲ボタンを押すと、実行できます。簡単でしょ!
コンソールにはしっかり「Hello world !」と表示されます。

2

虫(bug)のマークを押すとデバッグが行えます。

デバッグを中止したいときは、■を押して停止させます。
元のウィンドウ構成に戻すためには「ウィンドウ(W)」の
「パースペクティブを開く(O)」から「C/C++」を選択します。
Eclipseでは、ウィンドウやコントロールの位置などのプリセットをパースペクティブと呼びます。
この操作を行うことで、デバッグ用のパースペクティブから元に戻すことが可能です。


おまけ

1

今回は、変更しませんでしたが「振る舞い」でMakefileの引数も設定できます。
デフォルトは先ほど説明したように、「all」と「clean」になっています。

2

もし、ソースコード内でincludeするときに、別のライブラリのヘッダを参照している場合は、
下記のインクルード設定で設定を行えます。
ただし、今回のようにMakefileを手動設定にしている時点で、
ここの設定が誤っていてもコンパイルと実行は可能です。
ただ設定が誤っていると、ソースコードエディタで注意がされてしまいます。


おわりに

おつかれさまです。
いろいろEclipseをいじりながら無事を書き終わることができました。

では、また!

Linuxで動作するCプログラムのデバッグ環境構築1

Linuxで動作するCプログラムのデバッグ環境構築1

こんにちはー!

今回は、Linuxで動作するCのデバッグ環境の整え方をお話しします。

皆さんは、Raspberry PiとかのLinux上で動作するプログラムを作るときにどうしていますか、
Raspberry Pi 上で make して色々プログラムを作っていくのもいいですが、
コンパイルの速度が遅いですし、効率も落ちてしまいます。

では、どうすればいいのか。
Windows環境で、Linux上のプログラムを作ってテストしたいと思った時に
一番簡単なのは、仮想環境でLinuxを起動させてPCでmakeしていく方法です。
ただ、仮想環境は重たい切実な問題があります。

そこで、今回はできる限り軽い仮想環境を作って
Cプログラムをデバッグ出来る方法まで説明します。


作戦

まず、Linuxといってもたくさん派生しており、色々な環境があります。
そのため、かるーいOSもあるはずです。

Linux

ベースとなるLinuxを考えましょう。

Linuxの種類

OSの説明です。
私が知っている情報は、この5つしかありません(認識不足)

RedHat系

RHEL(Red Hat Enterprise Linux) / CentOS / Fedora 等のサーバー向けのOSです。
RHEL は、有料のOSであるため、サポートや情報が多く、サーバーに使用されることがおおいです。
CentOS は、RHEL の無料版です。サポートが受けられませんが、信頼性が高い RHEL を使えるような形です。
Fedora は、新しい機能を追加していくOSです。最新の機能を試したい向けです。

Debian GNU/Linux

フリーのOSを作成する団体Debianが開発したLinuxベースのOS。
搭載アプリは安定版のため少し古いですが、信頼性は高くネットの情報も多いです。
Debianから多くのOSが派生しており、Raspbianなど組み込み向けLinuxも作られることが多いです。

Ubuntu

Debian ベースのOSで、個人向けだと有名なOSです。
デスクトップPC向けに様々なカスタマイズがされているOSです。
利用者が多いため非常に情報量が多いです。

Arch Linux

必要最低限の物しか入っておらず全てを自分でカスタマイズする超上級者向けOS

BSD系

上の3種類と違ってLinuxではありませんが、よく耳にするOSなので紹介します。
Linux系のOSは、総じてGPLなのですが、BSD系のOSは、BSDライセンスとなります。
製品に組み込む際にBSDがよいといった場合に選ばれるOSです。

どのLinuxを選択するのか

結論からいいますと、Debian を今回選択しました。
というのもカスタイマイズされた Ubuntu は、有名なOSで情報量も多いのですが、
デバッグ環境だけに限れば、必要がないアプリがインストールされます。

そして、Debianは、Raspbianなど組み込みLinuxでベースとされることが多いため、
Debian での環境で何か開発すれば、それを他の組み込みに持っていくのが楽かと考えたためです。
Armadillo とかも Debian が動いています。

デスクトップ環境

Linuxを知っている方ならご存知ですが、デスクトップ環境は好きなものが選べます。
ここで選ぶものによって、非力なPCでは重たくなってしまいます。
Debian では、インストール中にいくつかデスクトップ環境を選ぶことができます。

デスクトップ環境の種類

Unity, GNOME

下記のに比べるとグラフィカルでUIが洗練されていますが、
その分メモリやパワーを使用します。
Ubuntu のデスクトップ環境を選ぶと標準で利用されます。
※Unity は Debian では選べません。

Xfce

当初、これを検討していました。
歴史があるデスクトップ環境のためか、
現在のPCでは軽快に動作する特徴を持っています。

LXDE

これは歴史は浅いですが、処理能力の低いPC向けに作られた環境です。
軽快に動作することを目的としています。

どのデスクトップ環境を選択するのか

今回は、LXDEを選択します。
目的が軽さというのがよいです。
デバッグ環境のみに使用するという目的とマッチしています。

デバッグ用ツール

ここはあんまり調査していませんでした。
Windows でもよく使用される Eclipse を使用したいと思います。


開発環境を整えよう

全てはかきませんが、流れを説明します。

前準備

次の環境を用意します。

・Oracle VM VirtualBox
仮想環境です。今回は 5.2.4 を使用します。
仮想環境は、スナップショットという機能を使うことで誤った設定をしても以前の段階に戻れるためおススメです。
VMware という選択肢もありますが、商用利用に制限があるためこちらを選択します。

・Debian
Debianのサイト」で
「Debian を入手する」→「ネットワークインストール」→「最小の CD を使って、ネットワークインストールする」を選択します。
「netinst CD イメージ (約 150-300 MB ですがアーキテクチャよって変わります)」の中にある
「i386」を選択して「debian-9.3.0-i386-netinst.iso」をダウンロードします。(x86用OSを想定)

・ネットワーク
プロクシなしで、ネットワークに接続できる環境を準備します。

VMで仮想環境を作成

新規作成する

1. 「Oracle VM VirtualBox」を起動して、「新規」を選択します。
2. タイプはLinux、バージョンはDebian(32-bit)を設定します
3. メモリサイズは緑の範囲で出来る限り多くとります。
4. ハードディスクでは「仮想ハードディスクを作成する」を選び「作成」。
5. ハードディスクはVDIを選択。サイズは可変サイズを選択
6. 「ファイルの場所とサイズ」になったら、HDDファイルの場所を設定してください。
場所やファイル名は変更がすこし大変なので注意。
また、ハードディスクのサイズは120GBほどに設定しましょう。
こちらは、変更が非常に困難なので極力大きめにします。

設定変更する

新規作成すると左側の領域に作成した仮想環境が表示されます。
これを選択した状態で「設定」を選ぶと、より設定変更が行えます。
次のように設定していきます。
1. 一般の高度で、クリップボードの共有を双方向にする
2. システムのプロセッサーで、CPU数を増やす
3. オーディオとUSBは無効化する(使用しないため)
4. ネットワークはNATとなっていること(外部にアクセスするため)
よくやる設定はこんなものです。

OSのインストール

1. 作成したプロジェクトを選び、起動を選びます。
2. 最初にISOを選択する画面が表示されるため「debian-9.3.0-i386-netinst.iso」を選択します
3. インストール方法は、グラフィカルじゃないインストール方法 Install を選択します。
※操作は、矢印キーとスペースキーで選択し、エンターキーで決定です。
4. あとは適当に進めていきます。途中で言語の設定が出た場合は「日本」を選びましょう
5. 途中で、初期インストールの設定が出たら、「LXDE」と「SSH サーバー」を選びましょう。
6. あとは適当に進めていけばOSのインストールが完了です。

OSの初期設定を行う

ターミナルを駆使して設定していきます。
スーパーユーザー権限で行うことが多いので「sudo su -」と入力しておくと楽です。

パスを英語化する

「デスクトップ」とかフォルダパスに
日本語が入っているとやり辛いので最初にやります。
1. xdg-user-dirs-gtk をインストールして、updateを実行します。

sudo apt-get install xdg-user-dirs-gtk
LANG=C xdg-user-dirs-gtk-update

Guest Additions CDをインストールする

Guest Additions CD とは、
VM上で動くOSでインストールすることで、
共有フォルダや画面解像度変更、クリップボード共有など
色々と使いやすくなるツールです。
1. VMのメニューバーにある「デバイス」→「Guest Additions CDイメージの挿入…」
2. CDが認識されます。このままだと実行できないので、一旦ディスクのフォルダをデスクトップへコピー(cdrom というフォルダにします)
3. 実行する前に、実行に必要なソフトをインストールします。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install dkms
sudo apt-get install build-essential module-assistant 
sudo apt-get install linux-headers-686 linux-headers-4.9.0-4-686
※Linuxの部分は、DebianのLinuxカーネルのバージョンに依存する
そのため、下記のVBoxLinuxAdditions.runを実行すると
必要なインストールファイルが表示されるのでそれを参考にするよい

4. Guest Additionsをインストールして再起動

cd /home/***/Desktop/cdrom
sudo ./VBoxLinuxAdditions.run
sudo reboot

※もし「VBoxLinuxAdditions.run」でエラーが出た場合は表示内容をインストールする。
それでも駄目なら、VirtualBoxを最新版にする。
(Debianのリリース日より新しいバージョンだと確実。)
5. Guest Additions CD を取り出す
VMのメニューバーにある「デバイス」→「光学ドライブ」から除去的なのを選ぶ

共有フォルダの設定

Windows上とファイルの行き来する際に、共有フォルダを作ると便利です
1. VMのメニューバーにある「デバイス」→「共有フォルダー設定…」
2. フォルダの追加ボタンで、ダイアログを表示させる
3. フォルダのパスを入力する部分で、右端の▼を押して「その他…」を選び、フォルダを選択
4. 「自動マウント」と「永続化する」を選びOKを押す
5. OSを再起動
6. 共有フォルダ「/media/sf_***」への権限を付与

sudo gpasswd -a ユーザ名 vboxsf

7. OSを再起動

不要なファイルを削除する

いらないファイルは予め削除しちゃいましょう。
下記のコマンドで、オフィスツールや画像編集ソフトをアンインストールできます。

sudo apt remove libreoffice*
sudo apt remove gimp*
sudo apt remove firefox*
sudo apt-get autoremove

あると便利なソフトをインストールする

コンパイルに必要なmakeやファイルサーバーのsambaは必須!よく使うので。

sudo apt-get install make
以下、おすすめ
sudo apt-get install samba
sudo apt-get install curl
sudo apt-get install aptitude
sudo apt-get install php

サーバーを自動起動させる

あとは、SSHやSAMBAの設定を好みでしておきましょう。

Eclipseのインストール

Eclipseをインストールしていきます。
ここからは「Synaptic パッケージマネージャ」を使用していきます。
「Synaptic パッケージマネージャ」というのは、アプリストアみたいなものです。
1. スタートメニューから「設定」→「Synaptic パッケージマネージャ」
2. 次の4つを選択した後に適用を押し、インストールします。
・eclipse(本体)
・eclipse-cdt(C/C++開発用)
・pleiades(eclipseの日本語化)
・gdb(gccのデバッグ支援機能)
3. スタートメニューから「プログラミング」→「eclipse」を選択して、起動させて終了させる。
4. 日本語化のために次のように「eclipse.ini 」を開く

sudo nano /usr/lib/eclipse/eclipse.ini

5. 最終行に次の1行を追加して上書きする。

-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

6. ターミナルで次のコマンドをうつ。

eclipse -clean

7. これでC言語でデバッグ環境の準備を終えました。


デバッグしてみよう

ここからは、通常のeclipseの使い方と同じです。
ここについては私がもっと詳しくなったら記述したいと思います。

Linuxで動作するCプログラムのデバッグ環境構築2」へつづく


おまけ

配布用のサイズを縮小する

仮想環境で作るメリットとして、
一旦作ってしまえば、面倒な環境構築無しで、他のパソコンでもすぐに実行できるということがあります。
ただ1つ問題がありまして、この仮想環境のファイルシステムはどんどん大きくなっていきます。
可変サイズという設定にしているので、
使用しなくなったらサイズが減ると思っているかもしれませんが減りません。

配布する際にこのようにファイルサイズが巨大になったまま配布すると扱いが大変なので、
縮小させることを行います。
1. ゴミ箱は空にしておく
2. スナップショットを使用しているならば、統合するためにスナップショットを全て統合させる。
3. 仮想OS上(Debian)で次のコマンドをうつ

sudo dd if=/dev/zero of=zero bs=4k; rm zero

4. 仮想OSをシャットダウン
5. Windows上で管理者権限でコマンドプロンプトを起動させる
6. VirtualBox のインストール先にカレントディレクトリを移動させる
5. 「VBoxManage list hdds」で縮小させるVDIのUUIDを調査する
6. 「VBoxManage modifyhd [UUID] –compact」で縮小させる
7. 圧縮ソフト7-zipを使って、7z形式で高圧縮させる


常にスーパーユーザーになる

あまりおすすめしませんが、
重要なコマンドを続けて実行する場合は常にスーパーユーザーになると楽です。

sudo su -

と実行し、自分のログインパスワードをうてばrootになれます。

なお、ifconfig等のコマンドは、スーパーユーザーでなければ、
パスが通っていないため実行できません。

/sbin/ifconfig
ifconfigを使わないのであれば、以下でも実行可能。
ip a show

もし、どのユーザーでもifconfigを使いたいのであれば、

sudo nano /etc/profile

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi

のスーパーユーザーかどうかif分判定しているelseの方のパスの設定を

  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin"

とする必要があります。

Raspberry Pi 3 に CentOS 7

by なたで 0 Comments

これまでも何度も Raspberry Pi を初期化していますが、
今回はサーバー運用に定評がある CentOS(for armv7hl) を入れてみました。
その時の設定メモです。

補足
armv7hl とは、文字通り ARMv7 向けかと思いますが、Raspberry Pi 3は、ARMv8 です。
なので、本来であれば v8用が必要なのかもしれませんが、
CentOSのサイトには Raspberry Pi 3 用であっても armv7hl とファイル名にかいてあるので、
この辺のARMのバージョンは気にしなくていいのかもしれません。

そしてですが、このCentOS用のイメージはテスト版であることと、ARM用ということなので、
普通のx86版のCentOSで行えるようなサードパーティのパッケージが用意されていない場合がありますので注意してください。


起動まで

パーティションが存在するSDカードの初期化

1. コマンドプロンプトで「diskpart」を実行
2. 「list disk」で初期化したいSDカードのディスク番号を調べる
3. 「select disk 1」でディスク番号1を選択する
4. 「list partition」でパーティションを確認し選択しているのが正しいことを確認
5. 「clean」で内部を初期化

SDカードをフォーマットする

1. 「SD/SDHC/SDXC用SDメモリカードフォーマッター 5.0」を利用

CentOSのRaspbeyPi3用のimgファイルを準備

1. 「CentOS-Userland-7-armv7hl-Minimal-1611-test-RaspberryPi3.img.xz」をダウンロードして「7zip」などで展開
2. 「Win32DiskImager」を利用して、imgファイルをSDカードに入れる
3. これを差し込めば一応利用可能になる

起動後のネットワーク設定とい設定まで

SSHでログインできるまでの基礎設定

1. HDMI でディスプレイに接続して、USBキーボードを接続する
2. 次のコマンドをうち日本語キーボード入力を有効化する

localectl set-keymap jp106
localectl set-keymap jp-OADG109A
localectl LANG=ja_JP.utf8

3. タイムゾーンの設定を行う

timedetectl set-timezone Asia/Tokyo

4. SDカードの拡張を行う

/usr/local/bin/rootfs-expand

5. 次のコマンドでIPアドレスを調べる

ifconfig

6. sshで、ユーザー名 root、パスワード、centos でログイン
7. パスワードは次のコマンドで変更できるので必ず変更しておきましょう

passwd

外部にネットワークで接続できるようにする(CentOS7 から後述の nmtui を使うと良い)

1. 「/etc/sysconfig/network」がないので、「touch」で新規作成する※後述
2. 中はネットワーク接続と、デフォルトゲートウェイの設定をする

NETWORKING="yes"
GATEWAY="192.168.11.1"(デフォルトゲートウェイ)

3. 「/etc/sysconfig/network-scripts/ifcfg-eth0」を編集して、固定IPアドレスにする

TYPE="Ethernet"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
DEFROUTE="yes"
NAME="eth0"
UUID=xxx
ONBOOT="yes"

TYPE="Ethernet"
BOOTPROTO="static"
NM_CONTROLLED="yes"
DEFROUTE="yes"
NAME="eth0"
UUID=xxx(いじらない)
ONBOOT="yes"
IPADDR="192.168.11.200"(自分のIPアドレスにする)
NETMASK="255.255.255.0"
DNS1="8.8.8.8"(Google のDNSサーバーを設定する)
DNS2="8.8.4.4"

4. NetworkManagerを止める

systemctl stop NetworkManager

5. ネットワークの設定をリロードする

systemctl daemon-reload
systemctl restart network

6. ping で外部サーバーに接続できるかテストする

[root@centos-rpi3 sysconfig]# ping google.com
PING google.com (216.58.200.174) 56(84) bytes of data.
64 bytes from nrt12s11-in-f174.1e100.net (216.58.200.174): icmp_seq=1 ttl=49 time=20.3 ms
64 bytes from nrt12s11-in-f174.1e100.net (216.58.200.174): icmp_seq=2 ttl=49 time=20.5 ms
64 bytes from nrt12s11-in-f174.1e100.net (216.58.200.174): icmp_seq=3 ttl=49 time=20.2 ms

※「/etc/sysconfig/network」の設定がないと、次のようにエラーで立ち上がりません。

[root@centos-rpi3 sysconfig]# systemctl status network.service
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 1970-01-08 06:27:21 JST; 8min ago
    Docs: man:systemd-sysv-generator(8)

Jan 08 06:27:21 centos-rpi3 systemd[1]: Starting LSB: Bring up/down networking...
Jan 08 06:27:21 centos-rpi3 systemd[1]: network.service: control process exited, code=exited status=6
Jan 08 06:27:21 centos-rpi3 systemd[1]: Failed to start LSB: Bring up/down networking.
Jan 08 06:27:21 centos-rpi3 systemd[1]: Unit network.service entered failed state.
Jan 08 06:27:21 centos-rpi3 systemd[1]: network.service failed.

【注意】
CentOS7 から手動でファイルをいじる方法は推奨されていません。
nmtui を使用して NetworkManager で設定するのを推奨されています。
nmtui のほうが簡単にIPアドレスを設定できるので、おすすめです。
コマンドで設定ができる nmcui というのもあります。

yum コマンドを使用できるようにする

1. 「/etc/yum.repos.d/CentOS-armhfp-kernel.repo」を下記のように編集する

[centos-kernel]
name=CentOS Kernels for armhfp
baseurl=http://mirror.centos.org/altarch/7/kernel/$basearch/kernel-$kvariant ★ここを変更する
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-AltArch-Arm32

[centos-kernel]
name=CentOS Kernels for armhfp
baseurl=http://mirror.centos.org/altarch/7/kernel/$basearch/kernel-rpi2
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-AltArch-Arm32

※なにもせずに「yum update」をすると、404エラーが発生します。

[root@centos-rpi3 ~]# yum update
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00
http://mirror.centos.org/altarch/7/kernel/armhfp/kernel-%24kvariant/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
...
failure: repodata/repomd.xml from centos-kernel: [Errno 256] No more mirrors to try.
http://mirror.centos.org/altarch/7/kernel/armhfp/kernel-$kvariant/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found

2. yum でソフトの更新を行う

yum clean all
yum update

※数時間かかる場合があります

make コマンドやコンパイルを行えるようにする

1. 下記のコマンドをうってインストールします。

sudo yum install make gcc gcc-c++

bashのタブキーの補完を強化する

1. 下記のコマンドをうってインストールします。

sudo yum install bash-completion

その他の基本設定や便利にする

pi@centos に変更してみる

1. 現在使用しているのは「root@centos-rpi3」となりますが、rootを権限で常にいるのはよくないとききます。そのため、別のアカウントを作ってみましょう。
2. 次のようにすることで、簡単にpiユーザーを作成できます。

useradd pi
passwd pi

3. ホスト名もついでに変更する

hostname centos

4. 新規に作ったpiユーザーで、sudoを使用できるようにする

visudo

5. 「visudo」で「/etc/sudoers」を編集します。

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
pi      ALL=(ALL)       ALL

6. pi ユーザーで ssh ログインが出来るようになり、pi で sudo も利用が行えます。

その他、便利なアプリをインストールしてみる

1. nano のインストール

sudo yum install nano

ファイルサーバー機能を有効化する

1. Sambaをインストールする

yum install samba

2. アカウントを作成する(下記のどちらかのコマンドでよい)

smbpasswd -a pi
pdbedit -a pi

3. 設定ファイルを編集する

vi /etc/samba/smb.conf

4. 中身がおかしな部分があるので修正する

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
        encrypt_passwords = yes ← 実際は"encrypt passwords"

5. アカウントを確認する

pdbedit --list

6. サービスの起動と、自動開始の設定、ファイアーウォールの設定をする

systemctl start smb.service
systemctl start nmb.service
systemctl enable smb.service
systemctl enable nmb.service
firewall-cmd --permanent --add-service=samba --zone=public
firewall-cmd --reload

7. ホームディレクトリも見えるようにしておく

setsebool -P samba_enable_home_dirs on

他に何かしていったら追記していきます


参考サイト
・2016/02/18 pb_tmz08 – [Raspberry Pi] RaspberryPi 2でCentOS7 ことはじめ
・2017/03/21 MSeeeeN – Raspberry Pi 3 で CentOS 7 を動かす
・2016/09/22 NAZA – raspberry Pi3にcentos7を入れてみた – Qiita
Raspberry Pi 用のSDカードを初期化する方法
Raspberry Pi 3へのCentOS7のインストール 基本編
NetworkManager 使用方法(nmtui編)
・2014/07/12 enakai00 – RHEL7/CentOS7でipコマンドをマスター
・2017/01/22 miyu – net-tools は使われなくなり iproute2 が標準的になるかも
・2016/04/14 k-sh – CnetOS 7 (on Raspberry Pi)でのrpmパッケージビルド環境の構築
・2015/06/28 CentOS 7 で ネットワーク(IPアドレス、ホスト名、ドメイン名など)の設定を行う

%d人のブロガーが「いいね」をつけました。