title

Raspberry PI 3

前へ


2019-01-25  「Kermitを使う」
参考:http://www.holgerschurig.de/en/serial-setup-with-ckermit/
   Serial setup with C-Kermit

   http://www.columbia.edu/kermit/ck90.html
   C - K e r m i t   9 . 0

   http://www.kermitproject.org/index.html
   The Kermit Project

   http://www.kermitproject.org/ck90.html
   C-Kermit 9.0

mminicomがちょっと使いにくいので懐かしいkermitを使ってみた。
2011年にオープンソースになってBSDライセンスになっている。
ーーーーーーー
As of version 9.0, C-Kermit has an Open Source license, the Revised 3-Clause BSD License.
Everybody can use it as they wish for any purpose, including redistribution and resale.
It may be included with any operating system where it works or can be made to work,
including both free and commercial versions of Unix and Hewlett-Packard (formerly DEC) VMS (OpenVMS).
Technical support will be available from Columbia University only through 30 June 2011.
ーーーーーーー
同様に組み込みむけに、E-Kermitというのもある。

usbシリアルケーブルをUSBに差し込み、/dev/ttyUSB0を確認。

(1) sudo apt install ckermit
(2) nano .kermrc
---
set line /dev/ttyUSB0
set baud 115200
set handshake none
set flow-control none
set carrier-watch off
set escape-character ^]      <<===デフォルトはCtrl+\
connect
---
(3) kermit
---
?OpenSSL libraries do not match required version:
  . C-Kermit built with OpenSSL 1.0.2j  26 Sep 2016
  . Version found  OpenSSL 1.0.2q  20 Nov 2018
  OpenSSL versions prior to 1.0.0 must be the same.
  Set LD_LIBRARY_PATH for OpenSSL 1.0.2j  26 Sep 2016.
  Or rebuild C-Kermit from source on this computer to make versions agree.
  C-Kermit makefile target: linux+krb5+openssl
  Or if that is what you did then try to find out why
  the program loader (image activator) is choosing a
  different OpenSSL library than the one specified in the build.

  All SSL/TLS features disabled.

Connecting to /dev/ttyUSB0, speed 115200
 Escape character: Ctrl-] (ASCII 29, GS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------

Raspbian GNU/Linux 9 xxhostxx ttyS0  <<<====/dev/ttyUSB0接続先のRaspberry pi端末
xxhostxx login: <<<<====ここでCtrl+] キーc押す
(Back at xxhost00)
----------------------------------------------------
C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, for Linux+SSL+KRB5
 Copyright (C) 1985, 2011,
  Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/home/pi/) C-Kermit>exit <<<====kermit コマンドモードになる
Closing /dev/ttyUSB0...OK
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
utf-8漢字が表示される。

(4) kermit<==USBシリアルケーブル==>kermitでファイル転送
  connect 状態でリモートにログインする。

  sudo apt install ckermit
  kermit
  (xxx) C-Kermit>server    <<===server [Enter]
  Ctrl+] キーc

  コマンドモードになる。
  remote dir {dir} ---- rdir xxxx でもよい
  remote cd dir    ---- rcd xxxx でもよい
  get ファイル名     ---- ファイル受信
  put ファイル名     ---- ファイル送信
  bye              ---- kermit終了とログアウト
2019-01-24 「DNS - unbound, DHCP - isc-dhcp-server」
unbound インストール
  参考:http://gihyo.jp/admin/serial/01/ubuntu-recipe/0386
    第386回 Unboundでお手軽に家庭内D NSサーバーを作ろう

(1)sudo apt-get install unbound

以下のファイルを追加作成する

(2) sudo nano /etc/unbound/unbound.conf.d/server.conf
  ------------
  server:
    interface: 0.0.0.0
    access-control: 127.0.0.1/32 allow
    access-control: 192.168.xx.00/24 allow
    private-domain: "home."

 remote-control:
    control-enable: yes
    control-interface: 127.0.0.1
    server-key-file: "/etc/unbound/unbound_server.key"
    server-cert-file: "/etc/unbound/unbound_server.pem"
    control-key-file: "/etc/unbound/unbound_control.key"
    control-cert-file: "/etc/unbound/unbound_control.pem"
 ------------
  どこからの問い合わせかを設定する。
    リモートコントロールはyes/noを設定しないとだめになっている。

