20200208のLinuxに関する記事は10件です。

ハッキング・ラボの作り方 - Kali Linux(2020.1) VirtualBox 64-bit編 その2-

はじめに

  • ハッキング・ラボのつくりかた』の第1部第2章 仮想環境によるハッキング・ラボの構築メモです。
  • ネットワーク設定で、トラブルが多い傾向にあるので参考に置いておきます。

構築環境

  • ホストOS:Windows10 Home (Version:1909)
  • VirtualBox:6.0.16 r 135674
  • 最新版のKali Linux(2020.1) VirtulBox 64-bit版

サポートサイト

インターネットにつながらない

  • ホストネットワークマネージャの設定はこんな感じです。
    kali-nw8.png
    kali-nw9.png

  • Kali LinuxをインポートしてVMの設定 - ネットワークにホストオンリーアダプターを追加
    kali-nw1.png

  • Kali Linuxを起動する

  • ネットワークの設定を見ると以下のように、EthernetにWired Connection1しかない

  • アダプター1(NAT)にIPアドレスが割り当てられていない
    kali-network.png

  • この状態だとインターネットに接続出来ないので、何も進めなくなってしまう。

ネットワーク設定

  • 画面左上一番左のKaliアイコンをクリックする
  • Settings - Advanced Network Configurationをクリックする
  • Network Connections - [+]をクリックしてインタフェースを追加する
  • Ethernet - Create…ボタンをクリックする
  • Connection nameを、Ethernet NATに変更する(必須ではないです)
  • Ethernetタブ - Device - eth0を選択する
  • [✓ Save]ボタンをクリックする
  • 右上の[x]ボタンをクリックする
  • 動作を確認する
    • Webブラウザを起動して確認する
    • terminalを起動して確認する
terminalで確認
$ ip addr
$ ip route

kali-nw0.png
kali-nw2.png
kali-nw3.png
kali-nw4.png
kali-nw5.png
kali-nw6.png
kali-nw7.png

おわりに

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

デュアルブートもVMももういらない!WSL2&Windows TerminalでLinux環境を構築しよう【WSL2】

  • 2019年のMS Buildにて、WSL2の発表がありました
  • WSL2をインストールすることにより、WindowsにLinuxのカーネルが含まれる状態になるので、Linux環境を構築するためのVMやデュアルブートが不要な状態になります
  • de:code 2019のKeyNoteではnpm isntallの実行がめちゃくちゃ速くなるよ!というデモもやってました

WSL2をインストールする(Ubuntu)

WindowsのバージョンをPreview版に更新

  • まずWSL2を利用するためには。WindowsのPreview版バージョンを利用する必要があります
    • (Preview版のため、万が一のためにバックアップを取っておくことをおススメします)
  • Windows Insiderに参加し、Preview版Windowsをインストールします
    1.jpg

  • バージョンを確認するには、コマンドプロンプトでverコマンドを実行し、Windowsのバージョンが10.0.18917以上であることを確認します

C:\Users\user1>ver
Microsoft Windows [Version 10.0.19041.21]

Linuxのディストリビューションをインストールする

  • まず、Linuxディストリビューションがインストールされているか確認します
    • Linuxがインストールされていない場合は下のメッセージが出てきます
PS C:\Users\user1> wsl -l
Linux  Windows サブシステムには、ディストリビューションがインストールされていません。
ディストリビューションは Microsoft Store にアクセスしてインストールすることができます:
https://aka.ms/wslstore
  • https://aka.ms/wslstoreにアクセスするとMicrosoft Storeが開き、インストール可能なディストリビューションが表示されます

    • 今回はUbuntuをインストールしてみます 4.jpg
  • ストアからUbuntuを起動すると、サブシステムのインストールが始まります
    2.jpg

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: myuser
Enter new UNIX password:
  • Linuxコマンドももちろん打てます。これでインストールできてますね!
myuser@DESKTOP-KH1ORKF:~$ ls
myuser@DESKTOP-KH1ORKF:~$ cd ..
myuser@DESKTOP-KH1ORKF:/home$

WSLを有効化する

  • WSLを有効化するために下の2つのコマンドを入力した後、PCを再起動します
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 再起動後にwsl -lコマンドを入力すると先ほどインストールしたディストリビューションが表示されます
PS C:\Users\user1> wsl -l
Linux  Windows サブシステム ディストリビューション:
Ubuntu (既定)
  • 最後に、WSL2のUbuntuディストリビューションを設定します
PS C:\Users\user1> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。
  • これでWSL2が使えるようになりました!

Windows Terminalをインストールする

  • Linuxの環境構築はWSL2だけのインストールで完了ですが、せっかくなのでWSL2と同時期に発表されたWindows Terminalも使ってみます
  • Windows Terminalは簡単に言うと「コマンドプロンプトの進化版」です
    • コマンドプロンプトやPowerShellはもちろん、WSLをインストールすることでLinuxのターミナルもこのWindows Terminal1つで実行できてしまう優れものです
    • Windows Terminal紹介動画:https://www.youtube.com/watch?v=8gw0rXPMMPE
  • Windows TerminalはMicrosoftストアからPreview版をインストールできます 5.jpg
  • Windowsターミナルを起動すると、先ほどインストールしたUbuntuのターミナルもちゃんと選べる状態になっていますね 6.jpg
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Flutter クロスプラットフォームの最新サポート状況

