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

初心者がWindowsPCに仮想マシンを作ってLinux環境を作成する時、躓きやすい2点をまとめました(※Linux超初心者向け)

使う教材:『Linuxの教科書』三宅英明 著

 初心者必携の一冊。(私も今日Linux始めたばかりですが)
 「この通りにやればいつの間にか環境構築が終わっている」という分かりやすさです。
 ただ、書籍の通りにやったものの2箇所だけ足止めをくらったので、それをまとめました。

『作業手順』 

  1. VirtualBoxをダウンロード (本を持っている人はp5から)
  2. CentOSをダウンロード
  3. VBから仮想マシンを作成  ※注意事項1
  4. VBからCentOSを起動、インストール
  5. ユーザ設定
  6. 再起動後、ログイン ※注意事項2

※注意事項1

問題点:プルダウンで「Red Hat(64 bit)」が表示されない
解決策:BIOSの設定を変更する

仮想マシンを作成するとき、バージョン聞いてきますよね。
私のPCではなぜか「Red Hat(32 bit)」しか選べませんでした。

まあいいかと思って32bitで進めたところ、CentOSインストール時にエラー発生!

エラー文
this kernel requires an x86-64 cpu but only detected an i686 cpu

ググったところ、BIOS設定に問題があるのではないかと思い当たったので以下の作業を行う:
・再起動し、ASUS(私のPCの場合)ロゴが出ている時にF2ボタン押す
・Advanced → CPU configuration
・Intel Virtualization Technologyをenableにする
・Save&Exit

改めてVirtualBoxを起動して仮想マシンを作成したところ、
プルダウンに64bitが出ました。
VirtualBoxのバージョンで64bitが選べない時の解決策2.png

※注意事項2

問題点:CentOSのインストール後、再起動するとログイン画面が出てしまう
解決策:ストレージからディスクイメージを削除
検索word:「VirtualBox 再起動後 インストール画面」

教科書ではp13で再起動ボタンを押せばログイン画面に進めると書いてありますが、再起動後、なぜか再びインストール画面が登場。

何度ソフトのインストールや仮想マシンの再作成をやっても結果が変わらず、ググったところMasashi Tsuru様の記事を発見。

VirtualBox に Linux(CentOS 6)をインストールしてみた (CentOSインストール編) 
https://2626.info/install-centos/

上記を読んだほうが早いと思いますが、ソフトが7年前のverなので、
スクショと併せて書いておきます。

・一旦CentOSを終了
・VirtualBoxの「設定」を押し、左側の項目から「ストレージ」を選択
・コントローラー:IDEに紐づいている「CentOS-8-x86_64-1905-dvd1.iso」(CentOSのインストールに使ったディスクイメージ)を右クリックし、削除
・「光学ドライブを削除しますか?」という警告文が出るので、「除去」をクリック
VirtualBoxのバージョンで64bitが選べない時の解決策3.PNG

CentOSを再起動したところ、黒い画面が立ち上がり、何回か灰色の画面が出たりして不安になりますが、
VirtualBoxのバージョンで64bitが選べない時の解決策4.PNG
そのまま待ってるとライセンス情報の画面に切り替わり、「ライセンス契約に同意します」にチェック入れて進むと無事ログイン画面へ。
VirtualBoxのバージョンで64bitが選べない時の解決策7.PNG

つ、疲れた……!
まだ環境構築しか終わってないですが、達成感だけを噛みしめて、
明日からは実際にLinuxを動かします。頑張るぞ。

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

ソケットを使って、DNS、mDNS、WINS、LLMNRでホスト名のIPアドレスを問い合わせる

名前の問い合わせ

普通はOSの関数であるgethostbynameまたはgetaddrinfoを使って、ホスト名からIPアドレスを取得しますが、これを自前でやってみます。ソケットとUDP通信の学習用サンプルプログラムとしてご利用いただけます。または、汎用OSが無いワンチップマイコンなどにも応用できるかもしれません。動作環境はLinuxを想定しています。

プログラムとしては、あえて、微妙に未完成な感じにしてあります。4種類のプロトコルは、ソースコード中のコメントアウトしている行を変更して切り替えてください。

ソースコードは、このページの下にあるリンクからどうぞ

DNS

インターネットの名前解決を行います。Domain Name Service の略です。

DNSサーバの UDP/53 へ問い合わせします。サーバアドレスはソースコード中にハードコーディング(8.8.8.8)してあります。

mDNS

macOSで主に使われる名前解決の仕組みで、Multicast DNS の略です。Windows 10では標準でサポートされています。10未満のWindowsでは「Bonjour for Windows」をインストールすると利用できるようになります。Linuxでは Avahi Daemon でサポートされています。