(3)sudo nano /etc/unbound/unbound.conf.d/forward.conf
  ---
  server:
    local-data: "aa1.home. IN A 192.168.1.10"
    local-data: "aa2.home. IN A 192.168.1.11"
    local-data: "aa3.home. IN A 192.168.1.12"
  ---

(4)sudo nano /etc/unbound/unbound.conf.d/reverse.conf
  ---
  server:
    local-data-ptr: "102.168.1.10 aa1.home."
    local-data-ptr: "192.168.1.11 aa2.home."
    local-data-ptr: "192.168.1.12 aa3.home."
  ----

(5)ファイアーウォールの設定に追加
  # DNS
  udp,tcp 53 ACCEPT

再起動
(6)sudo service unbound restart

(7)sudo ss -lntp
  53, 8953 ポートが開いていること確認

(8)cat /etc/resolv.conf
  ---
  nameserver 127.0.0.1
  ---
  nameserverを確認。

(9)host aa1.home
  aa1.home has address 192.168.1.10

お試しドメイン
(10) sudo unbound-control local_data "open.home. IN A 192.168.1.100"
  ok
(11) host open.home
  open.home has address 192.168.1.100
 リブートしたらなくなる。決定時はファイルに書き込む。
 試せるのがいいのでunboundにした。
 local_dataはアンダースコア、ファイルに書き込むのはハイフン。

(12)制御
 sudo service unbound status
 sudo service unbound stop
 sudo service unbound start

isc-dhcp-serverインストール
 参考:http://ryobeam.hateblo.jp/entry/2016/06/23/193809
  R-Y-O の備忘録 トップ > jessie > Raspbian: DHCP サーバーの構築 ISC DHCP

(13)sudo apt-get install isc-dhcp-server

(14) sudo nano /etc/dhcp/dhcpd.conf
  ---
  # option definitions common to all supported networks...
  option domain-name "local";
  option domain-name-servers 192.168.1.99, 192.168.1.1;
  #----------------ローカルにDNSサーバがあれば先に定義、後ろはルータのアドレスにする。
  # 12h
  default-lease-time 43200;
  # 48h
  max-lease-time 172800;
  subnet 192.168.1.0 netmask 255.255.25.0 {
    range 192.168.1.190 192.168.1.220;
    option broadcast-address 192.168.1.255;
    option routers 192.168.1.1;
  }
----追加する

(15)/etc/default/isc-dhcp-server ファイルを修正。
  ----
  INTERFACESv4="eth0"
  ---

(16)ファイアーウォールの設定に追加
  # DHCP
  udp 67,68 ACCEPT

(17)制御
  sudo systemctl status isc-dhcp-server
  最初は、多分設定していないので失敗する。している。
  sudo systemctl restart isc-dhcp-server
  で成功する。
    リブートしても成功するかを確認する。成功しないので参考したページにはsleepを入れるとある、
    同様に入れた。
ーーー/etc/init.d/isc-dhcp-server

        sleep 3 <<==追加

        touch /var/lib/dhcp/$NAME.leases

        start-stop-daemon --start --quiet --pidfile $PIDFILE \
                --exec /usr/sbin/dhcpd -- $VERSION -q -cf $CONF $INTERFACES
        sleep 2
ーーー
2019-01-10     「mysql, sqlite3, PHP7 インストール」
Mysql(mariadb)、Sqlite3、PHP7.0のインストール。

