【留学】退職の決断と展望など

今の自分の状況

年齢:34歳
学歴:教育系大学院卒
職歴:大阪府教員10年(非常勤講師1年の後、本採用され公立高校教諭9年)
   公務員として公立高校で数学の先生をしてました。
結婚:していない
留学予定期間:1年間

留学について

3年半前、趣味として英会話学校に通い始めました。その時は留学なんて全く考えてなくて、「飲み屋で外国の人と喋れたらええなー」ぐらいにしか思ってませんでした。

1年間通って海外旅行に一人で、しかも全てホームステイで行けるようになってから「もう十分か」と思って一旦辞めました。ちなみにその時が初めての海外旅行でした。

その後も英語を話す機会を持つようにしていたけど、話せば話すほどもっと上手くなりたいと思うようになって、留学というものを考えるようになりました。

勉強するだけなら国内でもいいのかもしれないけど、やっぱり日常生活も英語でできる海外が最高の場所だと思います。また、日本を離れることで仕事や付き合いを断つことができて、勉強に集中できるということもあるかと思います。

人間関係を断ちたい訳ではないけど、今は勉強に集中したい。

退職について

最初は留学には行きたいけど退職なんてとんでもない、と考えていました。公務員なので、という言い方をするのはおかしいかもしれませんが、労務関係の制度はちゃんとそろっていて、休職制度もありました。

ただ、自分の場合「大阪府の数学教育に貢献するための休職」でないといけないということでした。これは教える教科によって違います。英語の教師してたらおそらく留学休職のハードルはより低くなっていたのではないでしょうか。

いろいろ理由をつけたり、留学先で数学教育のためになるような実績を作ったり、ということを考えましたが、最終的には休職という選択は選ばないことにしました。理由は

  • 休職制度の趣旨にそぐわない使い方はするべきではない
  • 1年間、費用も労力もかけて修得した英語を発揮する場が今の職業には無い

ということです。

1つ目は「真面目か!」と言われそうですが、自分としては英語の勉強に集中したいという思いに矛盾するような気がしただけです。

それよりも2つ目の方が大きいです。せっかく活かせる英語を身に付けたのに活かせる場が無いのは辛いです。それならばと決断をしました。

他にもいろいろあるんですが「人生一度きりだから、やりたいことをとことんやりたい」という思いが根底にあります。今までの人生でも大事にしてきた部分です。

ちなみにネガティブな退職理由は、ここではなく飲み屋で話をしましょう。(笑)

留学中にしたいこと

もちろん英語の勉強、もっと言うと英語でもっと上手にコミュニケーションが取れるようになりたい。 そのためには学校外の活動をどれだけするかがポイントだと考えています。

  • ダンス(Swing Dance)
  • プログラミング(誰かと一緒に)
  • バイトまたはボランティア

今考えているのはこんな感じです。他にどんなことができるかはまだ分かりませんが、日本では得られないような体験・学びをこのブログに書いていこうと思っています。

ちなみに現時点でのTOEICは700点ジャストですが、L&Rのみです。向こうではIELTSを受験する予定です。目標点数は7.0です。今決めました。

留学後について

仕事としてはIT系を志望しています。英語×ITがこれからの時代の最強のスキルになると考えてプログラミングを独学で勉強しています。自分の場合は英語×IT×数学になりますね。

ただ、転職先を確保しているわけではありませんし、転職活動も今はしていません。1年間の留学を前提として転職活動するのは自分には違和感があるのと、留学の経験を踏まえていろいろ考えてみたいという思いがあって、今は積極的には動いていません。

でも仕事あるんか!?っていう不安はものすごくあります。勉強に集中したいという思いと、仕事を確保したいという思いが今でも葛藤しています。

どこで仕事をするかということもあまり考えていません。大阪に帰ってくるのか海外に打って出るのか。

まあ確実に人生の転換期なので、いろいろ考えてみます。

最後に

30代になってくると人生それなりに経験を積んで、いろいろ考えるもんやなぁと感じています。そのとき、自由な選択ができる状況に感謝をしています。これは親、彼女、友人が理解をしてくれて、応援してくれているというのが非常に大きいです。僕を支えてくれている人たちに感謝をしたいと思います。

