20200321のLinuxに関する記事は6件です。

TCP SACK PANIC(CVE-2019-11477)を読み解くための英文法

CVE-2019-11477

https://access.redhat.com/security/cve/CVE-2019-11477

An integer overflow flaw was found in the way the Linux kernel's networking subsystem processed TCP Selective Acknowledgment (SACK) segments. While processing SACK segments, the Linux kernel's socket buffer (SKB) data structure becomes fragmented. Each fragment is about TCP maximum segment size (MSS) bytes. To efficiently process SACK blocks, the Linux kernel merges multiple fragmented SKBs into one, potentially overflowing the variable holding the number of segments. A remote attacker could use this flaw to crash the Linux kernel by sending a crafted sequence of SACK segments on a TCP connection with small value of TCP MSS, resulting in a denial of service (DoS).

KinuxカーネルのネットワークサブシステムのTCP SACK処理に整数オーバーフローが発見されました。SACKセグメント処理中に、Linuxカーネルソケットバッファ(SKB)データ構造はフラグメントします。各フラグメントはTCP最大セグメントサイズ(MSS)バイトとなります。SACKブロックを効率的に処理するために、Linuxカーネルは複数のフラグメントされたSKBの1つにマージし、セグメント数を保持する変数をオーバーフローさせる可能性があリます。リモートの攻撃者はこの不具合を利用して、TCP MSSの小さいTCPコネクションでSACKセグメントに細工したシークエンスを送信することで、DoS(サービス拒否)攻撃を発生させる可能性があります。

詳細

An integer overflow flaw was found in the way the Linux kernel's networking subsystem processed TCP Selective Acknowledgment (SACK) segments.

KinuxカーネルのネットワークサブシステムのTCP SACK処理に整数オーバーフローが発見される

  • integer overflow flawは整数オーバーフローと訳す
  • 前置詞in(容器の中のイメージ)
    • was found in the way the Linux kernel's networking subsystem processed TCP Selective Acknowledgment (SACK) segments
    • 「the way the Linux kernel's networking subsystem processed TCP Selective Acknowledgment (SACK) segments」が「found」を後ろから説明している

While processing SACK segments, the Linux kernel's socket buffer (SKB) data structure becomes fragmented.

SACKセグメント処理中に、Linuxカーネルソケットバッファ(SKB)データ構造がフラグメントする

  • 接続詞While(従位接続、コントラストのイメージ)
    • While processing SACK segments, the Linux kernel's socket buffer (SKB) data structure becomes fragmented
    • 「While processing SACK segments」という出来事と、「the Linux kernel's socket buffer (SKB) data structure becomes fragmented.」という2つの出来事がコンストラストされているイメージ

Each fragment is about TCP maximum segment size (MSS) bytes.

各フラグメントはTCP最大セグメントサイズ(MSS)バイト

To efficiently process SACK blocks, the Linux kernel merges multiple fragmented SKBs into one, potentially overflowing the variable holding the number of segments.

SACKブロックを効率的に処理するために、Linuxカーネルは複数のフラグメントされたSKBの1つにマージし、セグメント数を保持する変数をオーバーフローさせる可能性がある

  • TO不定詞(主語としてのto)
    • To efficiently process SACK blocks
    • 名詞位置でのTO不定詞は一般的な内容を表す(〜ということは)
    • SACKブロックを効率的に処理するということはことは〜
  • 前置詞into(内部のイメージ)
    • multiple fragmented SKBs into one
    • 「multiple fragmented SKBs」の内部の1つに
  • 前置詞of(リンクを張るイメージ)
    • number of segments
    • segments に数をリンクしているイメージ

A remote attacker could use this flaw to crash the Linux kernel by sending a crafted sequence of SACK segments on a TCP connection with small value of TCP MSS, resulting in a denial of service (DoS).