(1)Mysql
 sudo apt install mysql-server 
 sudo sysemctl enable mysql
 sudo systemctl restart mysql
  sudo /usr/bin/mysql_secure_installation
  [Enter] n [Enter] y [Enter] y [Enter] y [Enter] y [Enter] 

  sudo mysql -u root
  コマンド入力状態になる。
  以下のコマンドでルートパスワードの設定をする。
  
  SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mysqlpasswd');
  update mysql.user set plugin=null where user='root';
  SELECT * from mysql.user where User="root"\G
  quit

  参照:MariaDB accepts any password ーー 
   https://unix.stackexchange.com/questions/385202/mariadb-accepts-any-password
   より
  mysqlpasswdはmysqlのパスワード。SELECTの最後は\G で縦標示になるのでそのままで入力する。
  plugin: のところは:の次は何もないこと。pluginをNULLにしないとsudoでパスワードなしになってしまう。
  これは好みです。

  (!!!)カラムがいっぱいある場合の表示をきれいにするには、
  less コマンドで
  $ sudo apt install less
  $ mysql --pager='less -S' -u root -p
  できれいに表示される。
 ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
 rootパスワードを設定するとログローテートでエラーが出る。
 /etc/logrotate.d/mysql-server にあるmysqladminの引数 --defaults-file=/etc/mysql/debian.cnf
  のファイルにpassword = に上記で設定したパスワードを設定すること。
 ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎

 sudo mysql -u root -pmysqlpasswd
  -pパスワード はヒストリに残るのでいい方法ではない。

  show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
  文字コードを確認する。

  テスト用のデータベース、ユーザを作る。

  create database db_test;
  create user 'tuser'@'localhost' identified by 'userpasswd';
  grant all privileges on db_test.* to 'tuser'@'localhost';
  quit

(2)Sqlite3
 sudo apt install sqlite3

(3)PHP7 インストール
 sudo apt install -y php7.0
 nano phpcli.php
---
#!/usr/bin/env php
<?php
 $now= new DateTime('now', new DateTimeZone('Asia/Tokyo'));
 $strnow= $now->format('Y/m/d H:i:s');
 echo $strnow;
?>
----
 chmod +x phpcli.php
 ./phpcli.php
2018/11/15 10:10:06
----
 sudo apt install -y php7.0-mysql php7.0-sqlite3

 nano mysql.php
----
#!/usr/bin/env php
<?php
try{
    $dbh = new PDO( 'mysql:dbname=kbdb_new;host=localhost', 'hddwebu', 'hddwebpp');
    print('');
    if ($dbh == null){
        print('---NG---');
    }else{
        print('===OK===');
    }
    print('');
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}
$dbh = null;
?>
----
 chmod +x mysql.php
 ./mysql.php
----
===OK===
----
2019-01-05  「Apacheでユーザ権限でPHP,CGI実行」
●【ユーザ権限でPHP実行】
sudo apt install php7.0-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo a2enmod userdir

sudo cp /etc/php/7.0/fpm/pool.d/www.conf /etc/php/7.0/fpm/pool.d/gozira.conf
sudo nano /etc/php/7.0/fpm/pool.d/gozira.conf
--
; pool name ('www' here)
[gozira]
 ;;;;
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = gozira
group = gozira
 ;;;;
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/fpm-gozira.sock
 ;;;;
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = gozira
listen.group = gozira
;listen.mode = 0660
 ;;;;
---
★apacheの動作ユーザにUSER,GROUPを修正する。listen.owner, listen.groupも同じくする。
☆listen socketの名前をphpを動作させるユーザ毎に変える。
☆(apacheユーザの設定をいじらない場合は、goziraがwww-data)

sudo cp /etc/php/7.0/fpm/pool.d/gozira.conf /etc/php/7.0/fpm/pool.d/kuzira.conf
sudo nano /etc/php/7.0/fpm/pool.d/kuzira.conf
---
; pool name ('www' here)
[kuzira]
 ;;;;
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = kuzira
group = kuzira
 ;;;;
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/fpm-kuzira.sock
 ;;;;
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = gozira
listen.group = gozira
;listen.mode = 0660
 ;;;;