【ゼロから始める】初期設定のみのLinuxサーバーに既存のRailsアプリとWebサーバーを導入する

環境

CentOS 7

これから導入するもの
Git 2
Ruby 2.4.5
(Rails 5.2.1)
Nginx 1.14.2

アプリ
GitHub – take5553/translator
Reactを使うのでyarnが必要

Railsのインストール

CentOS7にRubyとRuby on Rails環境構築 – Qiita

まずはyumリポジトリの確認・追加

ここを参照。
【サーバー】yumのリポジトリ(EPEL、IUS)を追加 | Takeshi’s Blog

GitやRubyなど必要な物のインストール

  • Git(最新版)
    古いバージョンのものがすでに入っている場合は一旦削除。
# yum -y remove git

IUSのリポジトリ経由でGitをインストール。

# yum --enablerepo=ius install git2u yum-utils

インストール確認。

# git --version
git version 2.16.5
  • bzip2 gcc openssl-devel readline-devel zlib-develなど
    Rubyに必要なものを一気にインストール。
# yum install -y bzip2 gcc openssl-devel readline-devel zlib-devel
  • rbenv
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

~/.bashrcに以下を追記。

# rbenv
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

設定を反映させてインストール確認。

$ source ~/.bashrc
$ rbenv -v # バージョンが表示される。
  • Ruby
$ rbenv install 2.4.5 # 時間がかかる
$ rbenv global 2.4.5 # インストールしたバージョンを指定
$ ruby -v # Rubyが実行できることを確認
  • bundler
$ gem install bundler
  • Node.jsのバージョン管理ツールnvm
    cURLを使ってインストール
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
$ source ~/.bashrc

インストール確認

$ nvm --version
0.34.0
  • Node.jsのインストール
$ nvm install stable
$ node -v
v11.12.0
  • yarnのインストール
$ npm install yarn -g
  • ImageMagickのインストール
    まず準備物から。
# yum install -y fftw3 libXt libtool-ltdl

その後、ibsと本体とdevelを持ってくる。

# yum install -y https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-libs-7.0.8-34.x86_64.rpm
# yum install -y https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-7.0.8-34.x86_64.rpm
# yum install -y https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick-devel-7.0.8-34.x86_64.rpm

インストール確認。

# convert -version
Version: ImageMagick 7.0.8-34 Q16 x86_64 2019-03-13 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib jng jp2 jpeg lcms ltdl lzma openexr pangocairo png ps rsvg tiff webp wmf x xml zlib

RailsのアプリをGithubから引っ張ってきて、Railsサーバー起動まで

  • 既存のアプリを持ってくる
$ git clone https://github.com/take5553/translator.git

このとき、「translator」ディレクトリが直下にできるので、これ以降の作業はその中に入ってやる。
cloneだけだとmasterだけ持ってくるみたい。
takeブランチが最新なので、ブランチを切ってそっちにtakeブランチをpullする。

$ git checkout take
$ git pull origin take
  • credentials.yml.enc用のmaster.keyをアップロードする。
    ローカルのmaster.keyが置いてある場所に移動、またはそこでPowerShell起動して
> scp -P (SSH用ポート) master.key (ユーザー名)@(サーバーのIP):~/translator/config
  • 必要なGemをインストール
$ bundle install

もしここでSQLite3関連のエラーが出た場合は

# yum install sqlite-devel

をしてから、再度bundle installをするとGemのインストールが成功するはず。

  • Reactのためのもろもろインストール。
$ yarn install
  • いよいよRailsサーバー立ち上げ
$ bundle exec rails server

そしてブラウザを立ち上げて(サーバーのIPアドレス):3000にアクセスして動作確認。

Nginxのインストール

CentOS 7 (5, 6) で “安定版 (最新版)” のNginxをインストールする方法 – Qiita

まずyumのリポジトリを自分で作成。

# vim /etc/yum.repos.d/nginx.repo

そして以下を記述。

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

そしてyumでインストール。

# yum -y --enablerepo=nginx install nginx
# nginx -v
nginx version: nginx/1.14.2

最新の安定版かどうかはここで確認。

NginxとRailsをUnicornで連携させる(Developmentモード)

