20170505-title02


前回のapacheのインストール、間違ってはいない。

間違ってはいない、が。

どうやら、ソースからコンパイルしたapacheがある状態でPHP7をaptリポジトリから入れると面倒臭いことになる。つ~か、PHP7がインストール済みのapacheを認識せずに同じリポジトリ上の、つまり古いapache(2.4.10)を追加インストールしちゃうのだ。

多分PHPもソースからコンパイルするのが正しいのだろうけれど、調べてみると色々なライブラリを事前にコンパイルしておく必要があるみたい。これもちょっと、いや、かなり面倒臭い。

そんなわけで、apacheのインストールからやり直す。

ちなみにOSバックアップイメージから、MySQLをインストールした状態に戻してから以下作業を開始する。





apache2.4.25をaptリポジトリからインストール

これが正しい方法かどうかわからないんだけど、apacheの最新(2.4.25)はstretchにあるようだ。

以下のようにsource.listを書き換えてリストを更新後にapt-getでインストールする。

$ sudo vim /etc/apt/sources.list
 
#deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi #←コメントアウト
deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi #←追加
 
$ sudo apt-get update
$ sudo apt-get install apache2

これで、apacheのインストールは完了だ。以下で入ったapacheのバージョンを確認。

$ apache2 -v
Server version: Apache/2.4.25 (Raspbian)
Server built:   2017-01-25T22:59:26

は~、こんなに簡単に入るのね。。。もう、前回のapacheコンパイルしている時間とか、どうしてくれるのか。まぁ、勉強にはなったけど。


PHP7.1.4をaptリポジトリからインストール

PHPの最新版7.1.4はstretchリポジトリには存在しないみたい。

しかし、MySQLの時と同様、ここにも神がいた。

上記のページをもとに実際にPHP7をインストールしている方もいらっさいました。

先人の知恵をお借りして、phpをインストールしていくことにする。

$ sudo vim /etc/apt/sources.list
 
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi #←コメントイン
#deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi #←コメントアウト
deb http://repozytorium.mati75.eu/raspbian jessie-backports main contrib non-free #←追加
 
 
$ sudo gpg --keyserver pgpkeys.mit.edu --recv-key CCD91D6111A06851
gpg: ディレクトリー「/root/.gnupg」ができました
gpg: 新しい構成ファイル「/root/.gnupg/gpg.conf」ができました
 :
 :
gpg:     処理数の合計: 1
gpg:           読込み: 1  (RSA: 1)
 
$ sudo gpg --armor --export CCD91D6111A06851 | apt-key add -
ERROR: This command can only be used by root.

ありゃ、sudoじゃダメらしい。rootにスイッチする。

$ su -
 
パスワード:
su: 認証失敗

ヤバい、rootのパスワード忘れたwwwww

というわけで、rootのパスワードを再設定して再度qpgを実行。

$ sudo passwd root
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
 
$ su -
パスワード:
 
# gpg --armor --export CCD91D6111A06851 | apt-key add -
OK

OK出ました。そしたらrootから出てupdate。

# exit
ログアウト
 
$ sudo apt-get update

これでリポジトリリストが更新された。

さて、PHP7.1関連のパッケージってどれくらいあるんでしょ?

$ sudo apt-cache policy php7\.1.* | grep php
php7.1-simplexml:
php7.1-bz2:
php7.1-readline:
php7.1-pdo-firebird:
php7.1-odbc:
php7.1-sysvshm:
php7.1-fpm:
php7.1-xmlwriter:
php7.1-sybase:
php7.1-phar:
php7.1-intl:
php7.1-calendar:
php7.1-wddx:
php7.1-ftp:
php7.1-common:
php7.1-dba:
php7.1-gettext:
php7.1-pdo-odbc:
php7.1-mysqlnd:
php7.1-posix:
php7.1-pdo-sqlite:
php7.1-tokenizer:
php7.1-dev:
php7.1-fileinfo:
php7.1-mcrypt:
php7.1-pdo-dblib:
php7.1-gd:
php7.1-pgsql:
php7.1-iconv:
php7.1-mysqli:
php7.1-soap:
php7.1-ldap:
php7.1-ctype:
php7.1-exif:
php7.1-curl:
php7.1-dom:
php7.1-xml:
php7.1-sysvmsg:
php7.1-xmlreader:
php7.1-pdo-pgsql:
php7.1-cgi:
libapache2-mod-php7.1:
php7.1-enchant:
php7.1-tidy:
php7.1-xsl:
php7.1-mbstring:
php7.1-cli:
php7.1-sockets:
php7.1-recode:
php7.1-mysql:
php7.1-bcmath:
libphp7.1-embed:
php7.1-pspell:
php7.1-snmp:
php7.1-gmp:
php7.1-pdo-mysql:
php7.1-shmop:
php7.1-pdo:
php7.1-interbase:
php7.1:
php7.1-sqlite3:
php7.1-opcache:
php7.1-json:
php7.1-phpdbg:
php7.1-imap:
php7.1-zip:
php7.1-xmlrpc:
php7.1-sysvsem:

・・・68個ですかね。

良く分からんので、全部入れますw

$ sudo apt-get install php7.1 php7.1-simplexml php7.1-bz2 php7.1-readline php7.1-pdo-firebird php7.1-odbc php7.1-sysvshm php7.1-fpm php7.1-xmlwriter php7.1-sybase php7.1-phar php7.1-intl php7.1-calendar php7.1-wddx php7.1-ftp php7.1-common php7.1-dba php7.1-gettext php7.1-pdo-odbc php7.1-mysqlnd php7.1-posix php7.1-pdo-sqlite php7.1-tokenizer php7.1-dev php7.1-fileinfo php7.1-mcrypt php7.1-pdo-dblib php7.1-gd php7.1-pgsql php7.1-iconv php7.1-mysqli php7.1-soap php7.1-ldap php7.1-ctype php7.1-exif php7.1-curl php7.1-dom php7.1-xml php7.1-sysvmsg php7.1-xmlreader php7.1-pdo-pgsql php7.1-cgi libapache2-mod-php7.1 php7.1-enchant php7.1-tidy php7.1-xsl php7.1-mbstring php7.1-cli php7.1-sockets php7.1-recode php7.1-mysql php7.1-bcmath libphp7.1-embed php7.1-pspell php7.1-snmp php7.1-gmp php7.1-pdo-mysql php7.1-shmop php7.1-pdo php7.1-interbase php7.1-sqlite3 php7.1-opcache php7.1-json php7.1-phpdbg php7.1-imap php7.1-zip php7.1-xmlrpc php7.1-sysvsem
 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
