20200319のLinuxに関する記事は7件です。

クラウドネイティブでよく聞くサービス概要

CNCFとは

CNCF(Cloud Native Computing Foundation)とはinux Foundationのプロジェクトで、コンテナ技術の発展と、その進化に関連するテクノロジ業界の連携を支援するための団体。

https://labs.mobingi.com/cncf/

✨ Kubernetes

✨ containerd

✨Envoy

✨ Prometheus

✨ Grafana

✨Fluentd

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

さくらVPSでウェブアプリ公開まで

はじめに

ローカル環境で作ったものをサーバー上にアップロードして公開する流れをまとめます。
その中で詰まった部分などを備忘録的にまとめます。

ざっと流れ

1 さくらVPSを契約
2 Linux環境の構築
3 ドメイン取得
4 ドキュメントルート変更
5 SSL化

1さくらVPS契約

まずはさくらVPSの契約から。
さくらVPS申し込みはこちら
スクリーンショット 2020-03-19 20.49.44.png

14日間お試し期間があるのでその期間に一通りできれば無料でお勉強が可能。
※プランは1Gを選択

登録が完了する下のようなコントロールパネルにログイン。
スクリーンショット 2020-03-19 20.54.35.png

契約したVPSを情報が記載されている。

Linux環境構築

Linuxを勉強するにあたって下記のUdemyの講座を購入。
【3日でできる】はじめてのLinuxサーバー構築入門(CentOS 7・PHP 7・Docker対応)

VPS上にCentOSをインストールしてLAMP環境を構築するまでの流れがわかりやすく勉強できたので個人的にはおすすめ。

Linux環境構築する上で躓いたポイント

・ファイヤーウォールを設定してSSHでログインする
 →ファイヤーウォールを設定したポートを確認
 →更新した内容をリロードし反映させる
 →SSHのサーバーにも反映させるためにデーモンを再起動する

・サーバー上の一般ユーザーと特権(root)ユーザーでできること
一般ユーザー=自分のディレクトリ以下のファイルの読み書きができる
特権(root)ユーザー=管理者権限を持つユーザー
※インストールや設定ファイルの変更には管理者権限が必要

一般ユーザーに管理者権限を与える
rootユーザーの命令は絶対であり間違えてシステムファイルなども削除してしまう可能性があるため、基本的には一般ユーザーに管理者権限を与えて操作を行うことが好ましい。

・サーバーに外部からアクセスできるようにファイヤーウォールの設定変更
→これが設定できないとアクセスできない

これが完了してVPSのIPアドレスに接続するとApacheの標準ページが表示される。

デフォルトのドキュメントルートが/var/www/htmlなので
例えばこの配下にindex.htmlを置くとその中身が表示される。
URLはこんな感じ
xx.xx.xx.xx/index.html

ドメイン取得

IPアドレスのままでも表示はできるが、ウェブアプリを公開するにあたってそのサービスを認知いただくためにドメインの取得は必要。

さくらインターネットやお名前.comなどからドメインを取得する。
※今回はさくらインターネットから取得

ドメインの設定方法に関しては下記リンクを参照
【ドメイン設定】さくらインターネットで取得・管理中のドメインを利用

要するにサーバーのIPアドレスと取得したドメインを紐付けさせる。

設定が完了すると、上記のxx.xx.xx.xx/index.htmlで表示させていたところのIPアドレス部分(xx.xx.xx.xx)を取得したドメイン書き換えても同じようにアクセスできるようになる。

Let's encryptで無料SSL証明書発行してSSL化

無料でSSL証明書を発行するために今回はLets encryptを使用

躓いたポイント
インストールして証明書も発行したのにSSL化されない
→証明書発行してからApacheに設定が必要
/etc/httpd/conf.d/ssl.confに

SSLCertificateFile /etc/letsencrypt/live/[サーバーのドメイン]/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[サーバーのドメイン]/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/[サーバーのドメイン]/chain.pem

それぞれ設定する
参考記事
https://weblabo.oscasierra.net/letsencrypt-2/

ドキュメントルート変更

取得したドメインにアクセスした時にサイトが表示されるようにデフォルトのドキュメントルートを変更する。