Unicornのインストール

今回のアプリにはすでにUnicornが入っているので割愛。

設定ファイルを確認

これも今回のアプリにはすでに設定ファイルが作成されているので、注意点だけ。

  • config/unicorn.rb
listen '/home/(ユーザー名)/translator/tmp/unicorn.sock'
pid    '/home/(ユーザー名)/translator/tmp/unicorn.pid'

になっているか確認。

  • lib/tasks/unicorn.rake
  task(:start) {
    config = Rails.root.join('config', 'unicorn.rb')
    sh "unicorn -c #{config} -E development -D"
  }
 
File.read("/home/(ユーザー名)/translator/tmp/unicorn.pid").to_i

になっているか確認。

Unicorn起動テスト

Railsのプロジェクトフォルダで

$ rake unicorn:start
unicorn -c /home/(ユーザー名)/translator/config/unicorn.rb -E development -D

この1行が表示されたら起動成功。
確認は

$ ps -ef | grep unicorn | grep -v grep

このコマンドで3行か4行ぐらい出てくればOK。起動していなければ何も出てこない。

Nginxの設定

まずデフォルトの設定ファイルを適当に移動。

# mv /etc/nginx/conf.d/default.conf (適当な場所)

独自の設定ファイルを作成。

# vim /etc/nginx/conf.d/rails.conf

以下を記述。

upstream unicorn {
    server  unix:/home/(ユーザー名)/translator/tmp/unicorn.sock;
}

server {
    listen       80;
    server_name  (サーバーのIPアドレス);

    access_log  /var/log/nginx/access.log;
    error_log   /var/log/nginx/error.log;

    root /home/(ユーザー名)/translator/public;

    client_max_body_size 100m;
    error_page  404              /404.html;
    error_page  500 502 503 504  /500.html;
    try_files   $uri/index.html $uri @unicorn;

    location @unicorn {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://unicorn;
    }
}

Nginxが起動しているかどうか確認。

$ systemctl status nginx

起動していなければ起動。

# systemctl start nginx

起動していれば再起動。

# systemctl restart nginx

権限の設定

chmodでの設定。

$ chmod 701 /home/(ユーザー名)

これでブラウザでサーバーのIPにアクセスすればアプリが動くはずだけど、
もしSELinuxが動いてる場合はアクセスが遮断される。
SELinuxが原因かどうかは

# setenforce 0

にしてみて、再度ブラウザからサーバーのIPにアクセスする。
アプリが表示されたらSELinuxの設定に取り掛かる。

参考

# cat /var/log/audit/audit.log | grep nginx | audit2allow # これで設定の変更内容を事前に確認
# grep nginx /var/log/audit/audit.log | audit2allow -M nginx
# semodule -i nginx.pp

これでアプリが無事表示される。

NginxとRailsをUnicornで連携させる(Productionモード)

いよいよ最後の仕上げ。

まずUnicornを停止

Railsのプロジェクトフォルダに移動して

$ rake unicorn:stop

Unicornの設定ファイルを書き換え

lib/tasks/unicorn.rakeを開き、7行目のdevelopmentと書かれている部分をproductionに変更

アセットパイプラインのプリコンパイル

$ rake assets:precompile RAILS_ENV=production

起動の儀

$ rake unicorn:start
# systemctl start nginx # もしnginxが起動していなければ

お疲れ様でした。

参考

全ての出発点
【CentOS 7】Nginx + Unicorn で Rails アプリケーションを本番環境で立ち上げる方法 – Qiita

【Linuxサーバー】ServersMan@VPSでCentOS7はオススメできない

どういうことか

yum updateをすると以下のようなエラーが出る。

Error: systemd conflicts with initscripts-9.49.17-1.el7_0.1.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest

このinitscriptsのアップデートでエラーが出るのが問題で、yum updateだけじゃなく、他のツールをインストールする時にも依存関係でこのエラーが出る。ということは必要なツールをインストールまたはアップデートできない。

実際このエラーを回避しながら運用する方法があるのかもしれないけど、自分はRailsのアプリをインストールするためのRubyをインストールするためのrbenvをインストールするためのopenssl-develがインストールできなかったので諦めました。

エラー出る段階が早すぎて、回避策調べる気が起こらん。

