20190405のLinuxに関する記事は8件です。

無料SSLサーバー証明書「Let's Encrypt」を使ってみる①

というわけで、Chrome等のブラウザが常時SSL化され、httpのサイトは「保護されてない通信」と警告が出るようになってます。

サイト管理者となると、そういった警告は嫌であるので、常時SSL化に対応してみたいと思います。

常時SSL化するにあたり証明書を取得するには、いままであれば有料の証明書しかなかったですが、2016年4月に無料で証明書を発行できる認証局ができました。

それが「Let's Encrypt」であります。

「Let's Encrypt」をVPSなりAWSのEC2で利用するには、「certbot」というプログラムを使うのが一般的ではあるようですが、使い勝手が非常に悪い(個人的見解です)ので、使い勝手の良い「acme.sh」というのを使ってみたいと思います。

今回は、EC2で「acme.sh」が利用できるまでを紹介したいと思います。

※EC2のインスタンスは「Amazon Linux」をベースにインスタンスが立ち上がっている状態で進めます。
※当然、apacheやnginx等のWEBサーバーを想定してます。

(1)githubからダウンロードするための準備

gitコマンドをインストールします。

# yum -y install git

(2)「acme.sh」をgithubからダウンロード

# git clone https://github.com/Neilpang/acme.sh

(3)環境設定をします。

「acme.sh」をインストールするのと同時に設定ファイルの保存ディレクトリや発行したSSL証明書を保存するディレクトリの設定をしています。
併せて、更新するためのcron設定もされます。

# cd acme.sh
# ./acme.sh --install --home ~/.acme.sh --config-home ~/.acme.sh/data --certhome /etc/httpd/certs
# source ~/.bashrc

(4)インストールできたか確認!

コマンドを実行するとバージョン情報が表示されます。

# acme.sh --version

以上で「acme.sh」を利用できる状態までの手順でした。

次は、実際に証明書を取得する手順をお伝えできればと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows10環境捨ててUbuntuにした結果...

Windows10環境捨ててUbuntuにした話

どうも、タイトルにもあるとおり、最近ずっと使用していたWindowsの自宅PCのOSを変更しました!

私は仕事ではwindows10とUbuntuのデュアルブート環境を使っているのですが、自宅のPCでもUbuntuを使用したいと思い、思い切ってWindows環境を捨ててみました!

結果から申しますと、今の所、不便はなく快適です!!!

どうしてUbuntuにしたのか

業務でサーバーを触ったり、コードを書いたりする方なら、一度位は改行コードの問題やWindowsの更新にイライラした経験のある人は多いかと思います。

実際に私も業務でCRLFのソースをサーバーに転送してしまった事故になった件の対応とかをした頃があるのでこれって結構多いのかなと思いました。

では、なぜ自宅のマシンまでUbuntu環境にしたのか。

理由はLinuxの操作性が最高だから

これに尽きると思います。

実際、Excelやパワーポイントって自宅で使用することそんなに多くないと思います!

Office関連ならGoogleが提供しているスプレッドシートなりで事足りますし、どうしてもフォーマットが決まっている場合でも互換性のソフトでなんとか耐えきれるのかなと思いました。

それ以外でWindowsに固執している理由はないかなって思います。

実際、仕事でもプライベートでもLinuxを触り始めて1年くらいしか立っていませんがターミナルとかは比べ物にならないくらいLinuxの方が便利です。

Macは使ったことないので操作性はわかりませんが、自宅のPCでインターネットやコーディングくらいしかしない私にとってはWindowsみたいな高級なOSで処理が重たいものを使用している理由がないかなっておもいます。

実際にやった方法

実際にUbuntu化した方法を一応、備忘録として残しておきます。

1, 公式サイトからUbuntuのisoイメージファイルをダウンロードする。
https://www.ubuntu.com/download

2, 4-8GBくらいのUSBメモリをフォーマットしておく
※USBのすべてのデータが消えますので注意

3, Universal USB Installerをインストールして指示に従ってUSBにUbuntuを書き込む