ローカルネットワークの 224.0.0.251 宛に UDP/5353 へマルチキャストして問い合わせします。該当するホストは自分自身で応答パケットを返信します。

WINS

Windowsでかなり昔からある名前解決の仕組みです。Windows Internet Name Service の略、別名NBNS(NetBIOS Name Service)ともいいます。Ubuntu/Debianでは、Sambaまたはlibnss-winbindというパッケージをインストールすると利用できるようになります。ただし、最新の一部ディストリビューションでは、起動スクリプトに問題があるらしく、これを利用するには修正が必要なことがあるらしいです。

ローカルネットーワークで UDP/137 へブロードキャストで問い合わせます。該当するホストは自分自身で応答パケットを返信します。

LLMNR

最近のWindowsでサポートされている名前解決の仕組みで、Link-local Multicast Name Resolution の略です。最近といっても Windows Vista 以降なので、ほとんどのWindows環境で利用できます。ただし、NASなどのハードウェア製品では、WINSは使えてもLLMNRには対応していないことがあります。

ローカルネットワークの 224.0.0.252 宛に UDP/5355 へマルチキャストして問い合わせします。該当するホストは自分自身で応答パケットを返信します。

ソースコード

ビルド用の定義は、筆者が愛用している開発環境 Qt Creator のプロジェクトファイルを用意しましたが、C++のソースファイルが1個だけですので、簡単にコンパイルできると思います。プログラムの開発に当たって、「Geekなぺーじ/UDPパケットのやりとりを行うサンプルプログラム」を参考にさせていただきました。

https://github.com/soramimi/nsquery

サーバ側(参考)

ついでですが、問い合わされる側(サーバ)のコードも、昔書いたのがあります。もし興味があればご覧ください。

https://github.com/soramimi/bogons

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

Linux (Arch Linux) の開発環境設定の記録 (Arch Linux のインストール)

はじめに

Arch Linux をインストールした際の記録です。

5年くらい前に購入したノートパソコンに Windows とのデュアルブート環境でインストールしてみました。
かなり軽快に動作していますので,近いうちにシングルブート環境でインストールしなおしてみようと思います。

記事作成・更新時の環境

  • CPU: Intel Celeron® N2830
  • RAM: 4GB
  • HDD: 500GB
  • UEFI による Windows 10 Home とのデュアルブート

Windows とのデュアルブート環境を構築するためには Windows を先にインストールする必要があります。

Windows パーティションのリサイズ等は略します。

Arch Linux について

1. 英語

2. 日本語

Arch Linux のインストール

インストールガイド - ArchWiki を参照しながら進めます。

1. インストールの準備

以下から ISO ファイルをダウンロードします。

以下を参考にインストールメディアを作成します。

1.1. 署名の検証

署名の検証 を参考にしてください。

1.2. ライブ環境の起動

UEFI 設定画面から以下を確認します。

  • Fast Boot: Disabled
  • Launch CSM: Enabled
  • Secure Boot: Disabled

Boot 関連のメニューからインストールメディアを選択し,ライブ環境を起動します。

UEFI モードで起動してください。

最初は仮想端末に Root ユーザーでログインされ,Zsh のシェルプロンプトが表示されます。

設定ファイルを編集するときには,nano,vi,vim が使えます。

1.3. キーボードレイアウト

デフォルトのキーボードレイアウトは US キーボードです。

利用可能なキーマップは以下のコマンドで確認できます。

# ls /usr/share/kbd/keymaps/**/*.map.gz

日本語キーボードレイアウトに設定するには,以下を実行します。

# loadkeys jp106

1.4. 起動モードの確認

以下を実行し UEFI モードで起動しているかどうかを確認します。

# ls /sys/firmware/efi/efivars

UEFI モードで起動している場合は /sys/firmware/efi/efivars ディレクトリの内容が表示されます。

UEFI モードで起動していない場合は No such file or directory と表示されます。

1.5. パーティション

以下を実行し,システムに接続されているストレージを確認します。

# fdisk -l

パーティショニング を参考にしてください。

最終的に今回のストレージ構成は以下のようになります。

/dev/sda
|- /dev/sda1 NTFS    529M Windows recovery environment
|- /dev/sda2 FAT32   100M EFI System (/mnt/boot をマウント)
|- /dev/sda3          16M Microsoft reserved
|- /dev/sda4 NTFS  249.4G Microsoft basic data (Windows 10)
|- /dev/sda5 ext4  215.8G Linux root (x86-64) (/mnt をマウント)

スワップパーティションは作成していません。

以下 sdXy は適宜読み替えてください。

1.6. パーティションのフォーマット

以下を実行し,ルートパーティション (/dev/sda5) を ext4 形式でフォーマットします。