リモートの攻撃者はこの不具合を利用して、TCP MSSの小さいTCPコネクションでSACKセグメントに細工したシークエンスを送信することで、DoS(サービス拒否)攻撃を発生させる

  • remote attackerはリモートの攻撃者と訳す
  • - flawは不具合と訳す
  • 助動詞could(潜在的な力を表す)
    • A remote attacker could use this flaw
    • 「A remote attacker」は”潜在的に”この不具合を利用できるというイメージ
  • TO不定詞(指し示すイメージ)
    • 「use this flaw」を「crash the Linux kernel by sending a crafted sequence of SACK segments on a TCP connection with small value of TCP MSS」が後ろから説明している 
  • 前置詞by(距離が近いイメージ)
    • crash the Linux kernel by sending a crafted sequence
    • 「sending a crafted sequence」という方法で「crash the Linux kernel」するイメージ
  • 前置詞of(リンクを張るイメージ)
    • sending a crafted sequence of SACK segments
    • 「sending a crafted sequence」が「SACK segments」にリンクしているイメージ
  • 前置詞on(上に乗るイメージ)
    • SACK segments on a TCP connection
    • 「TCP connection」に接触している「SACK segments」のイメージ
  • 前置詞with(つながるイメージ)
    • a TCP connection with small value
    • 「a TCP connection」と「small value」がつながっているイメージ
  • denial of service (DoS)はDoS(サービス拒否)攻撃と訳す

使われている英文法

接続詞

  • 複数の文を組み合わせ流れを作る
  • 等位接続と従位接続の2つのリズムがある
    • 等位接続は=のイメージ
    • 従位接続はコントラストのイメージ

助動詞

  • 伝え手の心理を文に加える

前置詞

  • 位置関係を示す小さな単語
  • 非常に簡単な位置関係を表すだけに、イメージが爆発的に広がる

動詞-ING形

  • 生き生きとした躍動感のイメージ
  • 同時性
  • 主語、目的語、修飾

TO不定詞

  • to + 動詞原形
  • 前置詞toと同じ指し示すイメージ
  • 主語、目的語、修飾、itなどと共に
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspbian初期設定(RaspberryPi4)

前回の続き『RaspberryPi4購入』
Raspbian:10.3
kernel:4.19.97-v7l+ #1294

1. RasbianOS初期設定

NOOBSでOSインストール時にwifi設定を実施していると、OSにもその設定がされた状態でインストールされていました。

1.1. rootのパスワードを設定する

初期状態のラズベリーパイは、「root」にパスワードが設定されていません。

$ sudo passwd root
$ su -

1.2.RasbianOSを最新の状態にする。

$ rpi-update
$ reboot

1.3. 次に、SSHの有効化

$ mkdir /boot/ssh
$ shutdown -r now

1.4. SSHでログイン

SSHにてユーザ pi 初期パスワード raspberryで接続

1.5. ログイン用ユーザーを追加

$ useradd  --group sudo -m -u <uid> <newuser>

1.6. ログイン用ユーザーのパスワード変更

$ passwd <newuser>

1.7. piユーザの削除

userdel -r pi

1.8. IPアドレス固定化

$ vi /etc/dhcpcd.conf

interface eth0
static ip_address=192.168.1.10/24
static routers=192.168.1.1

interface wlan0
static ip_address=192.168.1.30/24
static routers=192.168.1.1

1.9. SSH設定

セキュリティ向上のため、ポートを変更しrootでの直接ログインを拒否し、暗号化キーを有効化し、パスワード認証を無効化し、セッション有効時間を延長しています。※変更箇所のみ記載しております。

$ vi /etc/ssh/sshd_config

Port <PortNo>
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no
ClientAliveInterval 1800
ClientAliveCountMax 3

1.10 暗号化キーの作成

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/<username>/.ssh/id_rsa):
Created directory '/home/<username>/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/<username>/.ssh/id_rsa.
Your public key has been saved in /home/<username>/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:*************************************************** <username>@raspberrypi
The key's randomart image is:
+---[RSA 2048]----+
|OOOOOO           |
+----[SHA256]-----+
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

1.11. IPアドレス固定化(無線LAN)

まずは、無線LANアクセスポイントを設定(アクセスポイントが複数ある場合)

$ vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="<SSID1>"
        psk="<passphrase>"
}

network={
        ssid="<SSID2>"
        psk="<passphrase>"
}

次に無線LAN I/FにIPアドレスを定義しますが、アクセスポイント毎に割り当てIPアドレスを定義することができます。

$ vi /etc/dhcpcd.conf
interface wlan0
ssid <SSID1>
static ip_address=192.168.1.30/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