4, 必要なファイルをGoogleDriveとかのクラウドまたは、外部ディスクとかにあげておく。
※もうWindowsに戻れなくなるため忘れずにやりましょう!

5, USBをさしたまま再起動してF2ボタンを連打してBIOSの画面に入る
※BIOS画面自体は怖いものではないので大丈夫です!

6, Bootみたいな項目からUSBを選択してUbuntuに入る。このときwithout installみたいな項目があるのでそれを選択しておく。

7, Ubuntuのデスクトップ画面が出たら、インストールするショートカットがあるのでそれでWindows削除してUbuntuインストールみたいな項目を選択して、指示にしたがう。

上記の手順でWindows削除、Ubuntu化ができると思います。かんたんですね

デュアルブートにする場合はWindowsのパーティションを変更(縮小)して空いた部分をフォーマット、そこにインストールするようにします。

これから

現在はPC1台しかなくUbuntu環境のものしかないので、Windows環境が必要な場面に出くわしたら、ここで共有しようとおもいます。(おそらくないけど。。)

みなさんも、Linux環境使いたい!!仮想環境では遅くて使い物にならん!!ってひとはデュアルブートとかでUbuntu試してみるのもいいかもしれません。

USBで運用していく方法もあるみたいです!

では、今回はこのへんで!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

iostatコマンドの基本的な使い方

はじめに

Linuxの iostatコマンド に使い方について書いてみました。

iostatコマンドの説明

iostatコマンドをオプションをつけずに打つと、CPU使用率と、I/Oデバイスの使用状況を表示してくれます。
上部の avg-cpu: がCUPの使用率で、下部の Device: が、デバイスの使用状況を表しています。
image.png

CPUの使用率のみ表示したい場合は、オプションに c をつけます。
iostat -c

デバイスの使用率のみ表示したい場合は、オプションに d をつけます。
iostat -d

デバイスの使用量の単位がデフォルトで kB の表示になっています。見やすくするため、 MB に変更したい場合は、オプションに m をつけます。残念ですが、 GB で表示するオプションはないようです。
iostat -dm
image.png

デバイスの項目の見方について見ていこう

 項目  説 明          
tps 1秒当たりのHDDへのI/Oリクエスト数の平均 
MB_read/s 1秒当たりのHDDへの読み出し容量の平均   
MB_wrtn/ 1秒当たりのHDDへの書き込み容量の平均   
MB_read HDDへの読み出し容量の総計        
MB_wrtn HDDへの書き込み容量の総計        

MB_read の容量が大きければ、DBにSelect文が大量に発行されていて、MD_write の容量が大きければ、DBにInsert、Update、Delete文が大量に発行されているのだなと判断できる。

表示された数字の見方には注意が必要になる。MB_read/sだが、この値は、現在リアルタイムでDBへのアクセスが発生している数値ではなく、OSが起動してから、現在までの平均値を表示しています。

現在のリアルタイムのMS_read/sを見たい場合はこういうコマンドをうつ。リアルタイムな値を1秒間隔で表示してくれます。
iostat -dm 1

ちなみにだが、このようにオプションの順番を逆にしても同じ結果を表示してくれます。
iostat 1 -dm

2秒間隔で表示したい場合は、オプションに 2 をしてすればOK。これで、2秒間の平均値が表示される事になります。

iostat 2 -dm

ちなみにだが、先頭に表示される1行目だけは、何故だが、平均値が表示されるようになっているので覚えておいて下さい。

t オプションを付けると、計測した時間を表示してくれるので、確かに、2秒間隔で表示してくれているねという事が確認できます。
iostat 2 -dmt
image.png
さて、 Device が3つ表示されています。デバイスの説明です。

Device         説 明            
sda   1台目の物理ハードディスク(プライマリ)
sdb   2台目の物理ハードディスク(セカンダリ)
loop0  ループデバイス             
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

RHELのネットワーク設定備忘録

Red Hat Enterprise Linux や CentOS のネットワークの設定