# mkfs.ext4 /dev/sda5

1.7. パーティションのマウント

以下を実行し,ルートパーティションをマウントします。

# mount /dev/sda5 /mnt

以下を実行し,EFI システムパーティション 用のディレクトリを作成しマウントします。

# mkdir /mnt/boot
# mount /dev/sda2 /mnt/boot

デュアルブート環境になりますので,Windows で作成されている EFI システムパーティション を指定します。

以下を実行し,正しくマウントされていることを確認します。

# lsblk /dev/sda

1.8. インターネットへの接続

以下を実行し,ネットワークインターフェイスが認識・有効化されていることを確認します。

# ip link

ワイヤレス LAN による接続 を行いますので,ワイヤレスデバイス名 (wlp2s0 など) を確認します。

以下を実行します。

# wpa_supplicant -B -D nl80211,wext -i [wlp2s0] -c <(wpa_passphrase [MYSSID] [PASSPHRASE])

# dhclient [wlp2s0]

[wlp2s0] と [MYSSID] と [PASSPHRASE] は適宜変更してください。

以下を実行し,接続を確認します。

# ping archlinux.org

1.9. システムクロックの更新

以下を実行します。

# timedatectl set-ntp true

サービスの状態は,以下で確認することができます。

# timedatectl status

2. インストール

2.1. ミラーの選択

以下を実行し /etc/pacman.d/mirrorlist を編集します。

# nano /etc/pacman.d/mirrorlist

日本のミラーサーバーを最上位にします。

2.2. ベースシステムのインストール

以下を実行し,base パッケージカーネル をインストールします。

# pacstrap /mnt base base-devel linux nano

後ほど AUR も使用しますので base-devel パッケージグループ もインストールします。

別途テキストエディタのインストールが必要になったようですので nano を指定しておきます。

3. システムの設定

3.1. fstabの生成

以下を実行し fstab を生成します。

# genfstab -U /mnt >> /mnt/etc/fstab

作成された /mnt/etc/fstab に問題がないことを確認してください。

3.2. chroot

新しくインストールしたシステムに chroot します。

# arch-chroot /mnt

3.3. タイムゾーン

以下を実行し,タイムゾーンを設定します。

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

以下を実行し,ハードウェアクロックを設定します。

# hwclock --systohc --utc

ハードウェアクロックが UTC に設定されている場合,マシンにインストールされている他のオペレーティングシステムも UTC に設定 する必要があります。

Windows とのデュアルブート環境では Windows 側のレジストリを変更する必要がありますので Windows で UTC を使う を参照してください。

3.4. ロケール

以下を実行し /etc/locale.gen を編集します。

# nano /etc/locale.gen

en_US.UTF-8ja_JP.UTF-8 をアンコメントし,以下を実行します。

# locale-gen

以下を実行し,ロケールを設定します。

# echo LANG=en_US.UTF-8 > /etc/locale.conf

インストール中はデフォルトの言語を英語としておきます。

デフォルトのキーボードレイアウトは US キーボードです。

日本語キーボードレイアウトに設定するには,以下を実行します。

# echo KEYMAP=jp106 > /etc/vconsole.conf

3.5. ホストネーム

以下を実行し,ホストネーム (コンピュータ名) を設定します。

# echo [myhostname] > /etc/hostname

[myhostname] は適宜変更してください。

以下を実行し /etc/hosts を編集します。

# nano /etc/hosts

以下のように同じホスト名を記述します。

127.0.0.1 localhost
::1       localhost
127.0.1.1 [myhostname].localdomain [myhostname]

3.6. ネットワーク設定

新しくインストールされた環境では,ネットワーク接続がデフォルトで有効になっていません。

以下を実行し NetworkManager をインストールし有効化します。

# pacman -S networkmanager dhcpcd
# systemctl enable NetworkManager

chroot では nmtui コマンドで作業をすることができません。

インストールが完了して再起動した後に nmtui コマンドで設定をします。

3.7. Initramfs

今回は使用していません。

3.8. Root パスワード

以下を実行し Root パスワードを設定します。

# passwd

3.9. ブートローダーの設定

以下を実行し GRUB をインストールします。

# pacman -S grub efibootmgr
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
# grub-mkconfig -o /boot/grub/grub.cfg

以下を実行し Intel の マイクロコード を更新します。

# pacman -S intel-ucode
# grub-mkconfig -o /boot/grub/grub.cfg

3.10. 再起動

以下を実行し chroot 環境から抜け再起動します。

# exit
# umount -R /mnt
# reboot

Root アカウントでログイン後に以下を実行し NetworkManager の設定をします。

# nmtui

インストール後

一般的な推奨事項 を参照してください。

1. システム管理

1.1. ユーザーとグループ