参考
CentOS 7と相性が悪いVPS | 技術系のメモ

他の人も結構書いてる

Google検索

エラー報告から使えん!っていう記事まで。

逆に言うと

initscriptsのアップデートができるようになれば安く使える良いサーバーってことかな?

【Linuxサーバー】Windows標準のSSHクライアントで接続したときのVimの表示色を変える

参考

Windows10標準搭載SSH経由のVim表示色がおかしいので変更してみた

手順

まずは目的のサーバーに接続。

一時的に色を変更する場合

Vimエディタ開いているときに以下のコマンドを打つ。

colorscheme koehler

永続的に色を変更する場合

Vimの設定ファイルを作成し、開く。

$ vim /home/ユーザー名/.vimrc

そして以下を記述し保存終了。

colorscheme koehler

rootユーザーの設定を変更する場合は

vim /root/.vimrc

で編集する。

【Linuxサーバー】yumのリポジトリ(EPEL、IUS)を追加

概要

yumのリポジトリを追加する方法。ただしメジャーなEPEL、IUSのみ。

環境

CentOS 7

状態の確認

# yum repolist all

EPELを追加

# yum install epel-release

EPELは安定版を配布している。(多分)

IUSを追加

# yum -y install https://centos7.iuscommunity.org/ius-release.rpm

IUSは最新版を配布している。(多分)
でも最新版はセキュリティホールがあるかもしれないので、普段は使わないようにする。
設定ファイルを開く。

# vim /etc/yum.repos.d/ius.repo

enabled=1enabled=0にする。
実際にIUSリポジトリを指定してyumコマンドで何かをインストールするときは、以下のようにする。

# yum --enablerepo=ius install (パッケージ名)

IUSリポジトリ追加時の注意
dream.jpのサーバーで上記の方法をやってみたら「cannot open」というErrorが出で、wget+--no-check-certificateで無理やりダウンロードするみたいな手順になった。
以下が手順。

設定パッケージをダウンロード。

$ wget https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/ius-release-1.0-15.ius.centos7.noarch.rpm --no-check-certificate

ダウンロード先のアドレスの最新版はここで確認
ダウンロードしたものをインストール。

# rpm -Uvh ius-release-1.0-15.ius.centos7.noarch.rpm

うまくいけばこっちでも可

参考

古い記事だけど、yumで困ったら。

【yum】yumが動かないときの簡易対処方法集(IOError、Trying other mirror、Determining fastest mirrors、フリーズ等) – Qiita

【ゼロから始める】VPSサーバー立ち上げから接続の初期設定まで

環境

CentOS 7
Windows 10(8以前なら、SSHクライアントがあれば問題なし)

※参考
サーバーを借りたところ:カゴヤのVPS

VPSサーバー契約~OS導入

この辺は管理会社の流れに乗って行けばよい

もらえるものの例

  • サーバーのIP(絶対もらえる)
  • ログインID(多分root)
  • ログインパスワード
  • 会員ポータルサイト用、またはサーバー管理画面用ログインID
  • 会員ポータルサイト用、またはサーバー管理画面用パスワード
  • SSH接続用ポート

※レンタル会社によって色々
カゴヤのVPS では、会員登録してからサーバー(インスタンス)を作るタイプで、作るときに公開鍵と秘密鍵を作らされる。

コマンドプロンプト(またはPowerShell)での操作

コマンドプロンプト、またはPowerShellを立ち上げる。
例えばコマンドプロンプトを立ち上げると

Microsoft Windows [Version 10.0.17134.648]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\(どこかのフォルダ名)> _

という画面が出る。PowerShellも同じような画面。
詳しい使い方はそれぞれおググり下さい。
以下、コマンドプロンプト(またはPowerShell)での操作を

> (コマンド)

と表記する。「大なり(>)」記号が頭についているときはコマンドプロンプト。

SSHでサーバーに接続できることを確認する

> ssh root@(IPアドレス)

あるいはSSHクライアントを使っても可。
初接続の時はfingerprintがなんちゃらかんちゃらと聞かれるのでyesと打つ。
次にログインパスワードを聞かれるのでサーバー会社からもらったパスワードを打つ。
もしSSH接続用ポート番号をもらっているなら