この変更を行わないと、例えばデフォルトの/var/www/html配下にexampleディレクトリを作り、その配下にindex.htmlを置いた場合、URLがドメイン/example/index.htmlと少しブサイクになってしまう。

ドメインだけを入力した時にトップページが表示されるように下記の設定を行う。

/etc/httpd/conf/httpd.confの下の方にある<VirtualHost *:80>の中にある
DocumentRootを自分が表示させたいディレクトリに変更する。

上の例であれば/var/www/htmlになっているドキュメントルートを/var/www/html/exampleにすることによってドメインにアクセスした時にindex.htmlの内容が表示される。

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

Linuxのパーティションをいろいろいじってみる

前回の記事でパーティションの分割をしたので、今回は分割したパーティション使えるようにする!

設定項目
①マウント
②ユーザーごとの容量の制限
③権限設定
④マウントポイントにシンボリックリンク設定

①マウント

前回分割した拡張領域の/dev/sda5を以下の順番でマウントしていく。
1,/etc/fstabを編集
2, /dev/sda5にmountコマンドを実行

[root@localhost ~]# fdisk -l
・・・
・・・略
・・・
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     2099199     1048576   83  Linux
/dev/sda2         2099200     8390655     3145728    5  Extended
/dev/sda5         2101248     4198399     1048576   83  Linux ←これ

現在のマウント状態の確認。mountコマンドをそのまま実行する。