以下を実行し,一般ユーザー を追加します。

# useradd -m -g users -G wheel [username]
# passwd [username]

[username] は適宜変更してください。

1.2. 管理者権限

wheel グループに sudo 権限を与えるために以下を実行します。

visudo ではデフォルトのエディターが vim なので一時的に nano に変更します。

# EDITOR=nano visudo

以下のように %wheel ALL=(ALL) ALL をアンコメントします。

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

以下のように %wheel ALL=(ALL) NOPASSWD: ALL をアンコメントすることでパスワード無しで使用することができるようになります。

## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL

以下を実行し,Root アカウントからログアウトします。

# logout

今後は以下のように表記します。

# Root で実行するコマンド
$ User で実行するコマンド

2. パッケージ管理

2.1. pacman

パッケージの更新は以下を実行します。

$ sudo pacman -Syu

2.4. Arch User Repository

非公式リポジトリ AUR: Arch User Repository のパッケージは pacman で簡単に管理することができません。

AUR をより便利に使うために AUR ヘルパーである yay を導入します。

以下を実行し yay のビルドに必要な Git をインストールします。

$ sudo pacman -S git

以下を実行し git clone します。

$ git clone https://aur.archlinux.org/yay.git

以下を実行し,パッケージをビルドしインストールします。

$ cd yay
$ makepkg -si

yay のビルドに必要な go が自動でインストールされるようです。

以下を実行し,ビルド用のファイルを削除します。

$ cd ..
$ rm -rf yay

go が不要な場合は,以下を実行し削除します。

$ sudo pacman -Rs go

AUR パッケージの圧縮に使う xz はデフォルトでシングルスレッドのようです。

makepkg で出来る限り多くの CPU コアを使ってパッケージを圧縮するには /etc/makepkg.confCOMPRESSXZ の行を編集します。

以下を実行し /etc/makepkg.conf を編集します。

$ sudo nano /etc/makepkg.conf

以下のように COMPRESSXZ の行を変更します。

COMPRESSXZ=(xz -c -z - --threads=0)

AUR パッケージを含むシステム全体のパッケージの更新は,以下を実行します。

$ yay

4. グラフィカルユーザーインターフェース

4.1. ディスプレイサーバー

以下を実行し,ディスプレイサーバーである Xorg をインストールします。

$ sudo pacman -S xorg-server

4.2. ディスプレイドライバ

以下を実行し,ビデオカードを確認します。

# lspci | grep VGA

以下を実行し,ディスプレイドライバ をインストールします。

$ sudo pacman -S [xf86-video]

[xf86-video] は適宜変更してください。

4.3. ディスプレイマネージャ

以下を実行し,ディスプレイマネージャーである LightDM をインストールし有効化します。

$ sudo pacman -S lightdm lightdm-gtk-greeter
$ sudo systemctl enable lightdm

4.4. デスクトップ環境

以下を実行し,デスクトップ環境である Xfce4 をインストールします。

$ sudo pacman -S xfce4 xfce4-goodies

日本語配列キーボードを使用している場合は,以下を実行し Xorg のキーボードレイアウト設定を変更します。

$ sudo localectl set-x11-keymap jp

ロケールを日本語に変更します。

以下を実行し /etc/locale.conf を編集します。

$ sudo nano /etc/locale.conf

以下のように記述します。

LANG=ja_JP.UTF-8

設定が終了したら再起動をします。

$ sudo reboot

8. 入力デバイス

8.5. Xorg での入力

日本語を入力するのに必要なインプットメソッドフレームワークとして Fcitx を,インプットメソッドエンジンとして Mozc をインストールします。

$ sudo pacman -S fcitx fcitx-mozc fcitx-im fcitx-configtool

入力途中の文字が正しく表示されるように ~/.xprofile を編集します。

$ nano ~/.xprofile

以下のように記述します。

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

11. 外観

11.1. フォント

以下を実行し Google Noto Fonts をインストールします。

$ sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra

12. コンソール環境改善

12.2. 他のシェル

現在使用しているシェルを確認します。

$ echo $SHELL

以下を実行し Zsh をインストールします。

$ sudo pacman -S zsh

Zsh をデフォルトのシェルにします。

$ chsh -s $(which zsh)

設定フレームワークである Prezto をインストールします。

以下を実行し,設定ファイルを一旦削除します。

$ cd ~/ && rm .zsh*

公式サイト Prezto の Installatin を参照してインストールします。

テーマを変更するために ~/.zpreztorc を編集します。

116 行目前後に以下の記述がありますのでテーマを pure に変更します。

zstyle ':prezto:module:prompt' theme 'pure'

その他

追加でインストールしたパッケージは以下になります。

