CentOS - gitコマンドの入力補完(git-completion)、ローカルブランチの表示(git-prompt)

作業環境

SHELL> hostnamectl status
   Static hostname: localhost.localdomain
         Icon name: computer-vm
           Chassis: vm
-
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.21.1.el7.x86_64
      Architecture: x86-64
SHELL> echo $SHELL
/bin/bash
SHELL> git --version
git version 1.8.3.1

git-completionの導入

gitコマンドの入力補完を導入するためにgit-completionを有効にします。 GitをYumでインストールした場合、以下ディレクトリにgit-completionはあるはず。

/usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.bash

「~/.bash_profile」に以下、1行の設定を追記する

. /usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.bash

設定の読み込み

SHELL> source ~/.bash_profile

ローカルブランチの表示

gitコマンドの入力補完を導入するためにgit-promptを有効にします。 GitをYumでインストールした場合、以下ディレクトリにgit-promptはあるはず。

/usr/share/doc/git-1.8.3.1/contrib/completion/git-prompt.sh

「~/.bash_profile」に以下、3行の設定を追記する

. /usr/share/doc/git-1.8.3.1/contrib/completion/git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='[\[\033[1;32m\]\u\[\033[00m\]@\h \[\033[1;34m\]\w\[\033[1;31m\]$(__git_ps1)\[\033[00m\]]\$ '

設定の読み込み

SHELL> source ~/.bash_profile

CentOS7 - ipset + firewalld or iptables 国別アクセス制御

作業環境

hostnamectl status
   Static hostname: localhost.localdomain
         Icon name: computer-vm
           Chassis: vm
~
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.2.2.el7.x86_64
      Architecture: x86-64

国別IPアドレスリストに取得

IPアドレスリストをダウンロード

shell> curl -O 'http://nami.jp/ipv4bycc/cidr.txt.gz'

ファイルを解凍

shell> gunzip cidr.txt.gz

ブラックリストの作成

ルールを作成

shell> ipset create -exist BLACKLIST hash:net

ブラックリストを初期化

shell> ipset flush BLACKLIST

US(アメリカ)をブラックリストに登録

shell> awk '$1 ~ /^US/ {print $2}' cidr.txt | xargs -i ipset -q add BLACKLIST {}

ブラックリストに登録済みのIPアドレス一覧を表示

shell> ipset list BLACKLIST

firewalld or iptablesブラックリストのルールを追加

firewalld

shell> firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -m set --match-set BLACKLIST src -j REJECT
shell> firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m set --match-set BLACKLIST src -j REJECT

iptables

shell> iptables -I INPUT -m state --state NEW -p tcp --dport 22 -m set --match-set BLACKLIST src -j REJECT

ホワイトリストを作成

ルールを作成

shell> ipset create -exist WHITELIST hash:net

ホワイトリストを初期化

shell> ipset flush WHITELIST

JP(日本)をホワイトリストに登録

shell> awk '$1 ~ /^JP/ {print $2}' cidr.txt | xargs -i ipset -q add WHITELIST {}

firewalld or iptablesホワイトリストのルールを追加

firewalld

shell> firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -m set --match-set WHITELIST src -j ACCEPT
shell> firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m set --match-set WHITELIST src -j ACCEPT

iptables

shell> iptables -I INPUT -m state --state NEW -p tcp --dport 22 -m set --match-set WHITELIST src -j ACCEPT

ホワイトリストIPアドレスを追加/削除

ブラックリストに変更を加える場合は、「WHITELIST」を「BLACKLIST」置換するだけ

追加

shell> ipset -q add WHITELIST 1.1.1.1/32

削除

shell> ipset -q del WHITELIST 1.1.1.1/32

NGXIN + ngx_mrubyを用いたSSL動的読み込みの環境構築

構築環境


shell> hostnamectl status
   Static hostname: www.example.com
         Icon name: computer-vm
           Chassis: vm
〜
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.17.1.el7.x86_64
      Architecture: x86-64

※ 全て管理者権限(root)のあるユーザで実行している

NIGNX + ngx-mrubyの環境構築


各種ソースコードをダウンロード

NGINXのソースコード

最新版(Ver 1.14.0)をダウンロード(2018/05/04現在)

shell> cd /usr/local/src/ && \
curl -O http://nginx.org/download/nginx-1.14.0.tar.gz && \
tar zxf /usr/local/src/nginx-1.14.0.tar.gz