--
★別ユーザも実行権を与える場合は、user =, group =, listen = の名前を変える。
☆listen.user =, listen.group = はapache動作のユーザのまま。 (ww-dataであればはそのまま)

sudo nano /etc/apache2/mods-enabled/userdir.conf
---
        <Directory "/home/gozira/www">
                <FilesMatch \.php$>
                     SetHandler "proxy:unix:/var/run/php/fpm-gozira.sock|fcgi://localhost/"
                </FilesMatch>
        </Directory>
        <Directory "/home/kuzira/www">
		AllowOverride All <==== Wordpressを入れるところにmod_rewrite を使うので追加すること。
                <FilesMatch \.php$>
                     SetHandler "proxy:unix:/var/run/php/fpm-kuzira.sock|fcgi://localhost/"
                </FilesMatch>
        </Directory>
---追加
★.htaccessファイルを使う場合の注意★
☆php動作させるユーザを作成する時、GIDをApache動作ユーザにすると、
☆echo "kuzira:kuzira-passwd:KuziraユーザUID:ApacheユーザGID:,,,:/home/kuzira:/bin/bash"|sudo newusers
☆chmod 640 /~~~/www/.htaccess にする。
☆
☆php動作させるユーザを作成する時、GIDをユーザにすると、
☆echo "kuzira:kuzira-passwd:KuziraユーザUID:KuziraユーザGID:,,,:/home/kuzira:/bin/bash"|sudo newusers
☆chmod 644 /~~~/www/.htaccess にする。
☆
☆/etc/php/7.0/fpm/pool.d/www.confのユーザUser,Groupも作成時のUID,GIDに合わせておくこと。

sudo systemctl restart apache2
sudo systemctl restart php7.0-fpm
★データベースmysql(mariadb)をインストールした後には必ずphp7.0-fpmサービスの再起動を行うこと。
☆PDOが使えなくなるので。おかしいと悩んでしまう。

