2015年12月31日木曜日

やっぱり、よくわからない。。。lighttpd

lighttpdの設定は、難しいというか、
忙しさにかまけて、ちゃんとマニュアルを読んでいない。
ということで、メモの変わりの画面コピー
これで、自分のやりたい事ができた。
嬉しいなぁ。(^^)

2015年12月27日日曜日

An installation of ArchLinux on Raspberry Pi2


少しづつ改善しているけど、、、
うーん、何か、Raspberry Piで考えうる、ロボット系の最強の環境になってきた。

なぜ、Raspberry Piに、ArchLinuxっかって?
Rasbianは、教育用のデスクトップOS
僕は、Raspberry Pi2の能力を最大に使って、ロボットを開発したいから、
一番シンプルなArchLinuxを使って、ロボット用の環境を構築する。
って、ことね。(^^)

4GBのArchLinux for armv7があります。
こちらからダウンロードしました。公開されている方に感謝m(__)m
ubuntu環境が壊れているので、本当に助かりました。

これを、ロボット開発用に変更していきます。
文書、ザッツくてごめんなさい。

黒字:解説や、Raspberry Piのディスプレーメッセージ
青字:Raspberry Piでの入力
赤字:Macでの入力

1.MAC:元のイメージを、SDカードにコピーする

sudo diskutil unmount /dev/disk2s1
sudo dd bs=1m of=/dev/rdisk2 if=ArchLinux-armv7-4GB.img

2.Raspberry Pi2:sshで他のマシンからrootで入れるように変更

vi /etc/ssh/sshd_config
次の2箇所のコメントアウトを外す。

Port 22
PermitRootLogin yes

reboot

再度Loginして、
ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.11.13  netmask 255.255.255.0  broadcast 192.168.11.255
        inet6 fe80::ba27:ebff:fe08:daac  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:08:da:ac  txqueuelen 1000  (Ethernet)
        RX packets 232  bytes 20875 (20.3 KiB)

と、言うことで、192.168.11.13 です。DHCPの割り当てね。
これからは、ずーっとMacから、SSH接続して作業ができます。

3. MacからSSHで作業をします。

3-1 まずは、更新

ssh root@192.168.11.13

vi /etc/pacman.d/mi*
で、サーバを近そうな所に変更してから、、、

pacman -Syu

10分くらいね。

3-2 Ethernet接続を固定アドレスにする。

cd /etc/netctl
cp examples/ethernet-static ./eth0Static
vi eth0Static

この部分を、
Address=('192.168.1.23/24' '192.168.1.87/24')
#Routes=('192.168.0.0/24 via 192.168.1.2')
Gateway='192.168.1.1'

DNS=('192.168.1.1')

自分の開発環境に合わせて、アドレスを設定します。
Address=('192.168.11.131/24')
#Routes=('192.168.0.0/24 via 192.168.1.2')
Gateway='192.168.11.1'
DNS=('192.168.11.1')

netctl enable eth0Static

3-3 ホスト名を、自分のルールに合わせて変更します。

hostnamectl set-hostname rcmp-r31
vi /etc/hosts
cat /etc/hosts
#
# /etc/hosts: static lookup table for host names
#
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1       localhost.localdomain   localhost       rcmp-r31    
::1 localhost.localdomain localhost       rcmp-r31
# End of file

3-4 ユーザの追加

以後は、このユーザで作業をします。sudoを使えるようにwheelグループに登録します。
useradd -m rbt
passwd rbt 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
gpasswd -a rbt wheel
gpasswd -a rbt video      (option)
gpasswd -a rbt audio      (option)
gpasswd -a rbt power      (option)
gpasswd -a rbt uucp      (option)

gpasswd -a rbt dialout      (option)
pacman -S sudo
visudo
wheelがコメントになっているので、下記のように変更する
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

reboot

参考: useradd -m -g users -G wheel -s /bin/bash rbt

4.再度、SSHでログイン

ssh rbt@192.168.11.131

rbt@192.168.11.131's password: 
Welcome to Arch Linux ARM
     Website: http://archlinuxarm.org
     Forum: http://archlinuxarm.org/forum
     IRC: #archlinux-arm on irc.Freenode.net
[rbt@rcmp-r31 ~]$ 

こんな感じで、ちゃんとログインができればよいです。
その後は、sudoで作業ができます。
でも、最初は、ちょっとビックリかも、、、