ngx_mrubyのソースコード

最新版(Ver 1.20.2)をダウンロード(2018/05/04現在)

shell> cd /usr/local/src/ && \
curl -LO https://github.com/matsumotory/ngx_mruby/archive/v1.20.2.tar.gz && \
tar zxf /usr/local/src/v1.20.2.tar.gz

Rubyをインストール

ngx_mrubyのビルドには、RubyのRakeライブラリが必要なためインストール

shell> yum install -y ruby ruby-devel openssl openssl-devel
shell> gem install rake

ngx_mrubyをビルド

shell> cd /usr/local/src/ngx_mruby-1.20.2/
shell> ./configure --with-ngx-src-root=/usr/local/src/nginx-1.14.0
shell> make build_mruby -j 2
shell> make generate_gems_config -j 2

NGINXをビルド

shell> cd /usr/local/src/nginx-1.14.0
shell> ./configure --with-compat \
--add-module=/usr/local/src/ngx_mruby-1.20.2/dependence/ngx_devel_kit \
--add-module=/usr/local/src/ngx_mruby-1.20.2 \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_gunzip_module \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--without-stream_access_module \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'
shell> make install -j 2

NGINXに設定を投入

NGINXのコンフィグをバックアップ

既存のnginx.confをリネーム

shell> mv -v /usr/local/nginx/conf/nginx.conf{,.backup}

nginx.confを新規作成

shell> mkdir /usr/local/nginx/conf/conf.d
shell> cat /usr/local/nginx/conf/nginx.conf
user  nginx;
worker_processes  auto;
worker_rlimit_nofile 100000;
pid /usr/local/nginx/logs/nginx.pid;

events {
    worker_connections  2048;
}