●【ユーザ権限でCGI実行】
 PHP以外のプログラムで動作するCGIのための設定。
 参照:SuexecUserGroup configured, but suEXEC is disable (https://www.virtualmin.com/node/41052)

(1)sudo a2enmod userdir
   sudo apt-get install apache2-suexec-custom
   sudo chmod 4755 /usr/lib/apache2/suexec-custom

   ScriptAliasMatch ^/~([a-zA-Z0-9_-]+)/cgi-bin(.*) /home/$1/www/cgi-bin$2
   エリアスマッチで置きかえるとユーザ毎の実行権が得られない。

(2)sudo nano /etc/apache2/suexec/{apacheユーザ名}
 /home/{apacheユーザ名}
  www
 ーーーー1行目ユーザホームディレクトリパス指定
 ーーーー2行目ホームディレクトリよりのドキュメントルート
     これで指定しないとアクセスできない

(3)sudo nano /etc/apache2/mods-available/userdir.conf
   ---
<IfModule mod_userdir.c>
        UserDir www
        UserDir disabled root

        <Directory /home/*/www>
                AllowOverride FileInfo AuthConfig Limit
                Options MultiViews  SymLinksIfOwnerMatch IncludesNoExec
                Require method GET POST OPTIONS
        </Directory>

        <Directory "/home/*/www/cgi-bin">
                AllowOverride None
                Options +ExecCGI
                AddHandler cgi-script .cgi .pl .sh .py
        </Directory>

</IfModule>
---
特に追加するものはなし。普通の設定。
2018-01-05      「ファイアーウォールの設定」
(1)格納ディレクトリの作成
   sudo mkdir /etc/raspai
   (作成していなければ作成)

(2)sudo nano /etc/raspai/iptables.sh
  ---
#!/bin/sh
#サービスを許可したい範囲(192.168.1.0/24)
thost='192.168.1.0/24'

# 一旦初期化
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -t raw -F
/sbin/iptables -t raw -X
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -F
/sbin/iptables -t mangle -X

# デフォルト
/sbin/iptables -P INPUT DROP
/sbin/ip6tables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/ip6tables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/ip6tables -P FORWARD DROP
/sbin/iptables -N TCP
/sbin/iptables -N TCP80

/sbin/iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# 自ホストからのアクセスをすべて許可
/sbin/iptables -A INPUT -i lo -j ACCEPT

/sbin/iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

/sbin/iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

/sbin/iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j DROP
/sbin/iptables -A INPUT -p tcp --sport 20:443 -j DROP
/sbin/iptables -A INPUT -p tcp --sport 497:563 -j DROP
/sbin/iptables -A INPUT -p tcp --sport 587 -j DROP
/sbin/iptables -A INPUT -p tcp --sport 873 -j DROP
/sbin/iptables -A INPUT -p tcp --sport 989:995 -j DROP

/sbin/iptables -A INPUT -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
/sbin/iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
/sbin/iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
/sbin/iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable

/sbin/iptables -A TCP -p tcp -m ecn --ecn-tcp-ece -j DROP
/sbin/iptables -A TCP -p tcp -m ecn --ecn-tcp-cwr -j DROP
/sbin/iptables -A TCP -p tcp -s $thost --dport 22 -j ACCEPT
/sbin/iptables -A TCP -p tcp -s $thost --dport 25 -j ACCEPT
/sbin/iptables -A TCP -p tcp -s $thost --dport 110 -j ACCEPT
/sbin/iptables -A TCP -p tcp -s $thost --dport 995 -j ACCEPT
/sbin/iptables -A TCP -p tcp -s $thost --dport 465 -j ACCEPT
/sbin/iptables -A TCP -p tcp -s $thost --dport 587 -j REJECT

# www-server
/sbin/iptables -A TCP -p tcp --dport 80 -j TCP80
/sbin/iptables -A TCP -p tcp --dport 443 -j TCP80
/sbin/iptables -A TCP80 -m recent --name conn80 --rttl --rcheck --seconds 5 --hitcount 10 -j DROP
/sbin/iptables -A TCP80 -m recent --name conn80 --rttl --rcheck --seconds 1800 --hitcount 11 -j DROP
/sbin/iptables -A TCP80 -m recent --name conn80 --set -j ACCEPT
 ---

(3)sudo chmod +x /etc/raspai/iptables.sh
(4)recentパラメータ設定
/etc/modprobe.d/ディレクトリの下 
/etc/modprobe.d/xt_recent.conf ない時作る。名前はわかりやすいもの。
ーー
options xt_recent ip_pkt_list_tot=40
options xt_recent ip_list_gid=4
ーー
man iptables-extensions より
ip_list_tot=100
テーブル単位の記録アドレス数。
ip_pkt_list_tot=20
アドレス単位の記録パケット数。
ip_list_hash_size=0
ハッシュテーブルサイズ。 0 は ip_list_tot に基づいて計算することを意味する。 デフォルトは 512。
ip_list_perms=0644
/proc/net/xt_recent/* ファイルのアクセス許可モード。
ip_list_uid=0
/proc/net/xt_recent/* ファイルの数値 ID での所有者。
ip_list_gid=0
/proc/net/xt_recent/* ファイルの数値 ID でのグループ所有者。
いるパラメータは追加する。なお、gid=4はadm。用途の合わせて設定する。
...
動作時のパラメータは /sys/module/xt_recent/parameters の下にある。
ip_list_tot
ip_pkt_list_tot
ip_list_hash_size
ip_list_perms
ip_list_uid
ip_list_gid
cat /sys/module/xt_recent/parameters/* で見る。

-m recent --name namae 名前 の設定されるファイルは /proc/net/xt_recent/* にできる。
cat /proc/net/xt_recent/xxxx で見える。
iptablesの -m recent がないと /sys/module/xt_recent, /proc/net/xt_recent ディレクトリはできない。
また、上記のShellスクリプトを実行するとクリアされる。

(5)sudo nano /etc/rc.local
   ---
   /etc/raspai/iptables.sh
   ---
  exitの前に追加する
(6)sudo /etc/raspai/iptables.sh
  実行しておく
(7)定義の確認
  sudo iptables-save

参考:Simple stateful firewall (https://wiki.archlinux.org/index.php/Simple_stateful_firewall)
2018-11-16  「HTTPSインストール」
参考:https://wiki.debian.org/Self-Signed_Certificate
  Self-Signed_Certificate
より

rasbian-stretch OS
apache2, mod-ssl, sites-default-sslはインストール済とする。

---- setup_ssl.sh -------
#!/bin/bash
#
# ========= 簡単HTTPS キーファイル作成 ===================
#
# 使い方: ./setup_ssl.sh {ドメイン名}
# ---
shdir="${0%/*}"
pushd $shdir

cp /etc/ssl/openssl.cnf .
HOST_DOMAIN=$1
sed -i -e "/\[ v3_ca \]/a subjectAltName = @alt_names" -e "/\[ v3_ca \]/i [ alt_names ] \nDNS.1 = ${HOST_DOMAIN}\n" ./openssl.cnf
# [ v3_ca ]セクションに、 subjectAltName = @alt_names を追加する。
# openssl.cnf ファイルに
# [ alt_names ]
# DNS.1 = ドメイン名
# を追加する。

openssl req -new -x509 -days 3650 -nodes -out domain.crt -keyout domain.key \
-subj "/C=JP/ST=Tokyo/L=Koko/O=Wangan/OU=Oreda/CN=${HOST_DOMAIN}" -config ./openssl.cnf
cp domain.crt key
gzip key
mv key.gz key.zip
# WEBブラウザで見る人にkey.zipを渡す。
# これをブラウザの証明書設定で認証局に登録する。
# 一覧表示はO=WanganのWnganで表示される。
# 登録時キーの用途を聞かれたら、Web認証用にチェックを入れる。

# sudo mkdir /etc/apache2/ssl
# sudo cp domain.crt /etc/apache2/ssl
# sudo cp domain.key /etc/apache2/ssl
# sudo chmod 400 /etc/apache2/ssl/domain.key
# sudo nano /etc/apache2/sites-enabled/default-ssl.conf
#---
#<VirtualHost *:443>
#                SSLCertificateFile    /etc/apache2/ssl/domain.crt
#                SSLCertificateKeyFile /etc/apache2/ssl/domain.key
#--- 修正
# sudo systemctl restart apache2

popd
-------------------------
ブラウザで https://ドメイン名で確認する。

2018-11-15    「apache2.4インストール」
apacheをインストールすると、ユーザはwww-dataになるのでちょっとHTMLを扱うのが面倒なのでユーザを変える。
新しいユーザでHTMLを扱う。

(1)apacheのためのユーザを作成する
 sudo adduser gozira
   パスワード入力(控える)
 ログインしてディレクトリを作成する。
 sudo login gozira
 mkdir www
 mkdir www/cgi-bin
 exit 

(2)sudo apt install apache2

  sudo systemctl enable apache2
  sudo systemctl restart apache2

(3)ブラウザで http://localhost
  Debian Defaultぺージ表示を確認

(4)WEBサーバ apacheの動作UID,GIDの変更
  sudo nano /etc/apache2/envvars
----
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=gozira
export APACHE_RUN_GROUP=gozira
# temporary state file location. This might be changed to /run in Wheezy+1
---修正 APACHE_RUN_USER, APACHE_RUN_GROUP

(5)Apache2 のCGI設定
 sudo a2enmod cgi

(6)WEBサーバ ドキュメントルートの変更

  sudo nano /etc/apache2/apache2.conf
---
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /home/gozira/www/> <<===========変更
        Options FollowSymLinks    <<======Indexes削除
        AllowOverride None
        Require all granted
</Directory>

#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>

---
  sudo nano /etc/apache2/sites-enabled/000-default.conf
---
	ServerName my.home
	ServerAdmin webmaster@localhost
	DocumentRoot /home/gozira/www
---
ServerName xxx 追加
DocumentRoot変更

  sudo nano /etc/apache2/conf-enabled/serve-cgi-bin.conf
---修正
        <IfDefine ENABLE_USR_LIB_CGI_BIN>
                ScriptAlias /cgi-bin/ /home/gozira/www/cgi-bin/
                AddHandler cgi-script .cgi
                <Directory "/home/gozira/www/cgi-bin">
                        AllowOverride None
                        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                        Require all granted
                </Directory>
        </IfDefine>
---
 cgi-bin デイレクトリ変更
 AddHandler cgi-script .cgi 追加

(7)apache のドメインサーバ名追加

 sudo nano /etc/hosts
---
   127.0.1.1 my.home OSホスト名
---
 ipアドレス:127.0.1.1 に追加したホスト名を追加修正する

(8)apache再起動

 sudo apache2ctl restart

(9)WEBサーバ ドキュメントルートの変更のテストデータ作成

 sudo nano /home/gozira/www/index.html
----
<html>
<body>
<h1>
Apache HTML! ! !
</h1>
</body>
</html>
---

 sudo nano /home/gozira/www/cgi-bin/test.cgi
---
#!/bin/sh
echo "Content-Type: text/plain"
echo "Content-Length: 20"
echo ""
DATA=`whoami`
echo "user : $DATA"
echo $DATA > test99.txt
---
  sudo chmod +x /home/gozira/www/cgi-bin/test.cgi

(10)WEB サーバ セキュリティ情報の制限

 sudo nano /etc/apache2/conf-enabled/security.conf
---
#<Directory />
#   AllowOverride None
#   Order Deny,Allow
#   Deny from all
#    Require all denied
#</Directory>
  :
  :
ServerTokens Prod
  :
ServerSignature Off
  :
TraceEnable Off
---
   修正

(11)apacheがよく止まってしまう。

  参照: https://www.gwaw.jp/20180526-16.html より
 --- /var/log/apache2/error.log --
 [mpm_prefork:emerg] [pid 29374] (43)Identifier removed: AH00144: couldn't grab the accept mutex
 [core:alert] [pid 18867] AH00050: Child 29372 returned a Fatal error... Apache is exiting!

 ログにエラーが出てよく止まる場合。
 --- /etc/apache2/apache2.conf ----
#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
Mutex file:${APACHE_LOCK_DIR} default
 ---
 コメントを取る。以前より止まることがなくなった。

(12)今までの修正を反映する

 sudo reboot
 (apache2 再起動では実行ユーザが変わらない)

(13) 動作確認

 ブラウザより hhtp://localhost/
  Apache HTML!!! 確認
 ブラウザより hhtp://localhost/cgi-bin/test.cgi
  user: gozira 確認
  /home/gozira/www/cgi-bin/test99.txtができている事。

 sudo rm /home/gozira/www/cgi-bin/test.cgi
 sudo rm /home/gozira/www/index.html
  テストしたファイルは全部消す。
2018-11-15  「WordPressインストール」
(1)wordpresのためのデータベース登録

mysql -u root -p

mysql> create database db001;
Query OK, 1 row affected (0.01 sec)

mysql> create user 'wpuser'@'localhost' identified by 'wpuserpass';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on db001.* to 'wpuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)
quit

(2)login gozira
(3)cd www/www
(4)wget https://ja.wordpress.org/latest-ja.tar.gz
(5)tar -zxvf latest-ja.tar.gz
(6)wordpressディレクトリを /home/gozira/www/wdpにする
   mv wordpress wdp
(7)cd wdp
(8)cp wp-config-sample.php wp-config.php)nano wp-config.php
==編集wp-config.php===
/** WordPress のためのデータベース名 */
define('DB_NAME', 'db001');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'wpuser');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'wpuserpass');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

