正規表現について

正規表現の重要性がますます高まっている。たとえば、HTMLのフォームでも、正規表現による値のチェックができるようになってきている。

HTML 5.2: 4.10. Forms – W3C

そこで、簡単ではあるが、正規表現の例を書いてみようと思う。
次の正規表現は、郵便番号というか、3桁の半角数字、ハイフン、4桁の半角数字が入力された場合、マッチすると言う言い方をするが、整合する表現になる。

\d{3}-\d{4}

まとめると

c 特殊な意味を持たない任意の文字cはその文字自身を意味する。
\c 文字cの特殊な意味をなくす。
^文字 行の先頭の文字にマッチ
文字$ 行の終わりの文字にマッチ
文字\b 空白で区切られた単語にマッチ
文字\B 空白で区切られていない単語にマッチ
. 任意の1文字にマッチ(改行は除く)
[文字] 文字のうちの任意の1文字にマッチ、a-zのような範囲の指定も有効
[^文字] 文字にない任意の1文字にマッチ、範囲指定も有効。
\n n番目の\(…\)がマッチしたものを示す。
r* 0回以上のrの繰り返しにマッチ
r+ 1回以上のrの繰り返しにマッチ
r? 0または1回のrの出現でマッチ
文字{値} 値の指定個数でマッチ
文字{値,} 値の指定個数以上でマッチ
文字{値1,値2} 値1~値2の指定範囲でマッチ
r1r2 r1r2という並び
r1 | r2 r1またはr2、|で区切られた任意の文字にマッチ
\(r\) タグ付き正規表現r。ネスト可能。
(r) 正規表現r。ネスト可能。
\c文字 コントロールコードの文字にマッチ
\d 数値([0-9])にマッチ
\D 数値以外の文字([^0-9])にマッチ
\f フォームフィールドの文字にマッチ
\n 改行文字にマッチ
\r 復帰文字にマッチ
\s 1文字の区切り文字([\f\n\r\t\v])にマッチ
\S 区切り文字以外([^\f\n\r\t\v])の一文字にマッチ
\t タブ文字にマッチ
\v 垂直タブ文字にマッチ
\w 英数文字([A-Za-z0-9_])にマッチ
\W 英数文字([A-Za-z0-9_])以外の文字にマッチ
\★ ★(数値)番目の文字列(…)にマッチ
\o値 8進数の値にマッチ
\x値 16進数の値にマッチ
\. 「.」そのものの文字にマッチ
\- 「-」そのものの文字にマッチ
\\ 「\」そのものの文字にマッチ
\/ 「/」そのものの文字にマッチ
() グループ化(マッチデータはRegExp.$1~9で取り出せる)

まだまだあるが、最後に、リンクにhttpが含まれないパターンの正規表現を私なりに書いてみる。否定的先読みという正規表現を使用する。

<a href=”((?!http).*)” target=”_blank”>

仮想化について

仮想化とは

ソフトウェア(ここでいうソフトウェアは、オペレーティングシステム、Windows, Linuxなどを指す)をソフトを使用して、マシンの中に別のマシン(ここでいうマシンはハードウェアがあるかのようなという意味、仮想マシンと言う)が存在するかのように動作させる仕組みのことを指す。

仮想化の目的

  • 動かしたいソフトウェアがホストマシン上で動かないとき
  • 多重起動したいのに多重起動ができない場合
  • 動かしたいソフトウェアがホストマシンに適合するソフトウェアがない時
    ntp(chrony)など、Windows 10にはない機能の場合
  • 動かしたいソフトウェアがホストマシンに影響する場合
  • ウイルスなどが混入している可能性がある場合
  • ウェブサーバーなど一つしか起動できない場合(ネットワークのポート80番が競合する場合)
  • Visual Studioのように、システムを根本から変更し、アンインストールできないものをインストールしたい場合

仮想化の利点

  • 目的に使用するためのCPUリソース、メモリリソース、必要な環境を知る機能がある
  • 操作以前に戻す機能(スナップショット、差分ファイル)など
  • 他にも、クラスタ化など、いろいろな用途に応用されている。