はじめに

Flutterのクロスプラットフォームのサポート状況をまとめています。
変化があれば随時更新予定です。

サポート状況

プラットフォーム サポート状況 対応バージョン 発表イベント等のリンク
Android 正式サポート済 v1.0.0以降 Flutter Live 18
iOS 正式サポート済 v1.0.0以降 Flutter Live 18
Web ベータ版 v1.12以降(beta, dev, masterチャンネルのみで利用可) Flutter Interact '19
macOS アルファ版 -(dev, masterチャンネルのみで利用可) Flutter Live 18
Linux Preview版 同上 同上
Windows Preview版 同上 同上

ベータ版の意味

Flutter SDKとしてはある程度機能がFixし、開発者が使い始めるレベルに到達したことを意味しています。

アルファ版の意味

基本構成が大きく変わる可能性は低いが、仕様&実装が今後も変わる可能性が残っており、プロダクトへの適用はまだ難しい状況です。
ただ、ある程度動くレベルにはなっているため、お試しで利用可能です。

Preview版の意味

完全なお試し&試験レベルで、今後も大きく仕様や実装を変える可能性が残っている状況です。
まだまだTODOが多く残っており、とりあえず動くというレベル感ですが、
一般的にはユーザーに試用してもらうことで新たな知見やフィードバックを得るなどの目的の段階です。

今後の予想

過去を見てみると、アルファ→ベータ→正式版と大体1年サイクルで昇格しています。そのため、Web版が2020年末に正式サポートされ、macOSがベータ版になるのではないかと予想しています。

macOSはほとんどiOSのようなものなので、デスクトップで必要になる機能を追加でサポート出来れば対応できるでしょうという感じです。

Linux向けはそもそも需要があるのか?という話の優先度が常に付き纏いますが、こちらもやれば出来るという感じでしょうか。

仕組み的にはWindowsデスクトップ対応が一番難しいのではないでしょうか。

デスクトップ向けもElectron並に頑張って開発すれば可能だと思いますが、費用対効果と優先度を考慮して進められるかと思われます。

Flutter SDK リリース履歴

https://flutter.dev/docs/development/tools/sdk/releases

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

ハッキング・ラボの作り方 - Kali Linux(2020.1) VirtualBox 64-bit編 -

はじめに

構築環境

  • ホストOS:Windows10 Home (Version:1909)
  • VirtualBox:6.0.16 r 135674
  • 最新版のKali Linux(2020.1) VirtulBox 64-bit版

サポートサイト

ダウンロードサイト

初期設定

  • Kali Linuxのバージョンアップによる書籍との相違点をかいつまんで記載しています。
    • インポート自体は、特に問題なく終わりました。(ライセンスの同意があるくらい。)
    • ネットワーク設定は、「NAT」1つのみ。
    • 日本語環境ではありません。

ログイン

  • ログインユーザが変わっています。
User Password
kali kali

キーボード

  • 画面左上一番左のKaliアイコンをクリックする
  • Settings - Keyboardをクリックする
  • Layoutタブをクリックする
  • Use system defaultsのチェックを外す
  • [+ Add]ボタンをクリックして、Japaneseを追加する
  • [- Remove]ボタンでEnglish(Us)を削除する
  • [x Close]ボタンをクリックする kali0.png kali-keyboard.png

タイムゾーン

  • 時刻表示を右クリックして、Propertiesをクリックする
  • Time Settings - Timezone:欄にAsia/Tokyoを入力する
  • [x Close]ボタンをクリックする kali-2.png kali-timezone.png

起動するブラウザ

  • 画面左上一番左のKaliアイコンをクリックする
  • Settings - Preferred Applicationsをクリックする
  • Internetタブ - Web BrowserでChromiumを選択する(Mozilla Firefoxなどお好みで。)
  • [x Close]ボタンをクリックする kali-web.png

日本語表示・文字化け対策

パッケージの最新化
$ sudo apt update
$ sudo apt upgrade
ロケールを変更する
$ sudo dpkg-reconfigure locales
文字化けするので、フォントをアンインストール、再インストールする
$ sudo apt remove fonts-vlgothic
$ sudo apt install fonts-vlgothic

@serion253 さんの記事

日本語入力

日本語入力はfcitx-mozcをインストールする
$ sudo apt install fcitx-mozc

おわりに

  • ハッキング・ラボは、インフラ構築からセキュリティまで学べて楽しい。

追記(2020.02.08 23:40)

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

CentOS8にDockerをインストール。名前解決できなかったのが解消した。

はじめに