> ssh root@(IPアドレス) -p (ポート番号)

と打つと接続できる。
もしカゴヤのVPSのように事前に用意された秘密鍵が必要だったら

> ssh root@(IPアドレス) -i (秘密鍵までのフルパス)

と打つ。
無事ログインできると

[root@(サーバー名) ~]# _

みたいな表示が出る。(多分)
root権限でログインしている状態を表している。
これ以降、root権限でログインしている状態で何かコマンドを打つことを

# (コマンド)

と表記する。

OSのアップデート

rootユーザーで以下のコマンドを打つ。

# yum update

全自動で全ての更新チェックをしてくれます。

dream.jpはアップデートできなかった。
※どうも仕様っぽいので、そういう場合はレンタル会社を変えましょう

ユーザーの作成、パスワード設定

# useradd (ユーザー名)

で、ユーザーが作成される

# passwd (ユーザー名)
Changing password for user (ユーザー名).
New password: <画面にパスワードは表示されません>
Retype new password: <もう一度入力します>
passwd: all authentication tokens updated successfully.

でパスワード設定完了。強度がないと警告される。8文字以上推奨。

作ったユーザーでSSH接続できるかどうか

一旦ログアウトする。

# exit

exitコマンドでログアウトできる。
その後、以下を打つ。

> ssh (ユーザー名)@(IPアドレス)

先ほど作ったパスワードを求められるので入力。

※パスワード入力が出なかったらパスワードログインが初期設定の段階で不許可になっているので、後述のsshd_configを先に開いて、PasswordAuthenticationを一時的にyesに書き換えておく

無事ログインできたら

[ユーザー名@サーバー名 ~]$ _

みたいな表示になるはず。
これは管理者権限を持たないユーザーがログインしている状態を表す。
これ以降、この状態でコマンドを打つことを

$ (コマンド)

と表記する。
先頭の記号に注意して見分けてね。

公開鍵認証を使ったログイン設定と確認

まずはどうにかして公開鍵id_rsa.pubと秘密鍵id_rsaを作成。その後、id_rsa.pubのみをscpでサーバーのユーザーホームディレクトリにアップロード。

> scp (ローカルにあるid_rsa.pubのパス) (ユーザーID)@(サーバーのIP):~/

鍵の作り方、およびscpコマンドの詳しい使い方はおググり下さい。

そして、先ほど作ったユーザーでログインした後

$ cd                                    # 確実にホームディレクトリに移動  
$ mkdir .ssh                            # ディレクトリ作成  
$ chmod 700 .ssh                       # 自分以外のアクセスを禁止  
$ mv id_rsa.pub .ssh/authorized_keys    # 公開鍵リスト作成  
$ chmod 600 .ssh/authorized_keys        # 自分以外の読み書きを禁止

を順番に打つ。
※自分はこのときなぜかchmod 700 .sshがちゃんと実行されなかったみたいで、後からハマりました。

一般ユーザーでsudoコマンドが使えるようにする

$ su
Password: <rootのパスワードを入力>

これで、一般ユーザーからrootユーザーに変身できるので、

# usermod -G wheel (ユーザー名)         # ユーザを wheel グループに追加

を打つ。
次にwheelグループにsudo権限を与えるために設定ファイルを開く。

# visudo

これはviエディタを使って特殊な設定ファイルを開くことになる。
viエディタの使い方はおググり下さい。
※先にviエディタの使い方を調べないとハマるよ!

開いたら

## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL

%wheelの前の#を削除する。
これでsudo権限が与えられる。
※最初から#が無い場合もある。

確認は一旦変身を解除して一般ユーザーに戻って

# exit
$

以下を打つ。

$ sudo id
[sudo] password for (ユーザー名): (一般ユーザーのパスワード)  
uid=0(root) gid=0(root) groups=0(root)

idコマンドは今ログイン中のユーザーのID、所属グループのIDなどが表示される。(らしい)
これをsudo idとするとrootのIDが表示される。

rootアカウントでのログインを不許可&パスワード認証を不許可など

まずはバックアップ用に/etc/ssh/sshd_configをどこかにコピー。
そして、以下のコマンドを打って、viエディタでsshd_configファイルを開く。