仮想化の種類と特徴

  • ハイパーバイザ(完全仮想化)- Hyper-v(Microsoft) KVM(Linux) Xen あと、VMWara社も出しているが製品名は知らない
    ハードウェアによる仮想化なので、高速に作動する
  • 準仮想化 Virtual Box(Oracle) android studio(Google) VMware
    ハイパーバイザを利用しつつエミュレーションを行うので、動作が遅くなる
  • エミュレーター
    ソフトウェア的にエミュレーションをするので、動作が遅くなるがサポートできるソフトウェアが多くなる。動くソフトウェアが多くなる。

 

Fedora27Workstationで仮想マシンの作り方

仮想マシンを作成するソフトとしてデフォルトで「Boxes」があるが、今回は「virt-manager」を使用する方法を紹介する。
$sudo dnf -y install virt-manager libvirt-daemon-config-network
上記のようにコマンドを打つと「仮想マシンマネージャー」がインストールされる。仮想マシンの作成、実行、削除、全てこのGUIで実行できる。

欲を言うと、ディスクの差分などは、コマンドで行うことになる。次にディスク関連のコマンドを書くとする。
ディスクの作成
$sudo qemu-img create -f qcow2 image.qcow2 40G
差分イメージを作る
$sudo qemu-img create -b org.qcow2 -f qcow2 diff.qcow2
差分イメージのマージ
$sudo qemu-img commit -f qcow2 diff.qcow2
イメージの圧縮
$sudo qemu-img convert -c -O qcow2 org.qcow2 compress.qcow2

私は、無線LANのノートパソコンで、このブログを書いているし、有線LAN環境ではないので、「ブリッジ」を作成して、サーバーを立てることができない。この方法だと、仮想マシンのネットワークはNAT環境しかできない。

ちなみに、Windowsのハイパーバイザ、Hyper-Vは、無線が使用できるようだ。

ここで書いている仮想マシン操作は、KVMというLinuxのもとから入っているハイパーバイザである。

独立したIPアドレスを持った仮想マシンを作成するには有線が必要で次のようにする必要がある。

sudo dnf -y install qemu-kvm libvirt virt-install bridge-utils virt-manager
lsmod | grep kvm
sudo systemctl start libvirtd
sudo systemctl enable libvirtd

ブリッジの作成
sudo nmcli con add type bridge ifname br0

ブリッジのスレーブの追加
sudo nmcli con add type bridge-slave ifname enp0s31f6 master bridge-br0
sudo nmcli con delete enp0s31f6 && sudo reboot

ブリッジのIPアドレス設定
sudo nmcli c modify bridge-br0 ipv4.addresses 192.168.0.500/24
sudo nmcli c modify bridge-br0 ipv4.method manual
sudo nmcli c modify bridge-br0 ipv4.gateway 192.168.0.1
sudo nmcli c modify bridge-br0 ipv4.dns 192.168.0.1

仮想マシンディスクを別ディスクに入れる場合のSELinuxに通知するコマンド
sudo setsebool -P virt_use_fusefs 1

作成した仮想マシンの中で、さらに、仮想マシン技術を使用したい場合の、ネスト設定
sudo vi /etc/modprobe.d/kvm-nested.conf
options kvm_intel nested=1
sudo modprobe -r kvm_intel
sudo modprobe kvm_intel
cat /sys/module/kvm_intel/parameters/nested
sudo virsh edit fedora26
<cpu mode=’host-passthrough’ />

vimをviとして使用する方法

vimをインストールする方法

#dnf -y install vim-enhanced

これをviとして、使用するには、使うユーザごとに

$vi ~/.bashrc

と、bashスタートアップシェルを修正する必要がある。aliasで「vi」とした場合「vim」が呼び出されるようにする。

alias vi='vim'

さらに、sudo環境で動作させるには、次の行に

alias sudo='sudo '

とする必要がある。

GNOMEにGoogle日本語入力を入れる方法

GNOME(グノム)とは、Linuxのディスクトップ環境の一つです。Fedora Workstationの標準のディスクトップ環境は、GNOME3なので、以下のようにして、Google日本語入力をインストールします。

#dnf -y install ibus-mozc

しかし、このままでは、日本語キーボードに対応しておらず、英語キーボードを使用しているように振る舞ってしまいます。そこで、日本語キーボードに対応させるために次のように設定ファイルを修正します。

#vi /usr/share/ibus/component/mozc.xml

<layout>default</layout>の部分を次のように書き換えます。

<layout>jp</layout>