/** データベースのテーブルを作成する際のデータベースの文字セット */
define('DB_CHARSET', 'utf8');
----
(10)gozira logout
(11) sudoユーザ login
(12)sudo a2enmod rewrite
(13)sudo systemctl restart apache2
(14)sudo nano /home/gozira/www/www/wdp/.htaccess
---作成
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{HTTP_HOST} !ホストドメイン名 [OR]
RewriteCond %{THE_REQUEST} ^(PROP)
RewriteRule  ^.*$ /index.php [L]
</IfModule>
<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>
---
  Wordpressをインストールするとこの後にデフォルトのルールが追加されるが、前のが有効。後のは削ってもOK.

(15)sudo chown gozira:gozira /home/gozira/www/www/wdp/.htaccess
(16)sudo chmod 600 /home/gozira/www/www/wdp/.htaccess
(17)ブラウザで開く
   http://ドメイン名/wdp
  ドメイン名は.htaccessで指定するもの。IPアドレスだったらアドレスに。localhostならlocalhost。

(18)wordpressタイトル入力
(19)ユーザ名入力
(20)メールアドレス入力:gozira@my.home
  メールは届かないが入力する
(21)パスワードを控えること
(22)ログインしてWordPressのダッシュボードでテーマ等の基本設定をする

Wordpres メンテナンスプログラムインストール
(23)SUDOユーザでログイン
(24)curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
(25)chmod +x wp-cli.phar
(26)sudo mv wp-cli.phar /usr/local/bin/wp
(27)SUDOユーザログアウト
(28)login gozira
(29)cd www/www/wdp
(30)wp user list
+----+------------+--------------+--------------+--------------+--------------+
| ID | user_login | display_name | user_email   | user_registe | roles        |
|    |            |              |              | red          |              |
+----+------------+--------------+--------------+--------------+--------------+
| 1  | user00x    | user00x      | gozira@my.ho | 2017-05-27 1 | administrato |
|    |            |              | me           | 8:25:47      | r            |
+----+------------+--------------+--------------+--------------+--------------+
動作確認
(31)最初にlocalhostでWordPressを表示した場合、後で正式なドメイン名で見たら正しく見れなくなる。
  WordPressインストールディレクトリで以下のコマンドでURLを変換すると正しく表示。
  wp search-replace 'http://localhost' 'http://my.home' --path=/home/gozira/www/www/wdp --skip-columns=guid