ssid <SSID2>
static ip_address=192.168.11.30/24
static routers=192.168.11.1
static domain_name_servers=192.168.11.1

1.12. パッケージとOSの更新

$ apt update
$ apt upgrade
※upgrade実行時、保留が出たら以下を実施すること
$ apt -s dist-upgrade
$ apt upgrade

1.13. ファームウェアの更新

$ rpi-update  
$ reboot

1.14. 自動upgrede

aptコマンドで手動でupgradeするのは面倒なので、自動更新するパッケージを導入。

$ apt install -y unattended-upgrades
$ vi /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Origins-Pattern {
        "o=${distro_id},n=${distro_codename}";

※Unattended-Upgradeの次の行に "o=${distro_id},n=${distro_codename}"; を追記する。

1.15. sudoers(piユーザ用)の削除

piユーザを削除しているので、問題はないと思うが念のためsudoers定義を削除

$ rm /etc/sudoers.d/010_pi-nopasswd

1.16. Timezone設定

$ raspi-config

4 Localisation Options を選択し、
I2 Change Timezone を選択。
アジア を選択。
東京 を選択。
了解 を選択。

1.17. NTP設定

$ timedatectl status
               Local time: 土 2020-03-21 14:35:07 JST
           Universal time: 土 2020-03-21 05:35:07 UTC
                 RTC time: n/a
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

NTP serviceactiveとなっていれば、NTPサービスは起動状態なので自動起動設定はあえてやる必要はありません。

$ vi /etc/systemd/timesyncd.conf
[Time]
NTP=ntp.jst.mfeed.ad.jp
FallbackNTP=ntp.nict.jp time.google.com

1.18. Wifi接続元国設定

$ raspi-config

4 Localisation Options を選択し、
I4 Change Wi-fi Country を選択。
JP Japan を選択。
了解 を選択。

1.19. NTFSインストール

$ apt -y install ntfs-3g

※Raspbian Lite10.3では既に入ってました。

1.20. USBディスクの追加

USBディスクを接続し、USB HDDのUUIDを調べます。

$ blkid
/dev/mmcblk0p1: LABEL_FATBOOT="RECOVERY" LABEL="RECOVERY" UUID="BED1-E8B9" TYPE="vfat" PARTUUID="00031adc-01"
/dev/mmcblk0p5: LABEL="SETTINGS" UUID="f3286ddd-6b11-4a1e-b780-32c39134818d" TYPE="ext4" PARTUUID="00031adc-05"
/dev/mmcblk0p6: LABEL_FATBOOT="boot" LABEL="boot" UUID="3CB5-EC8B" TYPE="vfat" PARTUUID="00031adc-06"
/dev/mmcblk0p7: LABEL="root" UUID="f319c423-f87b-4a99-8309-11173614c408" TYPE="ext4" PARTUUID="00031adc-07"
/dev/mmcblk0: PTUUID="00031adc" PTTYPE="dos"
/dev/sda1: LABEL="My Passport" UUID="C00EE4C60EE4B716" TYPE="ntfs" PTTYPE="atari" PARTLABEL="My Passport" PARTUUID="4638ed1e-9915-42f4-96b5-1491ff482e58"

自動マウントするため fstab に追記

$ mkdir /data
$ vi /etc/fstab
UUID="C00EE4C60EE4B716"    /data    ntfs-3g      async,auto,dev,exec,gid=65534,rw,uid=65534,umask=000    0    0
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker で CentOS Linux 8 環境を構築して Apache HTTP Server を起動する

概要

  • macOS 上の Docker で CentOS Linux 8 環境を構築する
  • Apache HTTP Server を起動してコンテナ内外からアクセスする

今回の環境

  • macOS Catalina
  • Docker Desktop Community 2.2.0.4
  • Docker 19.03.8
  • CentOS Linux 8
  • Apache HTTP Server 2.4.37
$ docker --version
Docker version 19.03.8, build afacb8b

CentOS Linux 8 イメージを Docker Hub から取得

docker pull コマンドでイメージを取得する。

$ docker pull centos:centos8
centos8: Pulling from library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:centos8
docker.io/library/centos:centos8

インストール可能な CentOS Linux のイメージは centos Tags - Docker Hub から探すことができる。

コンテナを作成して起動

コンテナに foobar という名前を割り当てて、バックグラウンドで実行する。
ここではコンテナの80番ポートをホストの8080番ポートに割り当てている。

$ docker run --detach --name foobar --privileged --publish=8080:80 centos:centos8 /sbin/init

run — Docker-docs-ja 17.06.Beta ドキュメント

docker run コマンドは、まず指定されたイメージ上に書き込み可能なコンテナ・レイヤを create (作成)します。それから、指定されたコマンドを使って start (開始)します。この docker run は、 API の /containers/create の後で /containers/(id)/start を実行するのと同じです。

docker run コマンドに --privileged と /sbin/init を指定しないと、systemd を使用する際に以下のようなエラーメッセージが表示されて systemd が使用できなくなるので注意する。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

CentOS Linux 8 にログイン

docker exec コマンドを使用して、起動したコンテナ内にて bash シェルを実行する。
これで CentOS Linux 8 内に入ることができる。

$ docker exec -it foobar bash

CentOS Linux 8 を使用

シェル内で OS バージョン等を確認する。

[root@29d737551a55 /]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
[root@29d737551a55 /]# uname -a
Linux 29d737551a55 4.19.76-linuxkit #1 SMP Thu Oct 17 19:31:58 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

vim などのよく使うと思われるソフトウェアがインストールされていない。

[root@29d737551a55 /]# vim
bash: /usr/bin/vim: No such file or directory

vim をインストールする。

[root@29d737551a55 /]# dnf install vim
[root@29d737551a55 /]# vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Nov 11 2019 19:08:24)
Included patches: 1-1763

シェルから抜けるには exit コマンドを使う。

[root@29d737551a55 /]# exit
exit

コンテナを停止

docker stop コマンドで起動しているコンテナを停止できる。

$ docker stop foobar

コンテナの情報を確認

docker ps コマンドでコンテナの情報を表示できる。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
29d737551a55        centos:centos8      "/sbin/init"        46 minutes ago      Exited (137) 19 seconds ago                       foobar

コンテナを起動

docker start コマンドで停止したコンテナを起動できる。

$ docker start foobar

Apache HTTP Server をインストールする

コンテナ内にシェルを起動してログインする。

$ docker exec -it foobar bash

dnf コマンドで httpd パッケージをインストールする。

[root@29d737551a55 /]# dnf install httpd

これで Apache HTTP Server がインストールできた。
バージョンを確認する。

[root@29d737551a55 /]# httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Dec 23 2019 20:45:34

systemd で管理するように設定する。

[root@29d737551a55 /]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

systemctl start コマンドで Apache HTTP Server を起動する。

[root@29d737551a55 /]# systemctl start httpd

初期設定ではドキュメントルートが /var/www/html/ になっているので /var/www/html/index.html に HTML ファイルを作成する。

[root@29d737551a55 /]# vi /var/www/html/index.html

今回は以下の内容を記述した。

<html>
<body>
Hello, World!
</body>
</html>

curl コマンドでアクセスすると Apache HTTP Server が HTML ファイルを出力する。

[root@29d737551a55 /]# curl -i http://localhost/
HTTP/1.1 200 OK
Date: Sat, 21 Mar 2020 06:00:04 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Sat, 21 Mar 2020 05:59:52 GMT
ETag: "2d-5a1571c48ab9e"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html; charset=UTF-8

<html>
<body>
Hello, World!
</body>
</html>

今回はコンテナの80番ポートを Docker ホスト側の8080番ポートに割り当てている。
コンテナ外からホスト側の8080番ポートにアクセスするとコンテナの80番ポートにつながる。

$ curl -i http://localhost:8080/
HTTP/1.1 200 OK
Date: Sat, 21 Mar 2020 06:01:21 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Sat, 21 Mar 2020 05:59:52 GMT
ETag: "2d-5a1571c48ab9e"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html; charset=UTF-8

<html>
<body>
Hello, World!
</body>
</html>

参考資料

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

遺伝統計ソフトPLINKを使ってみた

はじめに

仕事で統計遺伝学が必要になりそうなので、遺伝統計ソフトのPLINKを使ってみた。
最近、いい感じの本が出版されたんで、ハンズオンでやってみた。

ゼロから実践する 遺伝統計学セミナー

ただ、この本はWindows用に書かれているので、Macでのやり方を備忘録的に書いていこうかなー、と。
この本いい感じです。

PLINKのダウンロード

以下のページからPLINKのMacOS版をダウンロード。

PLINK

Macのターミナルを起動。
ターミナル上で、cdコマンドで作業ディレクトリを指定する。

作業ディレクトリの指定
$ cd /作業ディレクトリのパス/

ダウンロードしたPLINK(PLINK実行ファイル)を作業ディレクトリに移動する。

PLINKの実行

ターミナル上で、./plinkと入力する。

PLINK実行
$ ./plink

実行結果

PLINK v1.90b6.16 64-bit (19 Feb 2020)          www.cog-genomics.org/plink/1.9/
(C) 2005-2020 Shaun Purcell, Christopher Chang   GNU General Public License v3

  plink <input flag(s)...> [command flag(s)...] [other flag(s)...]
  plink --help [flag name(s)...]

Commands include --make-bed, --recode, --flip-scan, --merge-list,
--write-snplist, --list-duplicate-vars, --freqx, --missing, --test-mishap,
--hardy, --mendel, --ibc, --impute-sex, --indep-pairphase, --r2, --show-tags,
--blocks, --distance, --genome, --homozyg, --make-rel, --make-grm-gz,
--rel-cutoff, --cluster, --pca, --neighbour, --ibs-test, --regress-distance,
--model, --bd, --gxe, --logistic, --dosage, --lasso, --test-missing,
--make-perm-pheno, --tdt, --qfam, --annotate, --clump, --gene-report,
--meta-analysis, --epistasis, --fast-epistasis, and --score.

"plink --help | more" describes all functions (warning: long).

PLINKは./plink --(コマンド) (引数)で実行。

ファイルの読み込み

ファイルの読み込みコマンドは--file--bfile
--fileは、ped|map形式のジェノタイプデータを読み込む。
--bfileは、bed|bim|fam形式のジェノタイプデータを読み込む。
NGSデータはvcf形式が基本だけど、ped|map形式に変換したデータ、ped|map形式をバイナリ形式に変換したbed|bim|fam形式を使ったりする。

--outは、出力ファイルの名前を指定する。

今回の作業ディレクトリ名はSNPとして、その中にbed|bim|fam形式があるとする。

ファイルの読み込み
$ ./plink --bfile SNP --out test

これを実行するとtest.logというファイルが生成する。
このファイルはテキストエディタか、次のコマンドで開く。

$ less test.log

アレル頻度の計算

--freqでそれぞれのSNPのアレル頻度を計算できる。

SNPのアレル頻度を計算
$ ./plink --bfile SNP --out test1 --freq

出力したファイルはテキストエディタか、次のコマンドで開く。

$ less test1.frq

SNPのフィルタリング

解析をする前に、ゲノムデータのフィルタリングを行って、マイナーアレル(MAF)頻度が1%あるいは0.5%以下のSNPを除外する。
GWASでの御作法的な。
--maf(数値)で数値以下のMAFのSNPを除外する。
--make-bedでフィルタリング後のデータを新しいbed|bim|fam形式ファイルとして作成。
今回は1%以下のSNPを除外する。

マイナーアレル頻度でSNPをフィルタリング
$ ./plink --bfile SNP --out test2 --maf 0.1 --make-bed
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Linux】遺伝統計ソフトPLINKを使ってみた

はじめに

仕事で統計遺伝学が必要になりそうなので、遺伝統計ソフトのPLINKを使ってみた。
最近、いい感じの本が出版されたんで、ハンズオンでやってみた。

ゼロから実践する 遺伝統計学セミナー

ただ、この本はWindows用に書かれているので、Macでのやり方を備忘録的に書いていこうかなー、と。
この本いいです。

PLINKのダウンロード

以下のページからPLINKのMacOS版をダウンロード。

PLINK

Macのターミナルを起動。
ターミナル上で、cdコマンドで作業ディレクトリを指定する。

作業ディレクトリの指定
$ cd /作業ディレクトリのパス/

ダウンロードしたPLINK(PLINK実行ファイル)を作業ディレクトリに移動する。

PLINKの起動

ターミナル上で、./plinkと入力する。

PLINK起動
$ ./plink

実行結果

PLINK v1.90b6.16 64-bit (19 Feb 2020)          www.cog-genomics.org/plink/1.9/
(C) 2005-2020 Shaun Purcell, Christopher Chang   GNU General Public License v3

  plink <input flag(s)...> [command flag(s)...] [other flag(s)...]
  plink --help [flag name(s)...]

Commands include --make-bed, --recode, --flip-scan, --merge-list,
--write-snplist, --list-duplicate-vars, --freqx, --missing, --test-mishap,
--hardy, --mendel, --ibc, --impute-sex, --indep-pairphase, --r2, --show-tags,
--blocks, --distance, --genome, --homozyg, --make-rel, --make-grm-gz,
--rel-cutoff, --cluster, --pca, --neighbour, --ibs-test, --regress-distance,
--model, --bd, --gxe, --logistic, --dosage, --lasso, --test-missing,
--make-perm-pheno, --tdt, --qfam, --annotate, --clump, --gene-report,
--meta-analysis, --epistasis, --fast-epistasis, and --score.

"plink --help | more" describes all functions (warning: long).

PLINKは./plink --(コマンド) (引数)で実行。

ファイルの読み込み

ファイルの読み込みコマンドは--file--bfile
--fileは、ped|map形式のジェノタイプデータを読み込む。
--bfileは、bed|bim|fam形式のジェノタイプデータを読み込む。
NGSデータはvcf形式が基本だけど、ped|map形式に変換したデータ、ped|map形式をバイナリ形式に変換したbed|bim|fam形式を使ったりする。

--outは、出力ファイルの名前を指定する。

今回のファイルは、作業ディレクトリ内に格納したSNP.bedSNP.bimSNP.fambed|bim|fam形式とする。
なので--bfileの引数は、ファイルの拡張子前のSNPとなる。

ファイルの読み込み
$ ./plink --bfile SNP --out test

これを実行するとtest.logというファイルが生成する。
このファイルはテキストエディタか、次のコマンドで開く。

$ less test.log

アレル頻度の計算

--freqでそれぞれのSNPのアレル頻度を計算できる。

SNPのアレル頻度を計算
$ ./plink --bfile SNP --out test1 --freq

出力したファイルはテキストエディタか、次のコマンドで開く。

$ less test1.frq

SNPのフィルタリング

解析をする前に、ゲノムデータのフィルタリングを行って、マイナーアレル(MAF)頻度が1%あるいは0.5%以下のSNPを除外する。
GWASでの御作法的な。
--maf(数値)で数値以下のMAFのSNPを除外する。
--make-bedでフィルタリング後のデータを新しいbed|bim|fam形式ファイルとして作成。
今回は1%以下のSNPを除外する。

マイナーアレル頻度でSNPをフィルタリング
$ ./plink --bfile SNP --out test2 --maf 0.01 --make-bed
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS で無料のサーバーを 30 分で立てる

しばらく前に AWS の知識をゲットしたはずだったんだが、記憶力が悪いせいですっかり忘れた。

インターネット上に自分用の Linux サーバーが欲しかったので、AWS を使おうとしたのだが、ほとんど何も覚えてない。ゼロから始めてサーバーを立てるまで、を復習がてら記事にする。

AWS はユーザー登録から 1 年間の無料枠があるとはいえ、ユーザー登録にクレジットカード番号が必要。これは済んでいることとする。

まずはじめに

トップサイトからログインすると、画面遷移して「AWS マネジメントコンソール」に連れていかれる。ここが異世界の入口だ。タダでもらえる初期装備はなかなか豪華で、小さいサーバーならタダで使わせてもらえる。マネジメントコンソールのメニューを探して「Billing」と「VPC」と「EC2」とを確認する。この 3 つが主な活動場所だ。

Billing

課金の状況を知るところ。

まず最初はここを知らないと安心して使えない。ここには「今月はいくらかかったか」の金額が表示されている。無料枠の中で使っていれば $0 と表示されているはず。

VPC ダッシュボード

「VPC を作る」のはリアル世界で例えれば「サーバールームを確保して環境整備する」ことにあたる。

VPC をクリックして「VPC ダッシュボード」に入る。

VPC の作成

VPC というリンクをクリックすると VPC を作成する画面に移る。最初から「デフォルト VPC」というのが用意されているが、たしか、こいつを消すのはやめたほうがいい。あとあと面倒なことになる。

新しい VPC を作成していく。「VPC の作成」を押すと作成が始まる。IPv4 CIDR ブロックは10.0.0.0/16とする。10.0.xx.xx のアドレスを使えるようになる。IPv6 は使わないので、IPv6 CIDR ブロックは無しを選ぶ。無料枠で済ませたいので「テナンシー」はデフォルトを選ぶ。名前はあとで参照することになるので、分かりやすい名前を付けておくのが吉だ。

これで、リアルでいえば「サーバールームを陣取った」ことになる。

サブネットの作成

「サブネット」というリンクをクリックすると、サブネットを作成する画面に移る。「サブネットの作成」を押すと作成が始まる。VPC は先ほど作成したものを選択。アベイラビリティゾーンは ap-northeast-1a など、東京リージョンのものを選ぶ。海外のを選んでも遅くなるだけだ。「IPv4 CIDR ブロック」は10.0.1.0/24とする。これでサブネット内で10.0.1.xxのアドレスを使えるようになる。

これで「サーバールームのイーサネットの配線」が完了。

ルートテーブルの確認

「ルートテーブル」というリンクをクリックすると、ルートテーブルの設定画面に移る。VPC を作成したときに、セットでルートテーブルも作成されている。他にはデフォルト VPC 用のルートテーブルも最初からあるが、これも消さないようにする。「ルート」というタブをクリックすると、送信先が 10.0.0.0/16 でターゲットが local になっているはず。変更は要らない。「タグ」というタブで名前をつけられるので、やっといた方がいい。

これで「ルーターの設置」が完了。

インターネットゲートウエイの作成

「インターネットゲートウエイ」というリンクをクリックすると作成画面にうつる。ルーターと外部のネットをつなぐことにあたる。「インターネットゲートウエイの作成」を押せば作成できる。例によって名前は付けておいた方がいい。「アクション」から「VPC にアタッチ」を選んで、いま作成中の VPC につなぐ。

ルートテーブルの設定(その2)

「ルート」タブを押すと、ルートテーブルの編集ができる。ルートの編集を押して、いま作成中の VPC のルートを追加する。0.0.0.0/0internet gateway に対応付ける。これで VPC 内部は内部でルーティング、それ以外はインターネットに流すようになる。

これでインターネットに接続できた。サーバールームの建設は終了だ。

EC2

「EC2 を起動する」のは、リアルでは「コンピュータを買ってきてサーバールームに据え付けて起動する」ことにあたる。

EC2 ダッシュボード

「EC2 ダッシュボード」に移動する。「インスタンス」をクリックし「インスタンスの作成」を押すと、インスタンス(仮想のコンピュータにあたる)を選ぶ画面になる。Amazon Linux 2 AMI (HVM), SSD Volume Type を選ぶ。次に進んで無料枠の t2-micro を選ぶ。

「ネットワーク」はいま作成した VPC を、「サブネット」もいま作成したサブネットを選択。「自動割り当てパブリック IP」はデフォルトで無効になっているのを有効に変更する。次の「ストレージの追加」を選んで先に進むが、追加のストレージは不要。

作成して起動すると、キーペアの作成ダイアログが立ち上がるので作成してダウンロードしておく。このファイルは RSA 鍵というやつで、このコンピュータにログインするときに必要となる。

インスタンスの一覧を表示する画面を表示すると、いま起動したコンピュータが見える。IPv4 パブリック IP アドレスも表示されている。この IP アドレスのコンピュータは、もうインターネット上に存在する。SSH などで接続が可能だ。

確認

たったこれだけのことで、インターネット上に本当にサーバーが存在するのか。TeraTerm で確認する。

TeraTerm を起動し、接続先にさっきの IPv4 パブリック IP アドレスを入力して SSH2 で接続する。ユーザー名は ec2-uesr で、パスワード欄は何も入れなくていい。その代わりに「RSA 鍵を使う」を選び、秘密鍵に先ほどダウンロードしたファイルを選ぶ。

「接続」を押せば、確かにつながっていることが分かる。

TeraTerm
Last login: Fri Mar 20 15:18:50 2020

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
7 package(s) needed for security, out of 11 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-156 ~]$

おわり

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