これで、設定を開いて、地域と言語を選択して、「入力ソース」の「+」ボタンを押して、「日本語」を選択して、「日本語 (Mozc)」を選択して追加します。

jpの部分で、正確にキーボードと一致しない方はjp2,jp3を試してみてください。

Laravelをxdomainに設置する方法のメモ

VPS(Virtual Private Server)などでは、httpd.confがいじれるためにDocumentRootを変更できるが無料レンタルサーバーなどでは、Laravel を設置するのは、下記のように行う。

他のレンタルサーバーでは次の方法だけでいいようだ。「Laravelディレクトリ/public/」の中身全部を公開されるディレクトリのルート、xdomainならFTPから見れるルート「/」にコピー。ルートの「index.php」の中の「require __DIR__.’/../vendor/autoload.php’;」を「require __DIR__.’/Laravelディレクトリ/vendor/autoload.php’;」に修正。「$app = require_once __DIR__.’/../bootstrap/app.php’;」を「$app = require_once __DIR__.’/Laravelディレクトリ/bootstrap/app.php’;」に修正。

さらにxdomain特有の修正は、.htaccessの修正が必要になります。mod_negotiation.c がxdomainのApacheにはないようだ。

<IfModule mod_rewrite.c>
# <IfModule mod_negotiation.c>
# Options -MultiViews -Indexes
# </IfModule>

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

SELinux関連コマンド

SELinux有効かどうかを調べる

  • getenforce
  • sestatus

書き込みをするファイルのラベルを変更する

  • #semanage fcontext -a -t httpd_sys_rw_content_t “/var/www/html/tmp(/.*)?”
  • #restorecon -R /var/www/html/tmp

httpdで扱うファイルだとラベルを変更する

  • #semanage fcontext -a -t httpd_sys_content_t ‘/var/www/html(/.*)?’
  • #restorecon -R /var/www/html

キャッシュディレクトリだとラベルを変更する

  • #chcon -R -t httpd_cache_t /var/www/html/blog/storage

仮想マシンのディスクを別の場所に置く場合

  • $sudo setsebool -P virt_use_fusefs 1

httpのユーザディレクトリを使用する場合

  • $sudo setsebool -P httpd_enable_homedirs on
  • $sudo restorecon -R /home

 

Fedora27WorkstationにLaravel 5.5を設置する

Laravel 5.5の動作環境は、「https://readouble.com/laravel/」によると

  • PHP >= 7.0.0
  • OpenSSL PHP拡張
  • PDO PHP拡張
  • Mbstring PHP拡張
  • Tokenizer PHP拡張
  • XML PHP拡張

なので、次のパッケージをインストールする。

  1. $su –
  2. #dnf -y install php php-common php-pdo php-mbstring php-xml php-pear
  3. #exit

次に「composer」をインストールします。composerの中身はphpなので、「https://getcomposer.org/」からダウンロードしても構いません。

  1. $su
  2. #dnf -y install composer
  3. #exit

composerを使ってLaravelをインストールします。次の例は、Laravel 5.5を「blog」というディレクリにインストールします。rootユーザでは実行しないでくださいとエラーが出てたので、一般ユーザで実行してください。/var/www/htmlなどに入れる場合 #chmod 755 /var/www を実行する必要があると思います。

  • $composer create-project –prefer-dist laravel/laravel blog “5.5.*”

10分程度かかります。赤色で囲まれたメッセージが出たときは、読んで、対応して、もう一度実行してください。

SELinux環境では次のコマンドも参考にしてください。

  • sudo semanage fcontext -a -t httpd_sys_content_t ‘/var/www/html(/.*)?’
  • sudo restorecon -R /var/www/html
  • sudo chcon -R -t httpd_cache_t /var/www/html/blog/storage
  • sudo chcon -R -t httpd_cache_t /var/www/html/blog/bootstrap/cache

その他、パーミッション設定

  • $sudo chmod 755 /var/www
  • $sudo chmod 777 /var/www/html
  • $sudo chmod -R 777 storage
  • $sudo chmod -R 777 bootstrap/cache

よくわからない設定 $sudo chown -R root:apache /var/www

最後に、/etc/httpd/conf/httpd.confのDocumentRootを「/var/www/html/blog/public/」に変更して「http://localhost」でアクセスして、「Laravel」と中央に表示されれば成功です。