$ sudo pacman -S code
$ sudo pacman -S docker
$ sudo pacman -S dropbox
$ sudo pacman -S firefox
$ sudo pacman -S firefox-i18-ja
$ sudo pacman -S google-chrome
$ sudo pacman -S vim
$ yay -S anaconda

Zsh に anaconda のパスを通すために .zprofile に以下を記述します。

# Anaconda
PATH=(
  /opt/anaconda/bin
  $PATH
)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux (Arch Linux) の開発環境設定の記録 (Arch Linux ベースシステムのインストール)

はじめに

Arch Linux をインストールした際の記録です。

5年くらい前に購入した Excel 専用 Windows 機にデュアルブート環境でインストールしてみました。
かなり軽快に動作していますので,近いうちにシングルブート環境でインストールしなおしてみようと思います。
そのためパーティションに関連するところは後日追記します。

またベースシステムのみのインストールだけでは GUI 環境も日本語入力環境もありません。
解像度が WXGA (1366*768) ということもあり,色々と試しているところです。

記事作成・更新時の環境

  • CPU: Intel Celeron® N2830
  • RAM: 4GB
  • HDD: 500GB
  • UEFI による WIndows 10 Home とのデュアルブート

Arch Linux について

1. 英語

2. 日本語

Arch Linux のインストール

インストールガイド - ArchWiki を参照しながら進めます。

1. インストールの準備

以下から ISO ファイルをダウンロードします。

以下を参考にインストールメディアを作成します。

1.1. 署名の検証

以下を参考に署名の検証を行います。

1.2. ライブ環境の起動

UEFI 設定画面から以下を確認します。

  • Fast Boot: Disabled
  • Launch CSM: Enabled
  • Secure Boot: Disabled

Boot 関連のメニューからインストールメディアを選択し,ライブ環境を起動します。

最初は仮想端末に Root ユーザーでログインされ,Zsh のシェルプロンプトが表示されます。

1.3. キーボードレイアウト

デフォルトのキーボードレイアウトは US キーボードです。

利用可能なキーマップは以下のコマンドで確認できます。

# ls /usr/share/kbd/keymaps/**/*.map.gz

日本語キーボードレイアウトに設定するには,以下を実行します。

# loadkeys jp106

1.4. 起動モードの確認

以下を実行し UEFI モードで起動しているかどうかを確認します。

# ls /sys/firmware/efi/efivars

ディレクトリが存在しない場合は UEFI モードで起動していません。

1.5. パーティション

【編集中】

1.6. パーティションのフォーマット

【編集中】

1.7. パーティションのマウント

【編集中】

1.8. インターネットへの接続

以下を実行し。ネットワークインターフェイスが認識・有効化されていることを確認します。

ワイヤレス LAN による接続 を行いますので,ワイヤレスデバイス名 (wlp2s0 など) を確認します。

# ip link

以下を実行します。

[wlp2s0] と [MYSSID] と [PASSPHRASE] は適宜変更します。

# wpa_supplicant -B -D nl80211,wext -i [wlp2s0] -c <(wpa_passphrase [MYSSID] [PASSPHRASE])

# dhclient [wlp2s0]

以下を実行し,接続を確認します。

# ping archlinux.org

1.9. システムクロックの更新

以下を実行します。

# timedatectl set-ntp true

2. インストール

2.1. ミラーの選択

# nano /etc/pacman.d/mirrorlist

日本のミラーサーバーを最上位にします。

2.2. ベースシステムのインストール

以下を実行し,base パッケージとカーネルをインストールします。

# pacstrap /mnt base base-devel linux nano

後ほど AUR も使用しますので base-devel パッケージグループもインストールします。

またテキストエディタが別途インストールが必要になったようですので nano を指定しておきます。

3. システムの設定

3.1. fstabの生成

以下を実行し fstab を生成します。

# genfstab -U /mnt >> /mnt/etc/fstab

3.2. chroot

新しくインストールしたシステムに chroot します。

# arch-chroot /mnt

3.3. タイムゾーン

以下を実行し,タイムゾーンを設定します。

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

以下を実行し,ハードウェアクロックを設定します。

# hwclock --systohc --utc

ハードウェアクロックが UTC に設定されている場合,マシンにインストールされている他のオペレーティングシステムも UTC に設定 する必要があります。

Windows とのデュアルブート環境では Windows 側のレジストリを変更する必要があります。

3.4. ロケール

以下を実行します。

# nano /etc/locale.gen

en_US.UTF-8ja_JP.UTF-8 をアンコメントし,以下を実行します。

# locale-gen

以下を実行し,ロケールを設定します。

# echo LANG=en_US.UTF-8 > /etc/locale.conf

インストール中はデフォルトの言語を英語としておきます。