$ sudo vi /etc/ssh/sshd_config

その後、

#PermitRootLogin yes         # root でのログインを許可するかどうか
PermitRootLogin no           # yes を「no」(許可しない)に

#PasswordAuthentication yes  # パスワード認証を許可するかどうか
PasswordAuthentication no    # yes を「no」に

#ChallengeResponseAuthentication yes  # チャレンジレスポンス型の認証をするかどうか
ChallengeResponseAuthentication no   # yesを「no」に

#MaxStartups 10:30:100       # SSHでの同時接続数に関する設定
MaxStartups 5:80:8           # 5つの同時接続を許可、それを超えると80%の確率で拒否、8を超えると全部拒否

Port 22
Port ****         # ssh接続のときに使用するポートを追加(後述)

としてファイルを保存。
rootログイン不許可、パスワード認証不許可と、開いたついでに他の設定も色々と変更。
編集が終わったら保存終了して

$ sudo systemctl restart sshd

として、sshdを再起動。
(SELinuxの設定が終わるまでは再起動できないかも)
sshdがちゃんと起動しているかどうかの確認は

$ sudo systemctl status sshd

で、Active: active (running)が表示されているかどうかを確認。
また、変更したポートがちゃんと空いてるかどうかは以下の通り。

$ ssh root@localhost -p ****
The authenticity of host '[localhost]:**** ([::1]:****)' can't be established.
ECDSA key fingerprint is ****.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:****' (ECDSA) to the list of known hosts.
Permission denied (publickey).

rootではログインできない設定をしているのでログインできません。

また、新しくコマンドプロンプト画面を立ち上げて、再度一般ユーザーでSSH接続を試みてみる。
このとき、今まで開いていたウィンドウは絶対閉じてはいけない。

> ssh (ユーザー名)@(IPアドレス)

ちゃんと設定できていたら、パスワードも聞かれずに(あるいはrsa鍵使用のためのパスフレーズだけ聞かれて)ログインできる。
ログインできない場合は設定がちゃんとできていないので、もう一度上から手順を見直す。
ちなみに今まで開いていたウィンドウを閉じてしまい、かつ設定ミスからログインできなくなってしまった場合、そのサーバーには誰もSSHでログインできない。
こういう場合はサーバー会社のサーバー管理画面からサーバーのコンソールを開くとパスワードでログインできるようになっている(詳しくはサーバー会社に問い合わせること)ので、設定を一から見直す。
どうしてもダメならサーバーを初期化して一からやり直そう。まだ傷は浅いはず。

SSH接続のときのポートを追加(SELinuxの設定)

※以下はSSH接続用ポートの変更手順です。
dream.jpは最初からポートを変更しているので以下の手順は全て不要。

SELinuxの状態を確認するために以下のコマンドを打つ。

# getenforce

結果、Enforcingと出ればSELinuxが有効になっている。無ければ無しでファイアーウォールの設定に進もう。

SELinuxの設定を変更するためのsemanageというコマンドを使うためpolicycoreutils-pythonが入っているかどうかの確認。

$ rpm -q policycoreutils-python

このコマンドが何も返さなければインストールされていないので、以下のコマンドでインストールする。

# yum install policycoreutils-python

sshdの待ち受けポートとしてTCPの番号を許可

# semanage port -a -t ssh_port_t -p tcp ****

ちゃんとできているか確認するためには

# semanage port -l| grep ssh
ssh_port_t tcp ****, 22

この段階でsshdを再起動すれば、多分ちゃんと起動する。

# systemctl restart sshd

無事再起動されたかどうかは以下のコマンドで確認。

$ ps axuww | grep sshd

/usr/sbin/sshd -Dという行があれば大丈夫。
TCPのポート番号でちゃんと待ち受けてるかどうかの確認を念のため。

$ ss -t -l -n

SSH接続のときのポートを追加(firewalldの設定)

状態確認。

# systemctl status firewalld

active (runnning)があればfirewalldが動いている。
※なお、VPSによってはfirewalldが起動できないものもある。(open VZとかKVMとかのコンテナ型のVPSはkernelを共有してるからそうなるらしい。ここの受け売り。)
※起動できない場合はfirewalld関連の設定は全スルー
※open VZについてはここを参考。
※コンテナ型についてはここを参考。
※KVMについてはここを参考。