http {
    log_format ltsv 'time:$time_iso8601\t'
                    'remote_addr:$remote_addr\t'
                    'request_method:$request_method\t'
                    'request_length:$request_length\t'
                    'request_uri:$request_uri\t'
                    'https:$https\t'
                    'uri:$uri\t'
                    'query_string:$query_string\t'
                    'status:$status\t'
                    'bytes_sent:$bytes_sent\t'
                    'body_bytes_sent:$body_bytes_sent\t'
                    'referer:$http_referer\t'
                    'useragent:$http_user_agent\t'
                    'forwardedfor:$http_x_forwarded_for\t'
                    'request_time:$request_time\t'
                    'upstream_response_time:$upstream_response_time';

    access_log /usr/local/nginx/logs/access.log ltsv;
    error_log /usr/local/nginx/logs/error.log info;

    proxy_set_header    Host                $host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-Host    $host;
    proxy_set_header    X-Forwarded-Server  $host;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   https;

    client_max_body_size 2G;

    gzip on;
    gzip_types text/css application/javascript application/json application/font-woff application/font-tff image/gif image/png image/jpeg application/octet-stream;

    server_tokens off;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    include       mime.types;
    default_type  application/octet-stream;
    keepalive_timeout  10;
    server_names_hash_bucket_size 20000;
    include /usr/local/nginx/conf/conf.d/*.conf;
}

NGINXユーザを作成

shell> useradd -M --shell /sbin/nologin nginx

NGINXのシンボリックリンクを作成

shell> ln -s /usr/local/src/nginx-1.14.0/objs/nginx /usr/local/bin/nginx

シンタックスチェック

shell> nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

NGINXをSystemdに登録

sehll> cat /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/bin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

NGINXを起動

shell> systemctl enable nginx && systemctl start nginx

動作確認用

テストページ用のコンフィグを作成

http://www.example.com/helloにアクセスして「hello ngx_mruby world」が表示される設定を追加

shell> /usr/local/nginx/conf/conf.d/www.example.com.conf
server{
    listen 80;
    server_name  www.example.com;

    location /hello {
      mruby_content_handler_code 'Nginx.echo "hello ngx_mruby world"';
    }

    location ^~ /.well-known/acme-challenge/ {
        root /usr/local/nginx/html;
    }
}

追加したコンフィグを反映

shell> nginx -s reload

テストページにアクセス

shell> curl -s http://www.example.com/hello
hello ngx_mruby world

Let’s Encryptの導入


SSL証明書を入手するために無料で期間の短い証明書を無料で発行してくれるサービスを利用する

ソースコードをダウンロード

shell> cd /opt && git clone https://github.com/letsencrypt/letsencrypt

Let’s Encryptの環境構築

shell> cd letsencrypt && ./letsencrypt-auto --help all

証明書を発行

コマンドオプションには、ドキュメントルート(-w)・コモンネーム(-d)・メールアドレス(-m)を指定

shell> ./letsencrypt-auto certonly \
--rsa-key-size 4096 \
--webroot -w /usr/local/nginx/html \
-d www.example.com \
-m root@www.example.com

SSL証明書を確認

shell> tree /etc/letsencrypt/live/
/etc/letsencrypt/live/
`-- www.example.com
    |-- README
    |-- cert.pem -> ../../archive/www.example.com/cert1.pem
    |-- chain.pem -> ../../archive/www.example.com/chain1.pem
    |-- fullchain.pem -> ../../archive/www.example.com/fullchain1.pem
    `-- privkey.pem -> ../../archive/www.example.com/privkey1.pem

SSL証明書パーミッションを変更

NGINXユーザからSSL証明書にアクセスする場合、「live」「archive」のパーミッションを700 -> 755に変更必要がある

shell> chmod 755 /etc/letsencrypt/{live,archive}

テストページ用のコンフィグにSSLの設定を追加

shell> /usr/local/nginx/conf/conf.d/www.example.com.conf
server{
    listen 80;
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_timeout 1h;
    ssl_session_cache shared:SSL:10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    ssl_certificate "/etc/letsencrypt/live/www.example.com/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/www.example.com/privkey.pem";
    ssl_dhparam "/usr/local/nginx/conf/dhparam.pem";

    location /hello {
      mruby_content_handler_code 'Nginx.echo "hello ngx_mruby world"';
    }

    location ^~ /.well-known/acme-challenge/ {
        root /usr/local/nginx/html;
    }
} 

dhparamを生成

shell> openssl dhparam 4096 -out /usr/local/nginx/conf/dhparam.pem

追加したコンフィグを反映

shell> nginx -s reload

テストページにアクセス

shell> curl -s https://www.example.com/hello
hello ngx_mruby world

SSL証明書の動的読み込み


ドキュメントルートは、「/usr/local/nginx/html/< ドメイン名 >」でドメイン毎に作成
今回の場合は、「/usr/local/nginx/html/www.example.com

shell> cat /usr/local/nginx/conf/conf.d/mruby.conf
server {
      listen 80;
      server_name _;

      location ^~ /.well-known/acme-challenge/ {
        root /usr/local/nginx/html;
    }
    location / {
        mruby_set_code $root '
          r = Nginx::Request.new
          "/usr/local/nginx/html/#{r.hostname}"
        ';

        root $root;
    }
}

server {
    listen 443 ssl http2;
    server_name  _;

    # SSL
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_timeout 1h;
    ssl_session_cache shared:SSL:10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    add_header Strict-Transport-Security max-age=31536000;

    ssl_certificate "/etc/letsencrypt/live/www.example.com/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/www.example.com/privkey.pem";
    ssl_dhparam "/usr/local/nginx/conf/dhparam.pem";

    mruby_ssl_handshake_handler_code '
      ssl = Nginx::SSL.new
      ssl.certificate     = "/etc/letsencrypt/live/#{ssl.servername}/fullchain.pem"
      ssl.certificate_key = "/etc/letsencrypt/live/#{ssl.servername}/privkey.pem"
    ';

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    location / {
        mruby_set_code $root '
          r = Nginx::Request.new
          "/usr/local/nginx/html/#{r.hostname}"
        ';

        root $root;
    }

    ## リバースプロキシの設定例
    #location / {
    #   resolver 8.8.8.8 1.1.1.1 8.8.4.4 valid=15m;
    #   resolver_timeout 10s;
    #   add_header Strict-Transport-Security max-age=31536000;
    #   mruby_set_code $backend 'Nginx::Request.new.hostname';
    #   proxy_pass http://$backend;
    #}
}

シンタックスチェック

murbyの記述箇所については、下記コマンドではエラーを確認できないので「/usr/local/nginx/logs/error.log」を確認すること

shell> nginx -t

設定の反映

shell> nginx -s reload

正しく設定が反映されない場合は、再起動を実施

shell> systemctl restart nginx

CoreOS - CoreOSにdocker-composeをインストールする

How to install Docker-comporse on CoreOS

環境

shell> hostnamectl status
   Static hostname: localhost
         Icon name: computer-vm
           Chassis: vm
---
    Virtualization: kvm
  Operating System: Container Linux by CoreOS 1688.5.3 (Rhyolite)
            Kernel: Linux 4.14.32-coreos
      Architecture: x86-64

参考サイト

CoreOSにdocker-composeをインストール

手順

  1. コマンド設置用ディレクトリを作成
  2. 最新のdocker-composeをダウンロード(2018/04/25時点)
  3. リネームして設置
  4. 実行権限を付与
  5. PATHを指定
  6. 動作確認

1.コマンド設置用ディレクトリを作成

shell> sudo mkdir -p /opt/bin && sudo chmod -R 755 /opt

2.最新のdocker-composeをダウンロード(2018/04/25時点)

shell> sudo wget -P /opt/ https://github.com/docker/compose/releases/download/1.21.0/docker-compose-Linux-x86_64

3.リネームして設置

shell> sudo mv /opt/docker-compose-Linux-x86_64 /opt/bin/docker-compose

4.実行権限を付与

shell> sudo chmod 755 /opt/bin/docker-compose

5.PATHを指定

shell> PATH=$PATH:/opt/bin && export PATH

6.動作確認

shell> docker-compose --version
docker-compose version 1.21.0, build 5920eb0

CentOS7 - MariaDB 10.2をインストール

目次

1.Yumリポジトリを作成
2.MariaDB 10.1をインストール
3.MariaDB 10.2の起動と自動起動設定

作業環境

shell> hostnamectl status
   Static hostname: localhost
         Icon name: computer-vm
           Chassis: vm
〜
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.2.2.el7.x86_64
      Architecture: x86-64

1.Yumリポジトリを作成

Nginx用のリポジトリを作成する

shell> cat << EOS > /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOS

2.MariaDB 10.2をインストール

YumコマンドでMariaDB 10.2をインストール

shell> yum install -y MariaDB-server MariaDB-client MariaDB-devel

バージョンを確認

shell> mysql -V
mysql  Ver 15.1 Distrib 10.2.13-MariaDB, for Linux (x86_64) using readline 5.1

3.MariaDB 10.2の起動と自動起動設定

systemctlコマンドでMariaDB 10.2の起動と自動起動の設定

shell> systemctl enable mariadb
shell> systemctl start mariadb

CentOS7 - 最新版のNginxをインストール

目次

1.Yumリポジトリを作成
2.Nginxをインストール
3.Nginxの起動と自動起動設定

作業環境

# hostnamectl status
   Static hostname: localhost.localdomain
         Icon name: computer-vm
           Chassis: vm
        Machine ID: ff23df70c5cc4edba0892791e697c82d
           Boot ID: 636cea5067804145b422e7b7e2639157
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.2.2.el7.x86_64
      Architecture: x86-64

1.Yumリポジトリを作成

Nginx用のリポジトリを作成する

# cat << EOF > /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
EOF

2.Nginxをインストール

YumコマンドでNginxをインストール

# yum install -y nginx

バージョン確認

# nginx -V
nginx version: nginx/1.13.9
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

3.Nginxの起動と自動起動設定

systemctlコマンドでNginxの起動と自動起動の設定

# systemctl enable nginx
# systemctl start nginx

CentOS7 - Golangをインストールする

Golang開発環境構築

作業環境


# hostnamectl status
   Static hostname: golang.local
         Icon name: computer-vm
           Chassis: vm
~~~
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.2.2.el7.x86_64
      Architecture: x86-64

Cコンパイラをインストール


# yum install -y gcc

Golangをインストール


Golangのバイナリをダウンロード(2017/8/9 最新版は1.8.3)

# wget -P /usr/local/src https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz

展開

# tar xzf /usr/local/src/go1.8.linux-amd64.tar.gz -C /usr/local/

PATH登録と読み込み

# vim ~/.bash_profile
~
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:/usr/local/go/bin

環境変数を読み込み

# source ~/.bash_profile

Hello Worldスクリプトを作成


スクリプト作成

# cat << EOF > hello.go
package main

import "fmt"

func main() {
    fmt.Printf("Hello World\n")
}
EOF

コンパイルせずに実行

# go run hello.go
Hello World

コンパイル

# go build hello.go

バイナリを実行

# ./hello
Hello World