デフォルトのキーボードレイアウトは US キーボードです。

日本語キーボードレイアウトに設定するには,以下を実行します。

# echo KEYMAP=jp106 > /etc/vconsole.conf

3.5. ホストネーム

以下を実行し,ホストネーム (コンピュータ名) を設定します。

# echo [myhostname] > /etc/hostname

同じホストネームを /etc/hosts にも記述するため,以下を実行します。

# nano /etc/hosts

以下を記述します。

127.0.0.1 localhost
::1       localhost
127.0.1.1 [myhostname].localdomain [myhostname]

3.6. ネットワーク設定

新しくインストールされた環境では,ネットワーク接続がデフォルトで有効になっていません。

ネットワーク接続に NetworkManager を使用します。

以下を実行します。

# pacman -S networkmanager dhcpcd
# systemctl enable NetworkManager

chroot では nmtui コマンドで作業をすることができません。

インストールが完了して再起動した後に設定をします。

3.7. Initramfs

LVM も RAID も今回は使用していません。

3.8. Root パスワード

以下を実行し Root パスワードを設定します。

# passwd

3.9. ブートローダーの設定

以下を実行し GRUB をインストールします。

# pacman -S grub efibootmgr
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
# grub-mkconfig -o /boot/grub/grub.cfg

3.10. 再起動

以下を実行し chroot 環境から抜け再起動します。

# exit
# umount -R /mnt
# reboot

一般ユーザーでログイン後に以下を実行し NetworkManager の設定をします。

# sudo nmtui

一般的な推奨事項

1. システム管理

1.1. ユーザーとグループ

以下を実行し,一般ユーザーを追加します。

# useradd -m -G [additional_group] [username]
# passwd [username]

1.2. 管理者権限

visudo ではデフォルトのエディターが vim なので一時的に nano に変更します。

# EDITOR=nano visudo

以下をアンコメントすることで sudo がパスワードなしで使えるようになります。

%wheel ALL=(ALL) NOPASSWD: ALL

2. パッケージ管理

2.1. pacman

以下を実行し,パッケージを更新します。

# sudo pacman -Syu

3. ブート

3.2. マイクロコード

以下を実行し, Intel のマイクロコードを更新します。

# pacman -S intel-ucode
# grub-mkconfig -o /boot/grub/grub.cfg

4. グラフィカルユーザーインターフェース

4.1. ディスプレイサーバー

4.2. ディスプレイドライバ

4.3. ディスプレイマネージャ

4.4. デスクトップ環境

4.5. ウインドウマネージャ

5. 電源管理

6. オーディオ/ビデオ

7. ネットワーク

8. 入力デバイス

9. 最適化

10. システムサービス

11. 外観

11.1. フォント

11.2. GTK と Qt のテーマ

12. コンソール環境改善

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

#Mac の ターミナル や #iTerm で HTTPS / HTTP プロクシから Webサイトに接続する ( サーバーに #ssh 接続して SOCKS proxy を立てる ) ( #bash #linux )

ssh コマンド で SOCKS proxy を起動しておく

ssh -vND 8888 user@xxx.xxx.xxx.xxx
ssh -vND 8888 user@xxx.xxx.xxx.xxx -i ~/.ssh/some.pem

環境変数で HTTPS proxy を指定する

export HTTPS_PROXY=socks://127.0.0.1:8888

こちらもお好みで

export HTTP_PROXY=socks://127.0.0.1:8888

自分のIPをcurlコマンドで確認してみる

環境情報確認サイト「確認くん」を使ってみる。

昔からお世話になってます!

$ export HTTPS_PROXY=
$ https://httpbin.org/ip
{
"origin": "YYY.YYY.YYY.YYY, YYY.YYY.YYY.YYY"
}

プロクシを利用しない設定にして自分のIPアドレスを確認する

$ export HTTPS_PROXY=
$ https://httpbin.org/ip
{
  "origin": "ZZZ.ZZZ.ZZZ.ZZZ, ZZZ.ZZZ.ZZZ.ZZZ"
}

切り替えできていたら成功!

設定を保存する

~/.bash_profile ~/.bashrc ~/.zshrc などのプロフィールファイルに export コマンドを書いておけばok

NOTE

なぜかこちらの方法だと反映されなかった。

curl httpbin.org/ip

グローバルIPをcurlで確認 - Qiita

関連