[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
・・・
・・・略
・・・
#/dev/sda5が無い
/dev/sda1 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

1,/etc/fstabを編集

先にバックアップをとっておく。

[root@localhost ~]# cp -p /etc/fstab /etc/fstab.bak
[root@localhost ~]# vi /etc/fstab

行末に/dev/sda5 /home2 ext4 defaults 1 2を追加。

各項目の意味
/dev/sda5・・・マウントするデバイスファイル名
/home2・・・/dev/sda5と結びつけるディレクトリ(絶対パス)
ext4・・・ファイルシステムの種類(reiserfs、xfsなど他にもいろいろある)
defaults・・・マウントオプションはデフォルト
1・・・バックアップ必要かどうか(1:必要、2:不要)
2・・・fsckコマンドでチェックを行う時の順序

/etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Jun  1 17:13:31 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=8ac075e3-1124-4bb6-bef7-a6811bf8b870 /                       xfs     defaults        0 0
/swapfile none swap defaults 0 0
/dev/sda5 /home2 ext4 defaults 1 2 ←ここに追加

マウント先のディレクトリ/home2を作ってなかったので作成して、マウントコマンドを実行。

[root@localhost ~]# mkdir /home2
[root@localhost ~]# mount -a
mount: special device /dev/sda5 does not exist

あれ?無いって言われる。でもfdisk -lで出てくるので、デバイスファイルを確認してみる。

[root@localhost ~]# ls /dev/sda*
/dev/sda  /dev/sda1

デバイスファイルが無い。再起動したら、デバイスファイル作られるんじゃないと思って再起動。

[root@localhost ~]# systemctl reboot
grub rescue>
え!

OSが起動しなくなった・・・
PC起動しようとしたら「unknown filesystem」って出て焦ったを参考に対応したが直らず。
さらに調べたら、自分と同じ状況の記事が見つかった。
どうやら、USBかDVDでOS起動して、OSのインストールをやり直すらしい。
今回は仮想マシンを使ってるので、vagrant upし直すことにした。

$ vagrant status
Current machine states:
これを消す
default                   poweroff (virtualbox)

The VM is powered off. To restart the VM, simply run `vagrant up`
$ vagrant destroy ← 削除する
    default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...
7$ vagrant status
Current machine states:
削除された
default                   not created (virtualbox)
$vagrant up  ← 再度up

またふりだしに戻った・・・。次回こそは①〜④まで完成させたい!!

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

unameのオプション -表示順別意味-

環境

GNUコマンド: GNU core utilities version 8.26

unameコマンド概要

Linuxサーバにログインした時等に使う uname コマンドについて調べてみました。
unameは、”システムについて情報を表示する。"コマンドでGNU Coreutilsのひとつです。

オプションの意味と表示順

複数のオプションや ‘-a’ オプションが指定された場合の表示順別にオプションの意味をまとめました。

表示順 表示情報 option 意味 備考
1 kernel-name -s カーネル名を表示する OSによってOS名とカーネル名が同じものと(FreeBSD, HP-UX など)、 違うものがある (GNU/Linux, Solaris など)
2 nodename -n ネットワークノードのホスト名を表示する。 現場ではhostnameの代替としてよく使われる(hostnameだとホスト名を変更可能なので、ポカ除けの意)
3 kernel-release -r カーネルのリリース名を表示する。
4 kernel-version -v カーネルのバージョンを表示する。
5 machine -r マシンのハードウェア名を表示する。 ハードウェア・クラスとかハードウェア・タイプと呼ばれることもある
6 processor -p プロセッサ・タイプを表示する 情報が取得できない場合は、‘unknown’ と表示する。GNU/Linux ディストリビューション同士の間ですら可搬性がない。
7 hardware-platform -i ハードウェア・プラットホームの名前を表示する 情報が取得できない場合は、‘unknown’ と表示する。GNU/Linux ディストリビューション同士の間ですら可搬性がない。
8 operating-system -p オペレーティング・システムの名前を表示する。

processorやhardware-platformで表示されるものは、アーキテクチャやプロセッサにより異なるようです。unameのソース(Cで書かれている)としては、processorを返してくれと言っていても其々のプロセッサが違うものを返して来たらどうしようもないですね。

補足

ちなみに、公式マニュアルには下記のように書いてあり、どこかでスペースで区切られたものは見づらいよね。的なことを言っています。

複数のオプションや ‘-a’ オプションが指定された場合、選択された情報は次の順番で表示される。

kernel-name nodename kernel-release kernel-version
machine processor hardware-platform operating-system

GNU Coreutils 公式マニュアルより引用

参考文献

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

VisualStudio2017でリモートデバッグ

やること

ubuntu環境をdockerで構築し、VisualStudio2017からリモートデバッグを行います。

リモートデバッグを行うコンテナを用意

dockerfile
FROM ubuntu:16.04

# 各種インストール
RUN apt-get update
RUN apt-get install -y openssh-server sudo bash-completion g++ gdb gdbserver rsync git
# SSH用のディレクトリ作成
RUN mkdir /run/sshd
# ユーザーを追加
RUN useradd -m -s /bin/bash ubuntu && gpasswd -a ubuntu sudo
# パスワードを設定
RUN echo 'ubuntu:ubuntu' | chpasswd

# 22番ポートを公開
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
docker-compose
version: '2.3'
services:
  dev:
    build: .
    ports:
    - "2222:22"
    volumes:
    - ../volume:/tmp/data

イメージをビルド/コンテナを起動

$ docker-compose build
$ docker-compose up -d

SSH

$ docker exec -it docker_dev bash

VisualStudio

デバッグを行うプロジェクトを用意

  • 新規作成 > Visual C++ > クロスプラットフォーム > Linux
    • ない場合はインストーラから「C++によるLinux開発」を選択し、インストール

VisualStudio側の設定

  • 接続先の指定
    • ツール > オプション > クロスプラットフォーム > 接続マネージャー > 追加
      • ホスト名:リモート先のIP(localhost)
      • ポート:22番ポートにマッピングされているポート(2222)
      • ユーザー名:ゲストOSのユーザー名(ubuntu)
      • 認証の種類:パスワード
      • パスワード:上記で設定したパスワード(ubuntu)

()は上記で設定した場合の値

デバッグ

  • ソリューションのリビルドを実行
    • ビルド > ソリューションのリビルド
  • Linuxコンソールの表示
    • デバッグ > linux コンソール
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PostgreSQL 10.0 インストール手順

検証環境として作成した手順
今回は OracleLinux6 + PostgreSQL10.0 をインストール

PostgreSQL のソースコード入手
https://www.postgresql.org/ftp/source/

出展:マニュアル
https://www.postgresql.org/docs/10/index.html

postgres用OSユーザー作成

# useradd postgres
# passwd postgres
ユーザー postgres のパスワードを変更。

インストールディレクトリ作成

# mkdir /usr/local/pgsql

ソースファイルを/usr/local/srcへ保存し、解凍しておく

# tar -xvf  postgresql-10.0.tar.bz2
# chown -R postgres:postgres postgresql-10.0
# ls -la
合計 19192
drwxr-xr-x.  3 root     root         4096 11月  7 15:01 2019 .
drwxr-xr-x. 13 root     root         4096 11月  7 14:54 2019 ..
drwxrwxrwx   6 postgres postgres     4096 10月  3 06:15 2017 postgresql-10.0
-rw-r--r--   1 root     root     19639147 11月  7 14:40 2019 postgresql-10.0.tar.bz2

必要パッケージのインストール

# yum -y install readline readline readline-devel
# yum -y install gcc
# yum -y install flex
# yum install zlib-devel
# yum install perl

makeコマンド確認

# make --version
GNU Make 3.81

コンパイル

$ cd ./postgresql-10.0
$ ls
COPYRIGHT       HISTORY  Makefile  aclocal.m4  configure     contrib  src
GNUmakefile.in  INSTALL  README    config      configure.in  doc
$ ./configre
$ make

インストール前のcheck コマンド

$ make check

インストール
sudoを有効にする

#visudo にて以下行を追加する。
postgres   ALL=(ALL)       ALL

$ sudo make install

■環境変数設定

$ vi ~/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
export PATH="$PATH":/usr/local/pgsql/bin
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"

/usr/local/pgsql の所有者を変更する

$ sudo chown postgres:postgres /usr/local/pgsql

DB初期化

$ initdb

postgreSQLサーバーの起動

$ postgres -D /usr/local/pgsql/data/
2019-11-07 16:33:52.702 JST [6119] LOG:  listening on IPv6 address "::1", port 5432
2019-11-07 16:33:52.702 JST [6119] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2019-11-07 16:33:52.752 JST [6119] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2019-11-07 16:33:52.828 JST [6120] LOG:  database system was shut down at 2019-11-07 16:26:45 JST
2019-11-07 16:33:52.861 JST [6119] LOG:  database system is ready to accept connections
^C2019-11-07 16:34:02.694 JST [6119] LOG:  received fast shutdown request
2019-11-07 16:34:02.827 JST [6119] LOG:  aborting any active transactions
2019-11-07 16:34:02.827 JST [6119] LOG:  worker process: logical replication launcher (PID 6126) exited with exit code 1
2019-11-07 16:34:02.827 JST [6121] LOG:  shutting down
2019-11-07 16:34:03.273 JST [6119] LOG:  database system is shut down

起動スクリプトの作成

# install -o root -g root -m 755 /usr/local/src/postgresql-10.0/contrib/start-scripts/linux /etc/rc.d/init.d/pgsql
# chkconfig --add pgsql
# /etc/rc.d/init.d/pgsql start
Starting PostgreSQL: ok

ユーザーとDBの作成

$ createuser posuser
$ createdb -O posuser testdb
$ psql -l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 testdb    | posuser  | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |

リモート接続設定

$ vi /usr/local/pgsql/data/pg_hba.conf
追記
host    all             all             0.0.0.0/0           md5

$ vi /usr/local/pgsql/data/postgresql.conf
追記
listen_addresses = '*'

インストール完了

$ psql
psql (10.0)
Type "help" for help.

postgres=# select version();
                                                   version

---------------------------------------------------------------------------------------------
----------------
 PostgreSQL 10.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-
23.0.1), 64-bit
(1 row)

以上。

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

メディアからリポジトリを作成する方法

パッケージをインストールする際、インストールメディアからリポジトリを作成する手順です。

メディアをマウントする。

# mount /dev/cdrom /media

リポジトリファイルの作成・編集

# vi /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
baseurl=file:///media
/gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

リポジトリとして認識されていることを確認する。

# yum repolist
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
リポジトリー ID                                                                リポジトリー名                                                                                          状態
!dvd                                                                           dvd                                                                                                      4,986
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む