さっき書いた ESXi6.7にCentOS8を最小構成で構築 の作業後に、dockerを入れたけど、dnfでこけてしまった。
pingでIP直打ちは外に通るのに、名前解決ができない。が解決したので、記録として残します。
コンテナ起動時に --net=host をやりたくなかったので情報をさがしてみました。

解決方法だけ記載

ホスト側で、NAPTの設定したら動いた。

# firewall-cmd --add-masquerade --permanent
# firewall-cmd --reload

前提条件

最小構成でインストールしたからでしょうか?nftablesは起動しておらず、firewalldが動作し、裏でiptablesが動いている状態でした。

nftablesは停止している。

# systemctl status nftables
● nftables.service - Netfilter Tables
   Loaded: loaded (/usr/lib/systemd/system/nftables.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:nft(8)

firewalldが動いている。

# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-02-08 16:28:47 JST; 27min ago
     Docs: man:firewalld(1)
 Main PID: 1182 (firewalld)
    Tasks: 2 (limit: 23585)
   Memory: 38.9M
   CGroup: /system.slice/firewalld.service
           mq1182 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid

iptablesが動いている。

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-USER (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

dockerを使えるようにする

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

インストール時のパッケージのバージョンではねられるので、--nobestをつけてインストールする。

# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# dnf install --nobest docker-ce docker-ce-cli containerd.io

サービス設定しておく

# systemctl enable docker
# systemctl start docker

テストで hello-world を立ち上げてみる。
うまくいけば、下のように、 Hello from Docker! が表示される

# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

CentOS8のイメージで起動してみる

systemctl を動作させるために、 /sbin/init で走らせないとダメぽい。

# docker pull centos:centos8
# docker run --privileged -it -d --name centos8_check centos:centos8 /sbin/init
# docker exec -it centos8_check /bin/bash
[root@fced0781866f /]#

ログインできた。

トラブル発生

名前解決できない!

コンテナ内でepelパッケージのインストールしてみようとしたら、できない。

[root@fced0781866f /]# dnf install epel-release
Failed to set locale, defaulting to C.UTF-8
CentOS-8 - AppStream                                           0.0  B/s |   0  B     00:05
Failed to download metadata for repo 'AppStream'
Error: Failed to download metadata for repo 'AppStream'

コンテナ→GooglePublicDNSはIP直打ちで到達できる。

[root@fced0781866f /]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=52 time=5.60 ms

コンテナのDNSはLAN内のサーバを参照している

[root@fced0781866f /]# cat /etc/resolv.conf
# Generated by NetworkManager
search prosper2.net
nameserver 10.254.10.241

コンテナ→DNSへのpingは通る

[root@fced0781866f /]# ping 10.254.10.241
PING 10.254.10.241 (10.254.10.241) 56(84) bytes of data.
64 bytes from 10.254.10.241: icmp_seq=1 ttl=127 time=0.467 ms

のに、名前解決できない

[root@fced0781866f /]# ping dns.google
ping: dns.google: Name or service not known

なぜだ。。。

解消できた

ホスト側で、NAPTの設定したら動いた。

# firewall-cmd --add-masquerade --permanent
# firewall-cmd --reload

ちゃんと dnf install epel-release できた。

# dnf install epel-release
Failed to set locale, defaulting to C.UTF-8
CentOS-8 - AppStream                                           4.7 MB/s | 6.4 MB     00:01
CentOS-8 - Base                                                4.8 MB/s | 5.0 MB     00:01
CentOS-8 - Extras                                              6.2 kB/s | 2.1 kB     00:00
Dependencies resolved.
===============================================================================================
 Package                   Architecture        Version               Repository           Size
===============================================================================================
Installing:
 epel-release              noarch              8-5.el8               extras               22 k

Transaction Summary
===============================================================================================
Install  1 Package

Total download size: 22 k
Installed size: 30 k
Is this ok [y/N]: y
Downloading Packages:
epel-release-8-5.el8.noarch.rpm                                915 kB/s |  22 kB     00:00
-----------------------------------------------------------------------------------------------
Total                                                           36 kB/s |  22 kB     00:00
warning: /var/cache/dnf/extras-cbfb2f07b0021b7e/packages/epel-release-8-5.el8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS-8 - Extras                                              1.6 MB/s | 1.6 kB     00:00
Importing GPG key 0x8483C65D:
 Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>"
 Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                       1/1
  Installing       : epel-release-8-5.el8.noarch                                           1/1
  Running scriptlet: epel-release-8-5.el8.noarch                                           1/1
  Verifying        : epel-release-8-5.el8.noarch                                           1/1

Installed:
  epel-release-8-5.el8.noarch

Complete!

追記

インストール時に --nobest でとりあえずは大丈夫だったけど、依存関係のエラーが出続けてしまっていた。

# dnf update
メタデータの期限切れの最終確認: 0:53:51 時間前の 2020年02月08日 16時38分36秒 に実施しました。
エラー:
 問題: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best update candidate for package docker-ce-3:18.09.1-3.el7.x86_64
  - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.el7.x86_64 is excluded
  - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)

これは嫌なので、無理やりRPMを入れてしまおう。まず、どこにあるか調べる。

# grep stable /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable

そうか、そもそもCentOS7がターゲットなのか。。。
ここから拾ってこよう。

# dnf update https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm
メタデータの期限切れの最終確認: 1:00:47 時間前の 2020年02月08日 16時38分36秒 に実施しました。
containerd.io-1.2.10-3.2.el7.x86_64.rpm                                                                                                 7.5 MB/s |  23 MB     00:03
依存関係が解決しました。
========================================================================================================================================================================
 パッケージ                                アーキテクチャー                   バージョン                                 リポジトリー                             サイズ
========================================================================================================================================================================
アップグレード:
 containerd.io                             x86_64                             1.2.10-3.2.el7                             @commandline                              23 M

トランザクションの概要
========================================================================================================================================================================
アップグレード  1 パッケージ

合計サイズ: 23 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                                1/1
  scriptletの実行中: containerd.io-1.2.10-3.2.el7.x86_64                                                                                                            1/1
  アップグレード中 : containerd.io-1.2.10-3.2.el7.x86_64                                                                                                            1/2
  scriptletの実行中: containerd.io-1.2.10-3.2.el7.x86_64                                                                                                            1/2
  scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64                                                                                                               2/2
  整理             : containerd.io-1.2.0-3.el7.x86_64                                                                                                               2/2
  scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64                                                                                                               2/2
  検証             : containerd.io-1.2.10-3.2.el7.x86_64                                                                                                            1/2
  検証             : containerd.io-1.2.0-3.el7.x86_64                                                                                                               2/2

アップグレード済み:
  containerd.io-1.2.10-3.2.el7.x86_64

完了しました!

よしよし、もっかいupdateしよ。

# dnf update
メタデータの期限切れの最終確認: 1:01:08 時間前の 2020年02月08日 16時38分36秒 に実施しました。
依存関係が解決しました。
========================================================================================================================================================================
 パッケージ                           アーキテクチャー                  バージョン                                    リポジトリー                                サイズ
========================================================================================================================================================================
アップグレード:
 docker-ce                            x86_64                            3:19.03.5-3.el7                               docker-ce-stable                             24 M

トランザクションの概要
========================================================================================================================================================================
アップグレード  1 パッケージ

ダウンロードサイズの合計: 24 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
docker-ce-19.03.5-3.el7.x86_64.rpm                                                                                                      7.2 MB/s |  24 MB     00:03
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                    7.2 MB/s |  24 MB     00:03
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                                1/1
  scriptletの実行中: docker-ce-3:19.03.5-3.el7.x86_64                                                                                                               1/1
  アップグレード中 : docker-ce-3:19.03.5-3.el7.x86_64                                                                                                               1/2
  scriptletの実行中: docker-ce-3:19.03.5-3.el7.x86_64                                                                                                               1/2
  scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64                                                                                                               2/2
/usr/bin/dockerd は dockerd の為の互換用として設定されていません。

  整理             : docker-ce-3:18.09.1-3.el7.x86_64                                                                                                               2/2
  scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64                                                                                                               2/2
  検証             : docker-ce-3:19.03.5-3.el7.x86_64                                                                                                               1/2
  検証             : docker-ce-3:18.09.1-3.el7.x86_64                                                                                                               2/2

アップグレード済み:
  docker-ce-3:19.03.5-3.el7.x86_64

完了しました!

うん、大丈夫そう。

# dnf update
メタデータの期限切れの最終確認: 1:01:38 時間前の 2020年02月08日 16時38分36秒 に実施しました。
依存関係が解決しました。
行うべきことはありません。
完了しました!

よかった。

出典

https://serverfault.com/questions/987686/no-network-connectivity-to-from-docker-ce-container-on-centos-8

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

RK3399 board buildroot

I was a little confused when I try to build buildroot because I was new to buildroot.
So I write this article to help you ,If you are in the same situation as me.
you can see the link below at wiki.friendlyarm.com but It upset me a bit.
buildroot for RK3399 at wiki.friendlyarm.com

1 : Install repo Utility

git clone https://github.com/friendlyarm/repo
sudo cp repo/repo/usr/bin/

2 : Retrive Repo Package from Github

mkdir linuxsdk-friendlyelec
cd linuxsdk-friendlyelec
repo init -u https://github.com/friendlyarm/buildroot_manifests -b master -m rk3399_linux_release.xml --repo-url=https://github.com/rockchip-linux/repo --no-clone-bundle
repo sync -c --no-clone-bundle

3 : Setup Compilation Environment

sudo apt-get install repo git gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo liblz4-tool genext2fs lib32stdc++6

you'll see sudo apt-get install repo git-core...at wiki.friendlyarm.com but I couldn't use it so just sudo apt-get install repo git ...

4 : Compile Code

1.0 : kernel

./build.sh kernel

it will take 3-10 minute

1.1 : u-boot

./build.sh uboot

it will take a few minute

1.2 : rootfs

./build.sh rootfs

it will take a few hours

5 : Generate Image for SD Card or EMMC

1.0 : Generate Image for SD Card

sudo ./build.sh sd-img

1.1 : Flash an image to an SD card:

The "/dev/sdX" needs to be replaced with your actual SD card device name.

./friendlyelec/rk3399/sd-fuse_rk3399/fusing.sh /dev/sdX buildroot

2.0 : Generate Image for EMMC(Eflasher)

sudo ./build.sh emmc-img

Check Help Info

buildroothelp.png

I will also write a article for Customize Buildroot

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

CentOS8 サーバー構築(ネットワーク開通とパッケージ更新)

はじめに

前回CentOS8(1905) をインストールするところまでやりましたが、今回はネットワークを開通させてパッケージ管理 dnf でシステムのアップデートまでを実施したいと思います。

開いているポートを閉める

とりあえずネットワークを開通するまえに、SSHなどデフォルトで空いているポートをしめてしまいます。
ネットワーク開通後はもちろん SSH で接続できるようにしますが、ちゃんとセキュリティを確保したうえで接続できるようにしたいので、一旦不要なポートは閉めてしまいます。

早速、firewall-cmd コマンドで空いているポートを確認します。

[root@localhost ~]# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

firewall-cmd は名前のとおり、ファイヤーウォールの設定を行うコマンドです。
firewall-cmd --list-all で、現在の設定を一覧で確認できます。

  services: cockpit dhcpv6-client ssh

cockpit dhcpv6-client ssh というサービスで規定されているポートが空いています。

cockpit は、ブラウザー上でシステムを管理できるツールのようですが、いらないので永久に閉めます。
dhcpv6-client は、Ipv6 を利用するならば必要のようですが、とりあえずいらないので永久に閉めます。
ssh は、後ほどちゃんと設定してから開けるので、一時的に閉めます。

というわけで、とりあえずすべて削除してしまいます。

[root@localhost ~]# firewall-cmd --permanent --remove-service=cockpit
success
[root@localhost ~]# firewall-cmd --permanent --remove-service=dhcpv6-client
success
[root@localhost ~]# firewall-cmd --permanent --remove-service=ssh
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

さっぱりしました。

ネットワークを開通する

ネットワークの設定は、nmcli コマンドで行います。
まずは現状の確認。

[root@localhost ~]# nmcli device
DEVICE  TYPE      STATE     CONNECTION
ens3    ethernet  切断済み  --
lo      loopback  管理無し  --

ens3 が NICになりますが、見ての通り切断状態なので接続します。

[root@localhost ~]# nmcli connection modify ens3 connection.autoconnect yes

状態確認。

[root@localhost ~]# nmcli device
DEVICE  TYPE      STATE     CONNECTION
ens3    ethernet  接続済み  ens3
lo      loopback  管理無し  --

接続しました。
connection.autoconnect yes としているので、以後は自動で接続されます。

パッケージ管理 dnf で更新する

CentOS7 では yum を利用してましたが、CentOS からは dnf らしいです。一応 yum も利用できるようですが、dnf をラップしているだけのようなので、素直に dnf を利用することにします。

システムにインストール済のパッケージを更新します。

[root@localhost ~]# dnf update
...
これでよろしいですか? [y/N]:

わらわらとリストが出ていて、インストールの是非を問われるので y で Enter します。
ちなみに y 押すのも面倒くさいという方は -y オプションをつけて実行すれば勝手に y したことになります。使い勝手はほぼ yum と同じようですね。

[root@localhost ~]# dnf update -y

システムの状態を最新に保って置くためにたまに dnf update しておきましょう。
サーバー管理者の方などは勝手にアップデートされると困ることとかあるかもですが、私の場合はあくまでお勉強のために構築していますので、最新に保っておくにこしたことはないという考えです。。

今回はここまで

とりあえず、ネットワークは開通しましたがこのあとはユーザー作成したりSSHも接続できるようにせねばなりません。
このあと私がしたいのは、下記のとおりです。

  • OpenLDAP をインストールしてユーザー管理を LDAP で行う。
  • SSH を開通し、LDAP アカウントを公開鍵認証でログインできるようにする。
  • メールサーバーを構築する。

ですので、SSH で接続できるのはもう少し先ですね~

関連記事

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

ESXi6.7にCentOS8を最小構成で構築

はじめに

ESXi上にCentOS8の最小構成でのインストールをしてみました。
ごくごく基本的な設定しかしていません。

対象機器および環境など

検証環境

  • ESXi 6.7
  • CentOS8(8.1.1911)

ネットワーク情報

項目
サーバFQDN vmnetserv01.prosper2.net
サーバアドレス 10.254.10.251

作業内容

メディア準備

国内のてきとうなミラーからISOを落としてくる。
ESXiにSSHでログインしてwgetで取得すると楽ですね。

$ ssh root@esxi
で、ログインして

# cd /vmfs/..../images (ISOを保存する場所に移動)
# wget http://ftp.iij.ad.jp/pub/linux/centos/8/isos/x86_64/CentOS-8.1.1911-x86_64-boot.iso

ESXiでVM作成

カラのVMを作成します。

ゲストOSのバージョンで「CentOS8」があるので、それを選択
Screenshot from Gyazo

先ほどダウンロードしたISOファイルを選択しておきます
Screenshot from Gyazo

CentOS8のインストール

パワーオンしたら、解像度をあわせるためにオプションが必要です。
起動画面でUpキーを押して「Install CentOS Linux 8」を選択 eキーを押すとオプション入力画面に切り替わります。
Screenshot from Gyazo

この画面で、 resolution=1024x768 を挿入し、 Ctrl-x を入力すると、インストーラが起動します。
Screenshot from Gyazo

インストーラに従って作業していく。言語選択後、こんな画面になる。
Screenshot from Gyazo

ネットワーク設定を完了させる。
Screenshot from Gyazo

ソフトウェアは最小限で十分
Screenshot from Gyazo

インストール先を選択すると、「インストール」ボタンが押せるようになるので、クリック
Screenshot from Gyazo

ダウンロード、インストールが進んでいる最中に、rootパスワードとユーザ作成をしておく。
ユーザ作成時には、「このユーザを管理者にする」にチェックを入れておくと、後で楽。
Screenshot from Gyazo

CentOS8の設定

初期状態でsshログインができるので、作成したユーザでログイン。
毎回 sudo がめんどいので、 sudo su - しちゃう。

SSH設定

rootログイン無効化と、ポート修正

# vi /etc/ssh/sshd_config
-----8<-----snip-----8<-----
#Port 22
Port XXXX

#PermitRootLogin yes
PermitRootLogin no
-----8<-----snip-----8<-----

# systemctl restart sshd

firewall設定

cockpitはwebからサーバ管理できるアプリケーションらしいですが、使わないので、閉じます。
上記設定でSSHのポートを変更したら、firewallもそれに合わせて設定します。(この例ではTCP22のまま)

# firewall-cmd  --list-services
cockpit dhcpv6-client ssh

# firewall-cmd --remove-service  dhcpv6-client --zone=public --permanent
# firewall-cmd --remove-service cockpit  --zone=public --permanent
# firewall-cmd --reload

# firewall-cmd --list-service
ssh

SELinux無効化

いつもすんません。。。

# vi /etc/selinux/config
-----8<-----snip-----8<-----
#SELINUX=enforcing
SELINUX=disabled
-----8<-----snip-----8<-----

で、一度再起動。

よく使うパッケージをいれておく

パッケージ管理はdnfというものになったみたいです。
本体はdnf-3ってやつみたいですね。

$ ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 12月 19 10:43 /usr/bin/yum -> dnf-3
$ ll /usr/bin/dnf
lrwxrwxrwx. 1 root root 5 12月 19 10:43 /usr/bin/dnf -> dnf-3

最初なんで無条件にアップデートしてしまおう。

$ sudo dnf -y install epel-release
$ sudo dnf -y update
$ sudo dnf -y install screen vim lftp wget open-vm-tools mlocate tcpdump unzip bind-utils telnet

時刻設定

タイムゾーンを確認

$ date
2020年  2月  7日 金曜日 21:59:21 EST
(ESTって、どこだよ、それ)

$ sudo timedatectl set-timezone Asia/Tokyo
$ date
2020年  2月  4日 火曜日 11:02:51 JST

NTPの設定はさいしょからされてるぽい

$ chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ec2-13-230-38-136.ap-nor>     2   6   377    57    -65us[ +200us] +/-   40ms
^+ 122x215x240x51.ap122.ftt>     2   6   377    58   -254us[+9893ns] +/-   48ms
^- mx.execve.net                 2   6   377    56  +1322us[+1322us] +/-  164ms
^+ hit-bridge.com                2   6   377    56   +152us[ +152us] +/-   47ms

なるほど、初期設定の時点で負荷分散しているのね。

$ grep pool /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.centos.pool.ntp.org iburst

$ dig 2.centos.pool.ntp.org +short
13.230.38.136
203.178.135.73
122.215.240.52
45.76.111.149

SNMP(あとから追記しました)

遠隔から監視できるように、SNMPをうごかしておく。
パッケージは net-snmp でよい。

$ sudo dnf -y install net-snmp net-snmp-utils

もとの設定ファイルに追記でもよいし、まるっと書き換えでもOK

/etc/snmp/snmpd.conf
com2sec p2user  default rocomm
group   p2group v2c p2user
view    p2view    included   .1
access  p2group ""      any       noauth    exact     p2view none none

ポートの穴あけとサービス起動をしておく

# firewall-cmd --add-service=snmp --zone=public --permanent
# firewall-cmd --reload
# systemctl enable snmpd
# systemctl start snmpd

よその端末から見れるか確認しておこう。

$ snmpwalk -c rocomm -v 2c 10.254.10.251 sysdescr
SNMPv2-MIB::sysDescr.0 = STRING: Linux vmnetserv01.prosper2.net 4.18.0-147.5.1.el8_1.x86_64 #1 SMP Wed Feb 5 02:00:39 UTC 2020 x86_64

さいごに

CentOS7でopensslのバージョンを上げるのが面倒なので、これからCentOS8に乗り換えていきたいと思います!

出典

とくにありません。

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

複数NICを持つマシンでポリシーベースルーティング

はじめに

私はデータベース、特にPostgreSQLが専門(?)なのですが、求められれば付け焼き刃で勉強しながらネットワークの設定もやったりします。
今回は、複数NICを持つLinuxマシンに対して、1つのNICのみを持つマシンから両方のNICに対して通信をすることになりました。

どういうことかというと

次の図を御覧ください。
001.png

青のLANは192.168.10.0/24のセグメントであり、緑のLANは192.168.20.0/24のセグメントです。

マシンAにNICが2つあり、それぞれのNICが青と緑に接続しています。

  • NIC0
    • IP:192.168.10.2
    • GW:192.168.10.254
  • NIC1
    • IP:192.168.20.2
    • GWは設定していません。

マシンBはNICが1つのみであり、緑のLANにしか接続していません。

  • NIC0
    • IP:192.168.20.201
    • GW:192.168.20.254

このネットワーク構成でつまり、次の図のようなことがしたいわけです。

002.png

非対称ルーティング

実はこのネットワーク構成では、やりたいことが上手くできません。pingを飛ばしても返ってこないのです。
どうしてそうなるのか。マシンBからマシンAへの通信がどうなっているかを説明します。

まず、マシンBは同一セグメント上にない「192.168.10.2」というIPアドレスがどこにあるか自分ではわかりません。そういうときは、デフォルトゲートウェイに問い合わせに行きます。

0003.png

ゲートウェイはルーティング情報から、宛先のアドレスのネットワークに向けて中継します。

004.png

マシンAまで届くとマシンAは何を血迷ったか、受信したNIC1ではなく送信元のマシンBが接続している緑のセグメントと同セグメントのNIC0から返信しようとします。
005.png

NIC0から返信してしまうと、受信した経路と送信した経路が異なる非対称ルーティングとなります。そして、Linuxではデフォルトではこれを禁止しており、マシンBまで返信は返りません。

2つの対策

対策としては2つ考えられます。

非対称ルーティングを許可

1つは非対称ルーティングを許可してあげること。しかし、非対称ルーティングはマシンのなりすましなどの可能性があるため、ホイホイ許可するのは考えものです。本記事ではやり方には触れませんが、許可したい場合はrp_filterで検索してみてください。

静的ルーティングを設定

本記事の本命はこちら。要するにマシンAの振る舞いの何が悪いのかというと、NIC1で受信したのにNIC0から返信しようとしているところです。だったら、NIC1で受信したならNIC1から返すように、無理矢理にでも設定してあげればいいわけです。その設定方法が、静的ルーティングです。

静的ルーティング設定手順

ポリシーベースルーティングというものの設定をしてみたいと思います。

ルーティングテーブルファイルに追加

/etc/iproute2/rt_tablesに次の2行を追加します。

100     rule01
101     rule02

ルールファイルを作成

/etc/sysconfig/network-scriptsディレクトリの下に、NIC0とNIC1のインタフェースそれぞれに適用させるルールファイルを作成します。

# vi rule-nic0
from 192.168.20.2/32 table rule02 priority 200
# vi rule-nic1
from 192.168.10.2/32 table rule01 priority 100

ルーティングファイルを作成

同じく/etc/sysconfig/network-scriptsディレクトリの下に、NIC0とNIC1のインタフェースそれぞれに適用させるルーティングファイルを作成します。

# vi route-nic0
192.168.20.0/24 dev nic0 table rule02
default via 192.168.20.254 dev nic0 table rule02
# vi route-nic1
192.168.10.0/24 dev nic1 table rule01
default via 192.168.10.254 dev nic1 table rule01

ネットワークを再起動

# systemctl restart network

これで、設定が上手くいっていれば、当初の目的が実行できているはずです!お疲れ様でした!

余談

次の図を御覧ください。

006.png

このような通信は、同一セグメント内であり、全く問題なく行えます。それなら別に、マシンAには到達できているわけだしわざわざ異なるネットワークセグメントから通信する必要あるのかどうか、疑問に思った方もいるかもしれません。

私だってそう思います。

でも、やれって言われたらやるしかないじゃん。

いったいどういう目的があってこんなことをやらされたのか、終わった今でも謎です。

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

Android でもとりあえず Ubuntu のデスクトップ環境を使いたい(UserLAnd 版)

はじめに

先に公開した Android Studio を使うための最低限のデスクトップ環境の構築方法を記載します。
日本語入力もありませんが、その代わり最短で構築できると思います。

Android の上で最も手軽に Ubuntu の環境を構築するなら UserLAnd が一番楽だと思われます。
Termux でもできますが、UserLAnd の方が手間が少なくて済みます。
その代わり、Termux より動作速度が遅いです。
どちらが良いかはお手持ちのスマートフォンの速度と好みで選ぶと良いと思います。

注意点

デスクトップ環境(LXDEやXfce)のインストールは数時間かかります。
時間を確保してから実施するほうが良いと思います。

インストール

Play ストア で UserLAnd と XSDL をインストールしてください。
UserLAnd は Debian や Ubuntu といった Linux 環境を簡単に構築するためのアプリケーションになります。
XSDL は画面を担当するアプリケーションです。
UserLAnd はコマンドラインまでしかサポートしませんので、XSDL で画面をサポートしてもらいます。

Ubuntu のインストール

UserLAnd を立ち上げて、Ubuntu と書かれた項目をタップします。
ユーザーIDとパスワードを入力して CONTINUE をタップします。
接続の種類に SSH, VNC, XSDLを選択するように言われますので、SSH を選択して CONTINUE をタップします。

環境によりけりですが、1時間は待つことになると思います。

Ubuntu デスクトップ環境のインストール

ここからは Ubuntu での操作になります。

まずは apt でパッケージ(Linux アプリケーションの倉庫のようなもの)を更新します。

sudo apt update
sudo apt upgrade -y

次にデスクトップ環境をインストールします。
調べた限りでは、LXDE, Xfce の2種類が使えます。
LXDE の方が軽いそうですが、Xfce の方が見た目が良くLXDE程ではないですけれども十分な軽さを持っているそうです。
ここは好みで選択すれば良いと思います。

なお、ここでネットワークやスマートフォンの速度にもよると思いますが数時間掛かります。

・ LXDE のインストール

sudo apt install -y lxde

・ XFCE のインストール

sudo apt install -y xfce4

環境の設定

XSDL を立ち上げてしばらく待って下さい。
最後なにやら文字列を表示している画面が出るので以下をメモしてください。

上から2行目に以下の文字列が出るはずです。DISPLAY のポート番号をメモしてください。

export DISPLAY=(何かのIPアドレス):(ポート番号)

上から3行目に以下の文字列が出るはずです。同様に PULSE_SERVER のポート番号をメモしてください。

export PULSE_SERVER=(何かのIPアドレス):(ポート番号)

IPアドレスはメモする必要はないです。
再び UserLAnd の Ubuntu に戻って下さい。
XSDL に接続するために、設定ファイルに先程メモしたポート番号とローカルのIPアドレスを記載します。

# テキストエディタ vim をインストールしていない人はインストール
sudo apt install -y vim

# startXDSL にXDSLの接続設定を記載する
vim /support/startXSDLServerSteo2.sh

4行目、8行目、16行目辺りを修正します。

# 4行目辺り。4721 の値をメモを行った DISPLAY のポート番号に書き換えます。
  DISPLAY=:4721
    ↓ 書き換え後
  DISPLAY=:(さっきメモした DISPLAY のポート番号)

# 8行目辺り。4721 の値をメモを行った PULSE_SERVER のポート番号に書き換えます。
  PULSE_SERVER=localhost:4721
    ↓ 書き換え後
  PULSE_SERVER=localhost:(さっきメモした PULSE_SERVER のポート番号)

# 16行目辺り。/usr/bin/twm の値を exec startlxde または、exec startyxfce4 に書き換えます。exec を付けないと動作しないので付けて下さい。
  echo '/usr/bin/twm' > /home/$INITIAL_USERNAME/.xinitrc
    ↓ 書き換え後
  # LXDE を使う場合
  echo 'exec startlxde' > /home/$INITIAL_USERNAME/.xinitrc

  # Xfce を使う場合
  echo 'exec startxfce4' > /home/$INITIAL_USERNAME/.xinitrc

vim の操作方法を知らない人は以下だけ覚えればなんとかなります。

キーボードのキー 役割
i コマンドモードから入力モードに入る
ESC 入力モードを抜けてコマンドモードに戻る
:wq 保存して終了する。コマンドモードで操作すること。

デスクトップ環境の起動

UserLAnd に戻って Ubuntu を長押しし、Stop App を選んで終了して下さい。
(終了しない場合には、下の Sessionsにある Ubuntu を長押しして Stop Session を選択して下さい。)
再び Ubuntu を長押しし、App Info を選択し XSDL を選択してください。
下の Apps を押してから Ubuntu を押して起動してください。
しばらくすると Ubuntu のデスクトップ環境が立ち上がります。

UserLAnd の場合には XSDL の立ち上げまで行ってくれるので、手動で XSDL を立ち上げる必要はありません。

参考サイト

https://www.hiroom2.com/2018/05/06/ubuntu-1804-xfce-ja/

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