Mac OS で ssh サーバーを踏み台にして SOCK プロクシ経由で Web ページにアクセスする例 ( #Mac #ssh ) - Qiita

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2652

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

メモリが足りない?Swapファイルを作ってみたら?

メモリが足りない...

検証用にAWSでLinuxインスタンス(t2.micro, memory=1GB)上で、Composerインストールしようとしたら...

composer require predis/predis

えっ、メモリが足りない...。

出力.
 Using version ^1.1 for predis/predis
 ./composer.json has been updated
 Loading composer repositories with package information
 Updating dependencies (including require-dev)

 mmap() failed: [12] Cannot allocate memory

 mmap() failed: [12] Cannot allocate memory

 mmap() failed: [12] Cannot allocate memory
 PHP Fatal error:  Out of memory (allocated 680185856) (tried to allocate 14952775 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 451

 Fatal error: Out of memory (allocated 680185856) (tried to allocate 14952775 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 451

インスタンスのサイズを大きくすれば解決するのだろうが、面倒だしコストもかかる。

Swapファイルを作ってみる

Swapファイルとはなんぞや

スワップファイル (swap file)とは、使っていないメモリの内容を一時的にしまっておくためのファイルです。(参考3)

メモリの現状確認

-mはメガバイト単位で出力します。

$ free -m

              total        used        free      shared  buff/cache   available
Mem:            985         233          70           0         682         593
Swap:             0           0           0

Swap用のファイルを作成

ddコマンドは、コピーコマンドのようなものらしいです。
例えば、「インストールメディアなどをISOイメージとして保存する」のために使ったりするらしい(昔の情報)。

「dd bs=バイト数 count=個数 if=/dev/zero of=ファイル」で、「バイト数×個数」分のサイズのファイルを作成できる。例えば、「dd bs=100 count=1 if=/dev/zero of=file1」なら「file1」という名前の、全てNULL文字で埋まった100バイトのファイルを作成する。

1M x 1024 = 1000MiB のファイルを作ってみる。

$ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024

1024+0 レコード入力
1024+0 レコード出力
1073741824 バイト (1.1 GB) コピーされました、 14.2801 秒、 75.2 MB/秒

Swapファイルとして初期化する

$ sudo /sbin/mkswap /var/swap.1

mkswap: /var/swap.1: パーミッション 0644 は安全な値ではありません。 0600 をお勧めします。
スワップ空間バージョン 1 を設定します。サイズ = 1024 MiB (1073737728 バイト)
ラベルはありません, UUID=6b6561f4-6a4d-4384-900c-8d5747ca144a

ひとまず警告は無視。

Swapファイルを有効化する

$ sudo /sbin/swapon /var/swap.1

swapon: /var/swap.1: パーミッション 0644 は安全な値ではありません。 0600 をお勧めします。

メモリの確認

$ free -m
               total        used        free      shared  buff/cache   available
 Mem:            985         192         700           0          92         667
 Swap:          1023          43         980

おっ、Swap領域が増えてる。この後、composer require 成功して、少し感動しました。

翌日、再度メモリを確認してみるとSwapの部分は0バイトになっていたので、これは一時的なSwap領域だと思います。永続的にSwapファイルを作成する方法もあるかと思うので、気になる方は調べてみてください。

参考

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

メモリが足りない?Swapファイルを作ってみたら

メモリが足りない...

検証用にAWSでLinuxインスタンス(t2.micro, memory=1GB)上で、Composerインストールしようとしたら...

composer require predis/predis

えっ、メモリが足りない...。

出力.
 Using version ^1.1 for predis/predis
 ./composer.json has been updated
 Loading composer repositories with package information
 Updating dependencies (including require-dev)

 mmap() failed: [12] Cannot allocate memory

 mmap() failed: [12] Cannot allocate memory

 mmap() failed: [12] Cannot allocate memory
 PHP Fatal error:  Out of memory (allocated 680185856) (tried to allocate 14952775 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 451

 Fatal error: Out of memory (allocated 680185856) (tried to allocate 14952775 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 451

インスタンスのサイズを大きくすれば解決するのだろうが、面倒だしコストもかかる。

Swapファイルを作ってみる

Swapファイルとはなんぞや

スワップファイル (swap file)とは、使っていないメモリの内容を一時的にしまっておくためのファイルです。(参考1)

メモリの現状確認

-mはメガバイト単位で出力します。

$ free -m

              total        used        free      shared  buff/cache   available
Mem:            985         233          70           0         682         593
Swap:             0           0           0

Swap用のファイルを作成

ddコマンドは、コピーコマンドのようなものらしいです。
例えば、「インストールメディアなどをISOイメージとして保存する」のために使ったりするらしい(昔の情報)。

「dd bs=バイト数 count=個数 if=/dev/zero of=ファイル」で、「バイト数×個数」分のサイズのファイルを作成できる。例えば、「dd bs=100 count=1 if=/dev/zero of=file1」なら「file1」という名前の、全てNULL文字で埋まった100バイトのファイルを作成する。

1M x 1024 = 1000MiB のファイルを作ってみる。

$ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024

1024+0 レコード入力
1024+0 レコード出力
1073741824 バイト (1.1 GB) コピーされました、 14.2801 秒、 75.2 MB/秒

Swapファイルとして初期化する

$ sudo /sbin/mkswap /var/swap.1

mkswap: /var/swap.1: パーミッション 0644 は安全な値ではありません。 0600 をお勧めします。
スワップ空間バージョン 1 を設定します。サイズ = 1024 MiB (1073737728 バイト)
ラベルはありません, UUID=6b6561f4-6a4d-4384-900c-8d5747ca144a

ひとまず警告は無視。

Swapファイルを有効化する

$ sudo /sbin/swapon /var/swap.1

swapon: /var/swap.1: パーミッション 0644 は安全な値ではありません。 0600 をお勧めします。

メモリの確認

$ free -m
               total        used        free      shared  buff/cache   available
 Mem:            985         192         700           0          92         667
 Swap:          1023          43         980

おっ、Swap領域が増えてる。この後、composer require 成功して、少し感動しました。

翌日、再度メモリを確認してみるとSwapの部分は0バイトになっていたので、これは一時的なSwap領域だと思います。永続的にSwapファイルを作成する方法もあるかと思うので、気になる方は調べてみてください。

参考

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

Linux入門 〜コンピュータシステムのハードウェアの概要とLinuxの主な機能とその仕組みの概要〜

概要

こちらの入門監視まとめに続き、初めてのサービスの公開にあたってLinuxの基礎知識を学び、APIサーバに障害が起きた時にサーバ内で何が起こっているのか、どう対処すればいいのかを判断できるようにするために、この記事ではコンピュータシステムのハードウェア構成の概要とプログラムの構成単位、Linuxの主な機能とその仕組みの概要についてまとめました。別の記事で各Linuxの機能であるプロセスやメモリ管理の仕組みの詳細についてまとめます。

コンピュータシステムの概要

コンピュータシステムのハードウェア構成

スクリーンショット 2019-11-02 13.07.08.png

コンピュータは主に下のような手順を繰り返すことで様々な処理を行います。

  1. 入力デバイス、ネットワークアダプタを介してコンピュータにある処理の実行を依頼する
  2. CPUはメモリから命令を読み出して実行し、結果をメモリ上のデータ保存領域に書き込む
  3. CPUはメモリ上に書き込んだ処理結果をハードディスクやSSDなどのストレージに保存したり、ネットワークを通して外部のシステムに送信したり出力デバイスを通して人に通知したりする

上の1~3のような手順を繰り返してユーザーにとって意味のある1つの処理にまとめたものをプログラムといいます。プログラムの種類として大きく分けて、OS、ミドルウェア、アプリケーションがあります

プログラムの構成単位

OSは各種プログラムをプロセスという単位で実行する。各プログラムは1つ又は複数のプロセスから構成されます。
スクリーンショット 2019-11-02 13.15.48.png

OS(Linux)の機能

上で説明したOSの機能として以下のようなものがあります

プロセス管理
プロセススケジューラ
メモリ管理
ファイルシステムの実現
デバイス操作

例:デバイスの操作

スクリーンショット 2019-11-02 13.49.25.png

LinuxのOSの一つの機能としてデバイス操作のためにデバイスドライバという共通のインターフェースを提供しています。
こうすることで開発者がここのデバイスの仕様について一つ一つ理解することなく共通のインターフェースを操作することで様々なデバイスを扱えるような仕組みを実現しています。

さらに、複数のプロセスが同時にデバイスを操作することで予期せぬ動作をするのを防ぐために、デバイスドライバを介して制御しています。

上図のように、ユーザーモードとカーネルモードという二つのモードによってより低レイヤーの処理を保護する仕組みになっています。カーネルモードを動作させるためにはユーザーモードからシステムコールを介して呼ぶ仕組みになっています。
デバイス操作以外にも、プロセス管理、プロセススケジューラ、メモリ管理などもこのようにユーザーモードとカーネルモードとの共同によって実現されています(カーネルモードで動作するOSの核となる処理をまとめたプログラムをカーネルと言います)

まとめ

コンピュータというハードウェがどのようにして外部から処理命令を受付けてそれを内部で実行するかの大まかな内容についてまとめ、プログラムの構成単位、そしてそのプログラムによって実現するLinuxの主な機能の紹介とそのうちの一つであるデバイスの操作の仕組みの概要についてまとめました。この概念の理解を元に、Linuxのメイン機能のプロセス管理やメモリ管理についての詳細を次の記事以降でみていきたいと思います。

参考

Linuxのしくみ
ふつうのLinuxプログラミング 第2版
Linuxサーバーがゼロから作れる本

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