公開されているサービス(ポート)を確認。

# firewall-cmd --list-services --zone=public --permanent

これでsshが出てきたらOK。

次に設定ファイルssh.xmlを、ssh-alt.xmlという名前でコピーして、

# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-alt.xml

それを開いて編集。

# vi /etc/firewalld/services/ssh-alt.xml

具体的には

<port protocol="tcp" port="22"/> #これを削除
<port protocol="tcp" port="****"/> # これを追加

という変更。
そして、設定ファイルを読み込ませて、firewalldを再起動。

# firewall-cmd --permanent --add-service=ssh-alt
# firewall-cmd --reload

確認は

# firewall-cmd –list-all

これで、servicesのところにssh-altが追加されているはず。

それぞれの設定から既存のポートを取り除く

SELinuxから

# semanage port --delete --type ssh_port_t --proto tcp 22

できなければ無理にしなくてもよい。

確認は

# semanage port --list | grep ssh

次にfirewalld。

# firewall-cmd --permanent --remove-service=ssh
# firewall-cmd --reload

最後にsshd。

$ sudo vi /etc/ssh/sshd_config

してからPort 22を削除。
そして再びsshdを再起動。

# systemctl reload sshd

お疲れ様でした。

【WordPress】記事の中でソースコードを見やすく表示させる

概要

  • 「SyntaxHighlighter Evolved」というプラグインを入れる。
  • インライン要素としてハイライトするならテーマを自分で拡張する

環境

WordPress 5.1
エディタ:Gutenberg
テーマ:Twenty Eleven

※他のテーマだとこんなことする必要はないかもしれない

詳細

ソースコードをハイライトする

「SyntaxHighlighter Evolved」というプラグインを導入。

新規投稿画面(Gutenberg)で、ブロックを追加するときに「Syntaxhighlight Code」というブロックを追加して、その中にコードを書いていく。

インライン要素をハイライトする

WordPressの管理画面→「外観」→「カスタマイズ」→「追加CSS」に以下を記述。

code {
    padding: 2px;
    border-radius: 2px;
    color: #23282d;
    background: #f3f4f5;
}

【プログラミング問題】百人一首問題

概要

国語の試験でこんな問題があったとします。

百人一首について、次の10個の上の句について、正しい下の句を選び、記号で答えよ。

(10個の上の句と、10個の選択肢が並ぶ)

これを適当に答えて、10問全部外す確率を求めよ。

・・・というのを数学的に考えて答えを出すのは、意外と大変です。

なので、プログラムを組んで「実際に全事象の中から全問外す事象を全て数え上げよ」というのが問題。

言語は何でもいいです。僕はPythonを使いました。

ちょっとチャレンジしてみようと思う人のために、解答は下の方に書きます。スクロールしてみてください。
























解答

実際の国語の問題はア~コから選べみたいな感じだと思うんですが、Pythonで扱いやすくするために、1~10の数字の順列を全パターン作って、以下のように調べました。

全ての順列に対して

  • n番目がnかどうか

をチェックして、引っかかったらループ抜け。無事最後までチェックをスルーすることができたらgood_sampleにカウントを1つ追加、という感じでやりました。

以下コード。

import itertools
import numpy as np

a = np.array(list(itertools.permutations(range(10)))) # 10個の順列の全てのパターンを生成

total = a.shape[0] # -> 3628800
column = a.shape[1] # -> 10
good_sample = 0

for i in range(total):

    # 順列を一つ取り出す
    b = a[i]
    flg = True

    # n番目がnかどうかチェック
    for j in range(column):
        if b[j] == j:
            flg = False
            break

    # もしチェックに引っかからなければ
    if flg:
        good_sample += 1

print(str(good_sample) + "/" + str(total))
print(str(good_sample/total))

出力は以下の通り。


1334961/3628800


0.3678794642857143

ということで約36.8%

元々は国語の先生のぼやきから

「10問あったら適当に答えても1問ぐらい合うやろ・・・なんで全部外すねん・・・」

ということで求めたら意外と確率は高かった。残念。