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

サーバー仮想化についてまとめてみた

はじめに

Lpic304にサーバー仮想化がでてきたのでサーバー仮想化についてまとめてみ

仮想化方式の種類

サーバー仮想化するためのソフトウェアを仮想化ソフトウェア仮想マシンモニタ(VMM)と呼ぶ

仮想化ソフトウェアの実装方式

ホストOS型

ホストOS上で仮想化ソフトウェアと仮想マシンを動かす方式。アプリケーション開発でWindowsにvirtualboxを入れてLinuxを動かすなど。

  • VMware Workstation
  • VirtualBox

ハイパーバイザ型

ホストOSがなく、ハイパーバイザがOSのような動きをする。ホストOSを介さないのでホスト型よりパフォーマンスがよい。現在の主流らしい。Dockerとかはweb系企業が使っているイメージ。

  • VMware ESXi

コンテナ型

Docker!!

ハイパーバイザ型

準仮想化

  • ゲストOSのコードに改変が必要
    • ゲストOSのシステムコールをハイパーバイザが処理。この命令をハイパーバイザコールという。なのでゲストOSのシステムコールをハイパーバイザーコールに置き換えるように改変する必要がある。ハイパーバイザーコールが物理ハードウェアの処理をするイメージ
    • 書き換える必要があるのでLinuxのようなオープンソースのOSを利用することが前提

完全仮想化

  • ゲスト改変必要なし
  • 仮想ハードウェアでハードウェアをシュミレーションする。IO命令やメモリ管理などソフトウェアレベルで管理

CPUモード

ゲストOSは特権CPU命令を直接実行することができない。ハイパーバイザーコールやバイナリトランスレーションやCPU仮想化支援機能が利用される。

CPU仮想化支援機能

ゲストOSがCPUを

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

共通のヘッダを持つファイルを結合する小技

やりたいこと

1.dat
head1 head2 head3
1 2 3
4 5 6
2.dat
head1 head2 head3
7 8 9
10 11 12
3.dat
head1 head2 head3
13 14 15
16 17 18

↑こういったファイル群を

↓こうする

merged.dat
head1 head2 head3
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18

方法

$ awk 'NR==1 || FNR!=1' [1-3].dat > merged.dat
# 処理しているファイル全体における最初の行(ここでは"1.dat"のヘッダ) or 各ファイルの最初の行以外を出力する。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MBR削除とその確認方法

SRE的に実行したコマンドは必ず結果を確認したいやーつ

# 現在のMBRを表示
dd if=/dev/sda bs=512 count=1 | hexdump -C

# Erase MBR
dd if=/dev/zero of=/dev/sda bs=512 count=1

# 削除後のMBRを表示
dd if=/dev/sda bs=512 count=1 | hexdump -C

e.g.

# show MBR
[root@hostname:~]#  dd if=/dev/sda bs=512 count=1 | hexdump -C
1+0 records in
1+0 records out
512 bytes (512 B) copied, 8.1932e-05 s, 6.2 MB/s
00000000  eb 63 90 00 00 00 00 00  00 00 00 00 00 00 00 00  |.c..............|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
省略
*
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