/etc/sysconfig/network-scripts/ifcfg-xxxxxxファイルを直接書き換えず、nmcliコマンドで設定する方法を備忘録として投稿します。
Tera termを初めて使う方など、ご参考にしてください。

nmcli(Network Manager Comand Line Interface)

  • ネットワークインタフェース(NIC)の確認
$ nmcli d

以下より記載する"インタフェース"の部分は、nmcli d コマンドで出力されたインタフェースをお使いください。

例:$ nmcli c m enp0s3 ipv4.method manual
  • IPアドレスを静的(固定)に設定する。
$ nmcli c m "インタフェース" ipv4.method manual
  • IPアドレスを動的(DHCP)に設定する。
$ nmcli c m "インタフェース" ipv4.method auto
  • IPアドレスを設定する。
$ nmcli c m "インタフェース" ipv4.address "IPアドレス"
(例:$ nmcli c m "インタフェース" ipv4.address 10.1.1.3)
  • IPアドレスにサブネットマスクを設定する。
$ nmcli c m "インタフェース" ipv4.address "IPアドレス/サブネットマスク"
(例:$ nmcli c m "インタフェース" ipv4.address "10.1.1.3/24)
  • デフォルトゲートウェイを設定する。
$ nmcli c m "インタフェース" ipv4.gateway "デフォルトゲートウェイ"
(例:$ nmcli c m "インタフェース" ipv4.address 10.1.1.255)
  • まとめて設定する。

IP:固定 IPアドレス:10.1.1.3 サブネットマスク:255.255.255.0 デフォルトゲートウェイ 10.1.1.255

$ nmcli c m enp0s3 ipv4.method manual ipv4.address 10.1.1.3/24 ipv4.gateway 10.1.1.255
  • ネットワーク再起動(設定が終わったら必ず行ってください。)
$ systemctl restart network

以上です。不備がありましたらコメントよろしくお願いいたします。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxのネットワーク設定備忘録

Red Hat Enterprise Linux や CentOS のネットワークの設定

/etc/sysconfig/network-scripts/ifcfg-xxxxxxファイルを直接書き換えず、nmcliコマンドで設定する方法を備忘録として投稿します。
Tera termを初めて使う方など、ご参考にしてください。

nmcli(Network Manager Comand Line Interface)

  • ネットワークインタフェース(NIC)の確認
$ nmcli d

以下より記載する"インタフェース"の部分は、nmcli d コマンドで出力されたインタフェースをお使いください。

例:$ nmcli c m enp0s3 ipv4.method manual
  • IPアドレスを静的(固定)に設定する。
$ nmcli c m "インタフェース" ipv4.method manual
  • IPアドレスを動的(DHCP)に設定する。
$ nmcli c m "インタフェース" ipv4.method auto
  • IPアドレスを設定する。
$ nmcli c m "インタフェース" ipv4.address "IPアドレス"
(例:$ nmcli c m "インタフェース" ipv4.address 10.1.1.3)
  • IPアドレスにサブネットマスクを設定する。
$ nmcli c m "インタフェース" ipv4.address "IPアドレス/サブネットマスク"
(例:$ nmcli c m "インタフェース" ipv4.address "10.1.1.3/24)
  • デフォルトゲートウェイを設定する。
$ nmcli c m "インタフェース" ipv4.gateway "デフォルトゲートウェイ"
(例:$ nmcli c m "インタフェース" ipv4.address 10.1.1.255)
  • まとめて設定する。

IP:固定 IPアドレス:10.1.1.3 サブネットマスク:255.255.255.0 デフォルトゲートウェイ 10.1.1.255

$ nmcli c m enp0s3 ipv4.method manual ipv4.address 10.1.1.3/24 ipv4.gateway 10.1.1.255
  • ネットワーク再起動(設定が終わったら必ず行ってください。)
$ systemctl restart network

以上です。不備がありましたらコメントよろしくお願いいたします。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UnixとLinuxの違い

Unix・Linuxが何なのか分かっていないのでまず基本的な事をまとめてみました。
随時追記していきますので、間違っている点があったら指摘して頂ければと思います。

Unix

  • UnixはOSの一種で、現存する中でもっとも古いOSのひとつ。
  • 色々なOSの土台になったOS。
  • 特徴としては安全性が高く、また余計な機能が少ないので軽いこと。また安いのも特徴。
  • MaxOSのコマンドもUnixである。

Linux

  • LinuxもOS。
  • だいたいUnixと同じで、色々な所で利用されている。
  • 例えばAndoridのスマートフォンはLinuxだ。

Unixの誕生

  • Unixは1969年にアメリカのベル研究所で開発。
  • 当時OSという考え方そのものがとても新しかった。WindowsもMacOSもなかった。
  • もともとベル研究所はMulticsというOSを作っていたが、作ってみたらおもくて使えない。今みたいな高性能なPCは無いので、全然使い物にならなかった。
  • なので「仕方ない、ゼロから作り直すか・・・」という事でUNICSというOSが作られた。
  • UNICSはOSSで全世界に爆発的に広がっていき、いろんな種類のUNIXが生まれていった。
  • しかしそれでは何も利益が生まれず、開発サイドは面白くないので、ライセンス契約にした。

Linuxの誕生

  • ライセンス契約で制限がつき、「Unix面倒臭い・・・」という気持ちがエンジニアたちの中で生まれてきた。
  • そこでLinuxが誕生した。
  • リーナス・トーバルズというフィンランドの天才大学生がUnixを真似て独自開発。
  • OSSとして公開し、世界中のエンジニアが共に改良していき、高性能なLinuxが誕生し、爆発的に市場に広がっていった。

UnixとLinuxの違い

  • LinuxはUnixを参考にして出来たものだが、ゼロから作っているためUnixの子孫というわけではなく、血の繋がりはなく、いわば親戚みたいなもの。

UnixとLinuxの最も大きな違いは、

Unixは企業が開発して、知的財産権が企業に属している。
(Unixという名前を使わなければ無料で使える)

LinuxはOSSで無料、改変可能、配布自由。

結論的には現状の基礎的な理解としては、親子関係があり、ライセンス形式かどうかの違い。

参考リンク

3分間で人に説明できるようになるUnixとLinuxの違い

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

C言語の時刻・時間を図示してみた

C言語には、扱いにくいと個人的には思っている時間関数があります。
扱いにくかろうと、それ以上のモノを作るスキルはないので大人しく従いますが、どうにも覚えにくかったのでつながりを書いてきます。。

Windows編とかクロックとかタイマーとか増やしていくかも?

Linuxはこっち見て

tl;dr(too long didn't read)

time_correlation_diagram.png

C言語標準:time_t型

1970年1月1日0時0分0秒(UTC)からの経過秒数を示す型。
つまり、このままでは日付も時刻も分からない

構造体定義
#include <time.h>
time_t time(time_t *t);

C言語標準の時刻取得関数。
以下の2通りの使い方があります。

time()の記法
time_t current_time;
time(&current_time); // バッファを与えるとそこに入れてくれる
or
time_t current_time = time(NULL); // 戻り値でもOK

C言語標準:構造体struct tm型

より詳細な日付情報が欲しい場合に用いる。
ログに日付出すときに大活躍しました。
Linux Kernel内でもstruct timespecstruct tmを変換できます。。

定義
struct tm {
    int tm_sec;        /* 秒 (0-60) */
    int tm_min;        /* 分 (0-59) */
    int tm_hour;       /* 時間 (0-23) */
    int tm_mday;       /* 月内の日付 (1-31) */
    int tm_mon;        /* 月 (0-11) */
    int tm_year;       /* 年 - 1900 */
    int tm_wday;       /* 曜日 (0-6, 日曜 = 0) */
    int tm_yday;       /* 年内通算日 (0-365, 1 月 1 日 = 0) */
    int tm_isdst;      /* 夏時間 */
};

time_t型→文字列型

時刻を文字表現にしたいときに使います。

時刻->文字表記
#include <time.h>
char *ctime(const time_t *timep);  // Thread unsafe
char *ctime_r(const time_t *timep, char *buf); // Thread safe
  • C言語標準ctime()
    内部メモリのポインタを返してしまうため、内部メモリが書き換わると受け取った先も変わってしまうスレッドアンセーフな問題を持ります。
  • POSIX限定ctime_r()
    ユーザー側に出力バッファを要求しているため、内部で書き換わったとしても値は保障されます。

time_t型→struct tm型

わざわざtime_t型から変換するのも手間だし、現在時刻のstruct tmを返す関数ぐらいあってもいいじゃんと思うのは私だけですか?
きっと、私が知らないだけですよね。

変換関数
#include <time.h>
// GMT
struct tm *gmtime(const time_t *timep); // Thread unsafe
struct tm *gmtime_r(const time_t *timep, struct tm *result); // Thread safe
// 地域時間
struct tm *localtime(const time_t *timep); // Thread unsafe
struct tm *localtime_r(const time_t *timep, struct tm *result);  // Thread safe

struct tm型→文字列型

変換関数
#include <stdio.h>
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

出力する場合はprintf関数にバラバラに突っ込んでもいいかも。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxにおける時間

Linuxの中には複数の時間の概念があることを最近になって知った。
jiffiesにも綺麗にハメられたことであるし、LinuxとC言語の時間をまとめておく。

※肝心のjiffiesが別記事なったけどw

Linuxの時間概念

Linux Kernelの中には、複数の時間システムが存在する。

  • timeval
  • timespec
  • ktime_t
  • jiffies

構造体timeval

POSIX環境での時間構造体。
理由は分からないが、どうやら非推奨らしい。

構造体定義
#include <sys/time.h>
struct timeval {
    time_t      tv_sec;     /* Seconds. */
    suseconds_t tv_usec;    /* Microseconds. */
};

POSIX環境で使用できる時間構造体の一つ。
次に紹介するstruc timespecと非常によく似た構造体である。

  • tv_sec time()の戻り値と同値。
  • tv_usec 範囲は0~999,999

gettimeofday()によってUNIX時間を表現した値が入ったインスタンスが取得できる。

構造体timespec

C11で採用されたらしい新しい時間構造体。

構造体定義
#include <time.h>
struct timespec {
  time_t tv_sec; /* Seconds.  */
  long tv_nsec;  /* Nanoseconds.  */
};

元々、struct timespecはPOSIX環境で定義されていた時間構造体らしい(知らん)。

  • tv_sec time()の戻り値と同値。
  • tv_nsec 範囲は0~999,999,999

こっちの方が、struct timevalより記録粒度が細かい。
(細かく正確に測定できるとは言ってない。)
さらには、OSのAPIを直接使わなくていいので、移植性が高い。

……誰かstruct timevalの方の優位性を教えて欲しい、偉い人よ。

あと、これ何でか知らないけどLinux Kernel上でも使えるよね。
#include <linux/time.h>すればstruct timespecstruct tmに変換したりできる。

変数ktime_t

1/100,000,000(ナノ)秒単位での時間または時刻を格納するために使われる。
粒度はstruct timespecと同じ。

ただし、こっちはKernel空間の変数。
Linux Kernel内でKerel Timerとして使われる。

変数定義
#include <linux/ktime.h>

union ktime {
        s64     tv64;
#if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR)
        struct {
# ifdef __BIG_ENDIAN
        s32     sec, nsec;
# else
        s32     nsec, sec;
# endif
        } tv;
#endif
};

複雑な定義だが、以下に分岐する。

  • 64bit環境
    64bit長変数1つだけ。
  • 32bit Big Endian 環境
    32bit長変数2つでメモリ消費量を合わせている。
    元がunion定義なので、64bit <--> 32bitの環境差を吸収している。
    この定義スゴイよな。俺も仕事でやったわ。
  • 32bit Little Endian 環境
    32bit Big Endianの定義の順番を入れ替えただけ。

番外編:time_t

C言語は別記事で。

変数Jiffies

ハマったので別記事にしました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む