Note, selecting 'php7.1-xml' instead of 'php7.1-simplexml'
Note, selecting 'php7.1-interbase' instead of 'php7.1-pdo-firebird'
Note, selecting 'php7.1-common' instead of 'php7.1-sysvshm'
Note, selecting 'php7.1-xml' instead of 'php7.1-xmlwriter'
Note, selecting 'php7.1-common' instead of 'php7.1-phar'
Note, selecting 'php7.1-common' instead of 'php7.1-calendar'
Note, selecting 'php7.1-xml' instead of 'php7.1-wddx'
Note, selecting 'php7.1-common' instead of 'php7.1-ftp'
Note, selecting 'php7.1-common' instead of 'php7.1-gettext'
Note, selecting 'php7.1-odbc' instead of 'php7.1-pdo-odbc'
Note, selecting 'php7.1-mysql' instead of 'php7.1-mysqlnd'
Note, selecting 'php7.1-common' instead of 'php7.1-posix'
Note, selecting 'php7.1-sqlite3' instead of 'php7.1-pdo-sqlite'
Note, selecting 'php7.1-common' instead of 'php7.1-tokenizer'
Note, selecting 'php7.1-common' instead of 'php7.1-fileinfo'
Note, selecting 'php7.1-sybase' instead of 'php7.1-pdo-dblib'
Note, selecting 'php7.1-common' instead of 'php7.1-iconv'
Note, selecting 'php7.1-mysql' instead of 'php7.1-mysqli'
Note, selecting 'php7.1-common' instead of 'php7.1-ctype'
Note, selecting 'php7.1-common' instead of 'php7.1-exif'
Note, selecting 'php7.1-xml' instead of 'php7.1-dom'
Note, selecting 'php7.1-common' instead of 'php7.1-sysvmsg'
Note, selecting 'php7.1-xml' instead of 'php7.1-xmlreader'
Note, selecting 'php7.1-pgsql' instead of 'php7.1-pdo-pgsql'
Note, selecting 'php7.1-common' instead of 'php7.1-sockets'
Note, selecting 'php7.1-mysql' instead of 'php7.1-pdo-mysql'
Note, selecting 'php7.1-common' instead of 'php7.1-shmop'
Note, selecting 'php7.1-common' instead of 'php7.1-pdo'
Note, selecting 'php7.1-common' instead of 'php7.1-sysvsem'
以下の追加パッケージがインストールされます:
  aspell aspell-en autoconf automake autopoint autotools-dev debhelper dh-php dictionaries-common emacsen-common enchant firebird2.5-common
  firebird2.5-common-doc fontconfig-config fonts-dejavu-core freetds-common gettext gettext-base hunspell-en-us intltool-debian libaspell15
  libasprintf-dev libasprintf0c2 libc-client2007e libcroco3 libenchant1c2a libfbclient2 libfontconfig1 libgd3 libgettextpo-dev libgettextpo0
  libhunspell-1.3-0 libjbig0 liblist-moreutils-perl libltdl-dev libltdl7 libmail-sendmail-perl libmcrypt4 libodbc1 libonig2 libpci3
  libperl4-corelibs-perl libperl5.20 libpq5 libqdbm14 librecode0 libsensors4 libsnmp-base libsnmp30 libssl-dev libssl-doc libsybdb5
  libsys-hostname-long-perl libtidy5 libtiff5 libtool libunistring0 libvpx1 libwebp5 libxmlrpc-epi0 libxpm4 libxslt1.1 libzip4 lsof mlock php-common
  php-pear php5-cli php5-common php5-json php5-readline pkg-php-tools po-debconf shtool snmp xml2
提案パッケージ:
  aspell-doc spellutils autoconf-archive gnu-standards autoconf-doc dh-make wordlist gettext-doc hunspell openoffice.org-hunspell
  openoffice.org-core uw-mailutils libenchant-voikko libgd-tools libtool-doc libmcrypt-dev mcrypt libmyodbc odbc-postgresql tdsodbc unixodbc-bin
  lm-sensors snmp-mibs-downloader automaken gfortran fortran95-compiler gcj-jdk php5-dev php5-user-cache libmail-box-perl
推奨パッケージ:
  php-readline
以下のパッケージが新たにインストールされます:
  aspell aspell-en autoconf automake autopoint autotools-dev debhelper dh-php dictionaries-common emacsen-common enchant firebird2.5-common
  firebird2.5-common-doc fontconfig-config fonts-dejavu-core freetds-common gettext gettext-base hunspell-en-us intltool-debian
  libapache2-mod-php7.1 libaspell15 libasprintf-dev libasprintf0c2 libc-client2007e libcroco3 libenchant1c2a libfbclient2 libfontconfig1 libgd3
  libgettextpo-dev libgettextpo0 libhunspell-1.3-0 libjbig0 liblist-moreutils-perl libltdl-dev libltdl7 libmail-sendmail-perl libmcrypt4 libodbc1
  libonig2 libpci3 libperl4-corelibs-perl libperl5.20 libphp7.1-embed libpq5 libqdbm14 librecode0 libsensors4 libsnmp-base libsnmp30 libssl-dev
  libssl-doc libsybdb5 libsys-hostname-long-perl libtidy5 libtiff5 libtool libunistring0 libvpx1 libwebp5 libxmlrpc-epi0 libxpm4 libxslt1.1 libzip4
  lsof mlock php-common php-pear php5-cli php5-common php5-json php5-readline php7.1 php7.1-bcmath php7.1-bz2 php7.1-cgi php7.1-cli php7.1-common
  php7.1-curl php7.1-dba php7.1-dev php7.1-enchant php7.1-fpm php7.1-gd php7.1-gmp php7.1-imap php7.1-interbase php7.1-intl php7.1-json php7.1-ldap
  php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-odbc php7.1-opcache php7.1-pgsql php7.1-phpdbg php7.1-pspell php7.1-readline php7.1-recode
  php7.1-snmp php7.1-soap php7.1-sqlite3 php7.1-sybase php7.1-tidy php7.1-xml php7.1-xmlrpc php7.1-xsl php7.1-zip pkg-php-tools po-debconf shtool
  snmp xml2