4-1 SDカード目一杯使います。

sudo fdisk /dev/mmcblk0
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/mmcblk0: 14.7 GiB, 15804137472 bytes, 30867456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4bce3dec
Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  206847  204800  100M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      206848 7000000 6793153  3.2G 83 Linux
Command (m for help): d
Partition number (1,2, default 2): 
Partition 2 has been deleted.
Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 
First sector (206848-30867455, default 206848): 
Last sector, +sectors or +size{K,M,G,T,P} (206848-30867455, default 30867455): 
Created a new partition 2 of type 'Linux' and of size 14.6 GiB.
Command (m for help): p
Disk /dev/mmcblk0: 14.7 GiB, 15804137472 bytes, 30867456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4bce3dec
Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        2048   206847   204800  100M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      206848 30867455 30660608 14.6G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

sudo reboot


[rbt@rcmp-r31 ~]$ sudo resize2fs /dev/mmcblk0p2
[sudo] password for rbt: 
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mmcblk0p2 is now 3832576 (4k) blocks long.

[rbt@rcmp-r31 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.1G   12G  15% /
devtmpfs        458M     0  458M   0% /dev
tmpfs           462M     0  462M   0% /dev/shm
tmpfs           462M  388K  462M   1% /run
tmpfs           462M     0  462M   0% /sys/fs/cgroup
tmpfs           462M     0  462M   0% /tmp
/dev/mmcblk0p1  100M   19M   82M  19% /boot
tmpfs            93M     0   93M   0% /run/user/1000

SDカード、前部使えます。(^^)

4-2 タイムゾーン、時刻設定

sudo timedatectl set-timezone Asia/Tokyo
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.
[sudo] password for rbt: 

sudo timedatectl set-timezone Asia/Tokyo

sudo pacman -S ntp
resolving dependencies...
looking for conflicting packages...
Packages (1) ntp-4.2.8.p4-1
Total Download Size:   1.62 MiB
Total Installed Size:  3.92 MiB
:: Proceed with installation? [Y/n] y
:: Retrieving packages ...
 ntp-4.2.8.p4-1-armv7h   1657.7 KiB  3.68M/s 00:00 [######################] 100%
(1/1) checking keys in keyring                     [######################] 100%
(1/1) checking package integrity                   [######################] 100%
(1/1) loading package files                        [######################] 100%
(1/1) checking for file conflicts                  [######################] 100%
(1/1) checking available disk space                [######################] 100%
(1/1) installing ntp                               [######################] 100%

sudo vi /etc/ntp.conf

cat /etc/ntp.conf
# Please consider joining the pool:
#
#     http://www.pool.ntp.org/join.html
#
# For additional information see:
# - https://wiki.archlinux.org/index.php/Network_Time_Protocol_daemon
# - http://support.ntp.org/bin/view/Support/GettingStarted
# - the ntp.conf man page
# Associate to Arch's NTP pool
#server 0.arch.pool.ntp.org
#server 1.arch.pool.ntp.org
#server 2.arch.pool.ntp.org
#server 3.arch.pool.ntp.org
server ntp.nict.jp iburst (追加)
# By default, the server allows:
# - all queries from the local host
# - only time queries from remote hosts, protected by rate limiting and kod
restrict default kod limited nomodify nopeer noquery notrap
restrict 127.0.0.1
restrict ::1
# Location of drift file
driftfile /var/lib/ntp/ntp.drift

sudo ntpd -qg
27 Dec 16:39:25 ntpd[344]: ntpd 4.2.8p4@1.3265-o Thu Oct 22 09:48:17 UTC 2015 (1): Starting
27 Dec 16:39:25 ntpd[344]: Command line: ntpd -qg
27 Dec 16:39:25 ntpd[344]: proto: precision = 1.667 usec (-19)
27 Dec 16:39:25 ntpd[344]: Listen and drop on 0 v6wildcard [::]:123
27 Dec 16:39:25 ntpd[344]: Listen and drop on 1 v4wildcard 0.0.0.0:123
27 Dec 16:39:25 ntpd[344]: Listen normally on 2 lo 127.0.0.1:123
27 Dec 16:39:25 ntpd[344]: Listen normally on 3 eth0 192.168.11.13:123
27 Dec 16:39:25 ntpd[344]: Listen normally on 4 eth0 192.168.11.131:123
27 Dec 16:39:25 ntpd[344]: Listen normally on 5 lo [::1]:123
27 Dec 16:39:25 ntpd[344]: Listen normally on 6 eth0 [fe80::ba27:ebff:fe08:daac%2]:123
27 Dec 16:39:25 ntpd[344]: Listening on routing socket on fd #23 for interface updates
27 Dec 16:39:28 ntpd[344]: ntpd: time slew -0.000270 s
ntpd: time slew -0.000270s

sudo timedatectl set-ntp 1


4-3 追加のソフトインストール

sudo pacman -S git fcrontab
sudo pacman -S --needed base-devel
sudo pacman -S vim htop screen tree picocom git rsync ftp gawk
sudo shutdown -h now

4-4 swap

sudo dd if=/dev/zero of=/swapfile.img bs=1M count=1024
[sudo] password for rbt: 
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 58.9933 s, 18.2 MB/s

sudo mkswap /swapfile.img                       
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=b753579a-6c58-4733-a80f-13f95adc39c5

sudo swapon /swapfile.img 
swapon: /swapfile.img: insecure permissions 0644, 0600 suggested.

sudo vi /etc/fstab
cat /etc/fstab
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
/dev/mmcblk0p1  /boot   vfat    defaults        0       0
/swapfile.img none swap sw 0 0

4-5 環境設定

cat .bashrc 
#
# ~/.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '
export LANG=ja_JP.UTF-8
alias ll='ls -al'
alias l=ls
alias h=history
PATH=~/bin:"$PATH"

vi .exrc
cat .exrc
set tabstop=2
set showmode
set autoindent
set nonumber 
set showmatch

4-6  無線LAN

飛躍的に設定が楽になりましたーーー
sudo pacman -S wpa_supplicant wireless_tools dialog 
sudo wifi-menu wlan0
あとは、画面の指示に従って、変更です。
で、おまじないの文言を追加します。

sudo vi wlan0SSID

sudo cat wlan0SSID
[sudo] password for rbt: 
Description='Automatically generated profile by wifi-menu'
Interface=wlan0
Connection=wireless
Security=wpa
ESSID=SSID
Key=自分ちのpskだよ
IP=static
Address='192.168.11.130/24'
Gateway='192.168.11.1'
DNS=('192.168.11.1')

sudo netctl enable wlan0SSID
sudo netctl list

で、ダメだったら、、おまじない、やってみてね。
sudo ip link set wlan0 up
か、、、
sudo ip link set wlan0 down
それと、プロファイルの名称に - (ハイフォン)が入るのはダメらしい??
CRDAのエラーが出た時は、
sudo pacman -S crda
イーサネットケーブルを抜きます。
reboot


5. /boot/config.txt

次の設定をする。
(1) 900MHzを選択(コメントを外す)
##Medium
arm_freq=900
core_freq=333
sdram_freq=450

over_voltage=2

(2) オーバースキャンの設定

disable_overscan=1

(3) i2c設定
dtparam=i2c_arm=on

6. i2c設定

sudo pacman -S i2c-tools lm_sensors

sudo vi /etc/modules-load.d/raspberrypi.conf
cat /etc/modules-load.d/raspberrypi.conf
bcm2708-rng
snd-bcm2835
i2c-dev

reboot

sudo i2cdetect -y 1
      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 
下記の写真のTSL2591の、アドレスは0x29です。
バッチリ(^^)


7. lighttpd

sudo pacman -S lighttpd
cd /etc/lighttpd
sudo vi /etc/lighttpd/lighttpd.conf
cat /etc/lighttpd/lighttpd.conf
# This is a minimal example config
# See /usr/share/doc/lighttpd
# and http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptio
ns

server.port = 80
server.username = "http"
server.groupname = "http"
server.document-root = "/srv/http"
server.errorlog = "/var/log/lighttpd/error.log"
dir-listing.activate = "enable"
index-file.names = ( "index.html" )
mimetype.assign = (
                        ".html" => "text/html",
                        ".txt" => "text/plain",
                        ".css" => "text/css",
                        ".js" => "application/x-javascript",
                        ".jpg" => "image/jpeg",
                        ".jpeg" => "image/jpeg",
                        ".gif" => "image/gif",
                        ".png" => "image/png",
                        "" => "application/octet-stream"
)
server.modules              = (
            "mod_access",
            "mod_cgi",
            "mod_alias",
            "mod_accesslog",
            "mod_compress",
)
$HTTP["url"] =~ "/cgi-bin/" {
        cgi.assign = ( "" => "" )
}

cgi.assign      = (
        ".cgi"  => ""

)


sudo  lighttpd -t -f /etc/lighttpd/lighttpd.conf
sudo mkdir conf.d
sudo vi cgi.conf
cat cgi.conf
server.modules += ( "mod_cgi" )

cgi.assign                 = ( ".bin"  => "",
                               ".pl"  => "/usr/bin/perl",
                               ".cgi" => "/usr/bin/perl",
                               ".rb"  => "/usr/bin/ruby",
                               ".erb" => "/usr/bin/eruby",
                               ".py"  => "/usr/bin/python",
                               ".php" => "/usr/bin/php-cgi" )

index-file.names           += ( "index.pl",   "default.pl",
                               "index.rb",   "default.rb",
                               "index.erb",  "default.erb",
                               "index.py",   "default.py",

                               "index.php",  "default.php" )

sudo systemctl start lighttpd.service
sudo systemctl enable lighttpd.service
cd /srv/http
sudo mkdir cgi-bin
cd cgi-bin
vi hello.c
cat hello.c
#include "stdio.h"
int main(void) {
  printf( "Content-Type: text/plain\n\n" );
  printf("Hello world !\n");
  return 0;

 } 
sudo gcc hello.c -o hello.bin
sudo co hello.bin hello

このサーバにアクセス
192.168.11.100/cgi-bin/hello
ブラウザーに、次の文字がでればOk(^^)
Hello World!

って事で、基本的なRESTの環境構築終了(^^)/
だから、、、
curl http://192.168.11.100/cgi-bin/hello

Hello world !


8. OpenCV

OpenCV 2.4です。
sudo pacman -S opencv


9. WiringPi

なんということでしょうか!!
よかったです。
sudo pacman -S wiringpi


10. MACで16GBのイメージファイルをつくる

sudo diskutil unmount /dev/disk2s1
sudo dd if=/dev/rdisk2 of=./archlinux-151227.img

でおしまいです。
って、感じでギャオです。

Peace!!





2015年11月29日日曜日

Raspberry Pi jessieインストルの最近(151129)

Raspberry PiのOSがバージョンアップしたので、まとめ

1.Micro-sdカードにOSをインスールする。


sudo diskutil unmount /dev/disk2s1
sudo dd bs=1m of=/dev/rdisk2 if=2015-11-21-raspbian-jessie.img
cp interfaces /Volumes/boot
cp wpa_supplicant.conf /Volumes/boot

2.Raspberry PiにMicro-sdカードを入れてbootする
jessieは、いきなりDesktopが現れるので、コマンドプロンプトで最低限の設定をする。
(1)設定
sudo raspi-config
1,2,3,8をとりあえず行ない。rebootね



(2)細かい事
reboot後、コマンドラインで上がるので、ユーザIDとパスワードでloginする。
vi .exrc
set nu
set ai
set tabstop=2
同じ事を下記でも行う
sudo vi /root/.exrc
vi .bashrc
ls系のコメントを外す
mkdir bin

(3)interfacesとwpa_supplicant.confをコピーする
sudo cp /boot/interfaces /etc/network
sudo cp /boot/wpa* /etc/wpa*
sudo vi /etc/network/interfaces

IPアドレスを修正する

(4)設定
sudo raspi-config
5,8をして、再度 rebootする

(5)ファームウェアのバージョンアップ
sudo rpi-update

(6)OSのアップデート
sudo apt-get update
sudo apt-get upgrade

(7)ツール関連のインスール
sudo apt-get install autoconf libtool automake build-essential git
sudo apt-get install gcc-4.8 g++-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

(8)httpd インストール
sudo apt-get install monkey
sudo mkdir /usr/share/monkey/rdcs
sudo ln -s /usr/share/monkey/rdcs /var/www/rdcs

sudo vi /etc/monkey/monkey.conf

#Server_ScriptAlias /cgi-bin/ /usr/share/monkey/cgi-bin
Server_ScriptAlias /rdcs/ /usr/share/monkey/rdcs

#Port 2001
Port 80

sudo vi /etc/rc.local
/usr/bin/monkey -D -c /etc/monkey

(9)軽量化
$ sudo vi /etc/inittab
1:2345:respawn:/sbin/getty --noclear 38400 tty1
# 2:23:respawn:/sbin/getty 38400 tty2
# 3:23:respawn:/sbin/getty 38400 tty3
# 4:23:respawn:/sbin/getty 38400 tty4
# 5:23:respawn:/sbin/getty 38400 tty5
# 6:23:respawn:/sbin/getty 38400 tty6
(中略)
# T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

(10)リブートする
sudo reboot

で、とりあえず終わり。

Peace!!

2015年8月26日水曜日

手許のRaspberry Piに、インターネット経由でアクセスする

いや〜〜、気持ちいいです。

Raspberry Piに、インターネット経由でmac proからアクセスしています。

Macから、sshでRaspberry Piに入っています。

Macの画面とディスプレーは、Mac横のRaspberry Pi の /home/pi を ls -al した結果。
いや〜、気持ちいい(^^)v

Peace!!




Raspberry Piで、L-03Dを使ってOCN ONEに接続するYo!

Raspberry Piで、ルータ作りたいのですが、その前に

L-03DにOCNの格安SIMを挿入して、Raspberry Piからダイアルアップ接続する。


$ sudo apt-get install usb-modeswtich
$ sudo apt-get install wvdial

$ sudo vi /dev/wvdial.conf

[Dialer Defaults]
Init1 = ATZ
Init2 = ATH
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Dial Attempts = 3
Stupid Mode = 1
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
APN = lte-d.ocn.ne.jp
Modem = /dev/ttyUSB2
ISDN = 0
Phone = *99***1#
Password = <password>
Username = <username>

Carrier Check = no

Remote Name = CHAP

お味噌は、Init2 = ATH
これが無いと、L-03Dでは、通信できない。Yo!!

$ sudo wvdial
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATH
ATH
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATD*99***1#
--> Waiting for carrier.
ATD*99***1#
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Wed Aug 26 01:49:48 2015
--> Pid of pppd: 2402
--> Using interface ppp0
--> local  IP address 153.155.245.13
--> remote IP address 10.64.64.64
--> primary   DNS address 222.146.35.1

--> secondary DNS address 221.184.25.1

やめる時は、Ctrl-C

$ ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol  
          inet addr:153.251.24.70  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:23 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 

          RX bytes:1430 (1.3 KiB)  TX bytes:1469 (1.4 KiB)

これで、OK
ping で確認してね。(^^)

Peace!!

2015年8月24日月曜日

A installation of version 4.8 gcc and g++ on Raspberry Pi2

Raspberry Pi 2のCPU coreはCortex-A7ベース。

NEONというSIMD命令が使用できるようになっている。

其のためには、version 4.8 のgcc, g++が必要となる。

現時点では、4.6

そのインストールと置換

$ sudo apt-get install gcc-4.8 g++-4.8
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50


Peace!!

Install OpenCV3 on Raspberry Pi2

次に、Raspberry Pi2に、OpenCV3をインスールします。

1.事前準備
どーんと!!!

$ sudo apt-get -y install build-essential cmake cmake-qt-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools
$ sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy libpython2.6 python-dev python2.6-dev libgtk2.0-dev pkg-config
$ sudo apt-get install libswscale-dev

2.Buildの準備
$ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/3.0.0/opencv-3.0.0.zip
$ unzip opencv-3.0.0.zip
$ cd opencv-3.0.0
$ mkdir build
$ cd build

ここからが、お味噌
Raspberry Piは、armv7です。
このまま、ビルドするとarmv6のコードになります。
もっと良い、方法があると思うけど、さくっと片付けたいので、、、

まずは、コンパイラーを4.8にします。

$ sudo apt-get install gcc-4.8 g++-4.8
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

で、armv7を指定して実行すると、、、
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D ENABLE_VFPV3=ON -D ENABLE_NEON=ON -D BUILD_DOCS=OFF -D BUILD_TESTS=off -D BUILD_PERF_TESTS=OFF -D BUILD_TBB=ON -D BUILD_opencv_apps=OFF -D BUILD_opencv_gpu=OFF -D WITH_OPENCL=off -D WITH_1394=off -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_GIGEAPI=OFF -D WITH_OPENCLAMDBLAS=off -D WITH_OPENCLAMDFFT=off -D WITH_TBB=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..

これは、失敗になります。こんなエラーがでます。
../../lib/libopencv_imgproc.so.3.0.0: undefined reference to `tbb::task_group_context::cancel_group_execution()'

で、 armv6で当面します。

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON

$ make -j 4
$ sudo make install
$ sudo ldconfig
$ cd bin
./cpp-example-facedetect --cascade="../../data/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 ../../samples/data/lena.jpg

で、makeは、1時間位かかります。


Peace!!

----------------------------------------------------
これは、Raspberry Pi2用 メモ!!
-Wall -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a

g++ tesp.cpp -o test -L/path/to/the/relevant/library/ -lnameoflib

where nameoflib would be eg. tbb if the actual shared library is named libtbb.so

Mac (OSX 10.10.x Yosemite) に、OpenCV3をソースコードからC++環境 buildする (^^)

ロボットの開発に使うので、C++環境を構築します。
OpenCV3では、Cはインターフェースはありますが、メンテナンスされないとの事(泣)
Pythonインターフェースは、後で、、、
CUDAも使わない。サクッと、今回はしたいのです。
あと、自分でビルドするのは、サンプルプログラムとかを確認したいので、
本当は、もっとよい方法があるかもです。

1.環境整備

OpenCV3インストールの為に、brewを使うべく、
Macportを削除して、Homebrewをインストールします。

1.1  Macport アンインストール

sudo port -fp uninstall --follow-dependents installed
Error: No ports matched the given expression
エラーは、無視。

$sudo rm -rf /opt/local /Applications/DarwinPorts /Applications/MacPorts /Library/LaunchDaemons/org.macports.* /Library/Receipts/DarwinPorts*.pkg /Library/Receipts/MacPorts*.pkg /Library/StartupItems/DarwinPortsStartup         /Library/Tcl/darwinports1.0 /Library/Tcl/macports1.0 ~/.macports

これで、Macportを削除完了

1.2 Homebrewのインストール

1.2.1 Command Line Tools for Xcodeのインストール

xcode-select --install
xcode-select: note: install requested for command line developer tools
画面のダイアログに従ってインストールする。

1.2.2 Homebrewのインストール

Homebrewのホームページにインストールコマンドが書いてあるので、それをターミナルにコピペ
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
あとは、画面の指示に従う。5分位もかからないYo.
ちゃんとインストール出来たかは、
brew doctor
で確かめるよ。(^^)
Unexpected dylibs:
    /usr/local/lib/JPKIPKCS11.dylib

    /usr/local/lib/JPKIServiceAPI.dylib

って、メッセージでたので、とりあえずmvした。で、、、
$brew doctor
Your system is ready to brew.

となった。
それから、追加でインストール
$ brew install cmake
$ brew install pkg-config

1.2.3 opencv サックとインストール

これは、参考までです。

$ brew tap homebrew/science
$ brew install opncv3

でいろいろ処理して、こんな感じで終了でします。
This formula is keg-only, which means it was not symlinked into /usr/local.

opencv3 and opencv install many of the same files.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/opencv3/lib
    CPPFLAGS: -I/usr/local/opt/opencv3/include

If you need Python to find bindings for this keg-only formula, run:
  echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth
==> Summary
🍺  /usr/local/Cellar/opencv3/3.0.0: 246 files, 103M

1.2.4 opencv3 ビルドとインストール

ここからが本番。
CUDAは、使いません。念の為に

$ mkdir ~/lib
$ git clone https://github.com/Itseez/opencv.git
$ cd opencv
$ git checkout tags/3.0.0
$ mkdir build
$ cd build
$ cmake -D WITH_CUDA=OFF -D CMAKE_INSTALL_PREFIX=~/opencv/build -D CMAKE_BUILD_TYPE=RELEASE ..
$ make
$ make install
$ cp lib/pkgconfig/opencv.pc /usr/local/lib/pkgconfig/opencv3.pc
$ vi ~/.bashrc
    export DYLD_LIBRARY_PATH=$HOME/lib/opencv/build/lib:$DYLD_LIBRARY_PATH
編集して、保存

$ source ~/.bashrc


1.2.5 opencv3 テスト

これで、とりあえず完了
で、テストをする。

$ cd ../samples/cpp

$ g++ -ggdb `pkg-config --cflags --libs opencv3` facedetect.cpp -o /tmp/test && /tmp/test
はい、完成!!

Peace!!