# erase MBR 
[root@hostname:~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 7.9788e-05 s, 6.4 MB/s

# show MBR
[root@hostname:~]#  dd if=/dev/sda bs=512 count=1 | hexdump -C
1+0 records in
1+0 records out
512 bytes (512 B) copied, 6.5033e-05 s, 7.9 MB/s
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

自分用メモ linuxネットワーキングプログラミング

前書き

基本ネットや書籍から拾ってきた内容を雑にメモしているだけ
文面以上に内容をもっと深堀りたかったら、リンク貼るのでそこを見てください
ちなみにITインフラ技術の実験室ってサイトが良すぎたので何かあったら基本的にそこに全部載ってる

用語

ファイル

ファイルはインターフェイスです
ファイルインターフェイスが実装されたオブジェクトを操作すると、ローカルの補助記憶装置に対して読み書きできたり、通信相手と送受信できたりします。

  • 補助記憶装置に対して読み書きするファイル[クラス|オブジェクト]は単純にファイルと呼ぶ
  • プロセス間通信やtcp/udp等を利用する際に利用するファイル[クラス|オブジェクト]はソケットファイルと呼ぶ

記述子 (descriptor

識別子は識別する為のもの。
記述子は記述する為のもの。記述するためには識別したり、読み込んだりする必要もある。
なので、記述子は識別子よりも強力。
記述子は基本的に特定の関数やクラス等で引数として与え、その関数やクラスを利用して読み書きができるようになる。
Kernelレベルで実装されているらしい。

記述子には
* socket descriptor
* socket file descriptor
* file descriptor
* field descriptor
等、その他沢山ある。 (発案の数だけある

参考資料:
https://unix.stackexchange.com/questions/233237/etymology-of-descriptor-in-file-descriptor/295746#295746
https://rust-jp.slack.com/archives/C8FLSR5F1/p1571635210176900

Cでソケットを扱う際の各種関数等の仕様

この内容の軽いメモ
https://www.infra.jp/programming/network_programming_3.html#multiplexing

accept

待機待ち行列があれば、そこから1つ取り出す。
なければ、ブロッキングする。

select

引用: https://www.infra.jp/programming/network_programming_3.html#multiplexing

select()はaccept()やrecv()同様、処理をブロックしますが、複数のディスクリプタを同時に見張ることができるため、クライアントからの新規接続や接続中クライアントからの受信など、記述子の変化があった場合にどのような変化かに関わらず処理を先に進められます。
また、各ディスクリプタに変化があるまでブロックするため、CPUパワーを無駄に消費することもありません。

poll

selectより細かく指定できる

EPOLL

数千コネクションでも耐えられる様にチューニングされている。
pollの上位互換だが、linux固有の実装らしい

Cでネットワーキングプログラミングをする

...今時間が無いため後で書く

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

初心者のUNIXコマンドメモ

はじめに

本メモはUNIXのコマンドのメモです。
初心者ですぐ忘れる自分のための備忘録です。
(随時更新)

ls

今いるディレクトリにあるファイル一覧を表示する

コマンド 効果
ls 一覧を表示する
ls -a 一覧を全て表示する(=隠しファイルも含めて全て)
ls -l 一覧を詳細表示する
ls -1 一覧を縦に表示する(=詳細までは不要な場合)
ls -t 一覧を更新時間順に表示する
ls -x 一覧を拡張子毎に表示する

組み合わせて実用的に使用する例は以下の通り

コマンド 効果
ls -la 一覧を全て詳細表示する
ls -lta 一覧を全て詳細表示&更新時間順に表示する

pwd

今いるディレクトリ(=カレントディレクトリ)を表示する
シェルを起動した直後にいるディレクトリのことをホームディレクトリと呼ぶ

コマンド 効果
pwd 今いるディレクトリを表示する

シェルを起動した直後はホームディレクトリとカレントディクトリは同じになる

mkdir

ディレクトリを作成する

コマンド 効果
mkdir xxx ディレクトリ xxx を作成する

cd

ディレクトリを移動する

コマンド 効果
cd xxx ディレクトリ xxx に移動する
cd .. 1つ上のディレクトリに移動する

/ を用いて複数個繋げて適用させることが可能になる

コマンド 効果
cd xxx/xxx/ ディレクトリ xxx/xxx に移動する
cd ../../ 2つ上のディレクトリに移動する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CircleCIでapt-get updateするとコケる

TL;DR

  • circleciでapt-get updateをするとエラーが出て失敗する。

環境

  • circleci/node:9.3.0

sudo apt-get -y -qq update

$ #!/bin/bash -eo pipefail
sudo apt-get -y -qq update
Get:1 http://security.debian.org jessie/updates InRelease [44.9 kB]

Ign http://deb.debian.org jessie InRelease

Get:2 http://deb.debian.org jessie-updates InRelease [7340 B]

Get:3 http://deb.debian.org jessie Release.gpg [2420 B]

Get:4 http://security.debian.org jessie/updates/main amd64 Packages [849 kB]

Get:5 http://deb.debian.org jessie Release [148 kB]

Get:6 http://deb.debian.org jessie/main amd64 Packages [9098 kB]

Fetched 10.2 MB in 1s (8527 kB/s)
W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease  Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file)

E: Some index files failed to download. They have been ignored, or old ones used instead.
Exited with code 100

解決法

-stretchをつけたimageを使えば問題ないらしい。
circleci/node:9.3.0-stretchに変えたら問題なく動いた。

参考

"sudo apt-get update" failing on default images #269
New #269 error with upstream issue with the Debian mirrors #370

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

MQTTのMessageを残らずMySQL(MariaDB)に保存するコマンド

個人的なメモ

db構造

sudo mysql -e "SHOW FULL COLUMNS FROM mqtt.msg"
+-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type          | Collation         | Null | Key | Default | Extra | Privileges                      | Comment |
+-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
| m     | varchar(1124) | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         |
| tm    | int(11)       | NULL              | YES  |     | NULL    |       | select,insert,update,references |         |
+-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+

コマンド

mosquitto_sub -t "#" -v | xargs -I@ sudo mysql -e "insert into mqtt.msg (m,tm)values('@',$(date +%s))"

上記だと、時間が固定になってしまいます。
SQLの方で持ってくるように変更

mosquitto_sub -t "#" -v | xargs -I@ sudo mysql -e "insert into mqtt.msg (m,tm)values('@',UNIX_TIMESTAMP(NOW()))"

課題

・セキュリティ的に問題有り
・トピックとMessageが分割できていない

commentいただけると嬉しいです!

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

How To Configure vsftpd Linux FTP Server In Redhat/Centos/Fedora

ollow the below steps to Configure vsftpd Linux FTP Server In Redhat/Centos/Fedora:
Step: 1 Install Package for Linux FTP Server (Vsftpd Server)
Before we start the configuration of Vsftpd Linux FTP Server we have to install the required packages. To do so refer the below command.

[root@localhost ~]# yum -y install vsftpd # Install Vsftpd Linux FTP Server Package

Read More - https://www.itsmarttricks.com/how-to-configure-vsftpd-linux-ftp-server-in-redhat-centos-fedora/

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