アップグレード: 0 個、新規インストール: 115 個、削除: 0 個、保留: 6 個。
31.5 MB のアーカイブを取得する必要があります。
この操作後に追加で 105 MB のディスク容量が消費されます。
続行しますか? [Y/n]

どうやら指定したいくつかのパッケージは代替に置き換わるのね。

あと気になるのが、追加パッケージでphp5と付いてるヤツ。

う~ん、まっいっかw「Y」押しちゃうわ。

というわけで、数分待ってPHPのバージョンを確認。

$ php -v
PHP 7.1.4-1~bpo8+1 (cli) (built: Apr 13 2017 04:06:53) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.4-1~bpo8+1, Copyright (c) 1999-2017, by Zend Technologies

はは、やったね。


動作確認

apacheを再起動して、DocumentRootにtest.phpを作成してブラウザーからアクセスしてみる。

$ sudo service apache2 restart
$ cd /var/www/html
$ sudo vim test.php
 
<?php
        phpinfo();
?>

01


さて、PHPからMySQLへはちゃんと繋がるんだろうか。

DB作ってユーザー作ってテーブル作ってデータを入れてみる。

$ mysql -u root -p
Enter password:
 
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)
 
mysql> grant all privileges on testdb.* to 'testuser'@'localhost' identified by 'testpassword';
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
mysql> exit;
Bye
 
$ mysql -u testuser -p
Enter password:
 
mysql> connect testdb;
Current database: testdb
 
mysql> create table testtbl (
    -> id int not null auto_increment
    -> ,name varchar(100)
    -> ,insuser char(10) not null
    -> ,insdatetime timestamp not null default current_timestamp
    -> ,upduser char(10) not null
    -> ,upddatetime timestamp not null default current_timestamp on update current_timestamp
    -> ,primary key( id )
    -> )
    -> ;
Query OK, 0 rows affected (4.41 sec)
 
mysql> exit;
Bye
 
$ vim ins-testtbl.sql
 
insert into testtbl(name,insuser,upduser) values('あああああ','testuser01','testuser01');
 
$ mysql -u testuser -p
Enter password:
 
mysql> connect testdb;
Current database: testdb
 
mysql> source ins-testtbl.sql;
Query OK, 1 row affected (0.02 sec)
 
mysql> select * from testtbl;
+----+-----------------+------------+---------------------+------------+---------------------+
| id | name            | insuser    | insdatetime         | upduser    | upddatetime         |
+----+-----------------+------------+---------------------+------------+---------------------+
|  1 | あああああ      | testuser01 | 2017-05-06 04:31:01 | testuser01 | 2017-05-06 04:31:01 |
+----+-----------------+------------+---------------------+------------+---------------------+
1 row in set (0.00 sec)
 
mysql> exit;
Bye

そしたら、/var/www/htmlの下に、dbに接続してselectして取得したレコードを表示してみる、っていうphpファイルを置く。

$ cd /var/www/html
$ sudo vim testdb.php
 
<?php
 
    try{
        // MySQLへ接続する
        $db = new PDO("mysql:dbname=testdb;host=localhost", "testuser", "testpassword");
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
        // クエリを送信する
        $sql = $db->prepare( "SELECT * FROM testtbl" );
        $sql->execute();
 
        //結果セットを取得・表示する
        $all = $sql->fetchAll();
        foreach ($all as $data){
            var_dump($data);
        }
 
        $db = null;
    }catch(PDOException $e){
        echo $e->getMessage();
        exit;
    }
?>

そんじゃブラウザーから実行してみますか。


02

dbに接続してselectして取得したレコードを表示できましたね。
どうやら動いてそう。いいのかな。


まとめ

これでラズパイ上に、apache+php+mysqlの最新バージョンを構築できました。


さて、次はラズパイ上でjava+tomcat+GitBucketかな。

そんでもって次はラズパイ上でruby+Redmineかな。


あれ?このラズパイ上でphp使う予定、無いぞ。