(32)WordPress wp-cliコマンドラインツールの使い方

参考:
wp-cli使い方
https://tonari-it.com/wp-cli-post/
https://tonari-it.com/wp-cli-front/
wp-cliドキュメント
https://developer.wordpress.org/cli/commands/

WordPressをインストールしたディレクトリで実行すること。

新規投稿 本文をファイルより
$ wp post create ./test.txt --post_title="タイトル" --post_status=publish --porcelain

新規投稿 本文をSTDINより
$ wp post create - --post_title="タイトル" --post_status=publish --porcelain

投稿一覧
$ wp post list

固定ページ登録
$ wp post create --post_type=page --post_title="タイトル" --post_status=publish --porcelain

固定ページ一覧
wp post list --post_type=page

カテゴリー作成
$ wp term create category "カテゴリー名" --description="内容説明"

カテゴリー一覧
$ wp term list category --format=csv

新規投稿 カテゴリー指定
$ wp post create ./text.txt --post_category=3 --post_title='タイトル' --post_status=publish --porcelain

投稿の先頭に画像追加
$ wp media import ./画像.png --post_id=11 --title="画像タイトル" --featured_image
  post_idは投稿一覧で見たIDを指定する。

投稿にコメントを付ける
$ wp comment create --comment_post_ID=12 --comment_content="コメントの内容" --comment_author="コメント記述者の名前"
  cmment_post_idは投稿一覧で見たIDを指定する。
  comment_contentはHTMLタグ記号は変換すること。HTMLフォーマットで記述する場合はHTMLタグを使うこと。

コメントの一覧
$ wp comment list
  コメントIDとcomment_post_idは間違わないようににすること。

コメントの削除
$ wp comment delete 3 --force
  数字は一覧で見たコメントID。

表紙

次へ