頭弱いがPCの勉強する

正真正銘のPC初心者。勉強ノートのつもり。
ITなんてトンチンカン、だから書くことやること全部適当。

ArchLinuxをインストールするシェルスクリプト

2018-04-08 00:05:24 | Linuxの勉強

新たなPCが二つ手に入ったんでArchLinuxをインストールをインストールしました。 コマンド操作もだいぶ慣れてきたんで初期に比べるとずいぶん早くインストールすることができるようになりましたが、 それでも手間が掛かることには間違いないです。 なので今回はシェルスクリプトの勉強も兼ねて、ArchLinuxを自動でインストールするシェルスクリプトを組んでみました。

 


#!/bin/bash

## パーティション分け(/とswapのみ)
parted -s -a optimal /dev/sda -- mklabel msdos mkpart primary  2048s 終了セクタ set 1 boot on
parted -s -a optimal /dev/sda -- mkpart primary 開始セクタ 終了セクタ set 2

## フォーマット
mkfs.ext4 -j /dev/sda1
mkswap /dev/sda2
swapon /dev/sda2
mount /dev/sda1 /mnt

## baseとbase-develのインストール(初めてで良い書き方がわからなかったので強引な方法でしか書けませんでした)
A=`grep -e "jpn" -n /etc/pacman.d/mirrorlist|sed -e 's/:.*//g'`
B=`sed -n "$A"p /etc/pacman.d/mirrorlist`
cat /etc/pacman.d/mirrorlist > /etc/pacman.d/mirrorlist2
echo $B > /etc/pacman.d/mirrorlist
cat /etc/pacman.d/mirrorlist2 >> /etc/pacman.d/mirrorlist
pacstrap /mnt base base-devel

##  localeの設定
genfstab -U -p /mnt >> /mnt/etc/fstab
P="arch-chroot /mnt"
echo en_US.UTF-8 UTF-8 > /mnt/etc/locale.gen
echo ja_JP.UTF-8 UTF-8 >> /mnt/etc/locale.gen
$P localegen
$P ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$P hwclock --systohc --utc

##その他
$P echo T20 > /etc/hostname
$P systemctl enable dhcpcd.service
$P pacman -Sy
$P pacman -Sy --noconfirm intel-ucode
$P pacman -Sy --noconfirm grub
$P grub-install --target=i386-pc --recheck /dev/sda
$P grub-mkconfig -o /boot/grub/grub.cfg
exit
umount -R /mnt
reboot


 

最初は普通にインストールするときと同じようにchrootでbashを起動する記述にしていたんですが、

そうすると途中で動作が途切れてしまうため調べてみて他の人のものを参考にさせていただきました。

初めて長めのシェルスクリプトを書いた気がしますが、条件分岐とかは入れてないので初心者の私でも結構書きやすかったと思います。

なんだかんだ言って一番手こずったのが改行コードですかね、trコマンドの書式が間違っていたのか中身が全部消えることが2回ほどあって心が一瞬折れかけましたがなんとかなりました。

次はGUI導入とか日本語化とかもスクリプトで組んでみたいですね。


SysVinitとUpstartとSystemdについて

2018-03-10 17:26:08 | Linuxの勉強
こんにちは、今回はLinuxの起動の仕組みについての話です。
ここら辺について詳しくは学んだことは無く軽く勉強したので軽くまとめたいと思います。

SysVinit
Upstart
Systemd
これらはLinuxの起動の仕組みの種類です。
簡単な関係性に表すと一番古いのがSysVinitで、その次の改良版がupstart、それの改良版がSystemdだそうです。
現在主流なのはSystemdです。

それぞれについて説明していきます。
従来のLinuxでは「SysVinit」という起動の仕組みが取られていました。
SysVinitを採用しているLinuxマシンが起動するときは、
ハードウェア起動

BIOS/UEFI起動

OSのカーネル起動

initプロセス起動

ユーザープロセス起動

ユーザープロセス起動

といった感じでユーザプロセスが順番に処理されていくので起動が遅くなります。


それに比べてUpstartはイベント駆動型の仕組みです。
ハードウェア起動

BIOS/UEFI起動

OSのカーネル起動

initプロセス起動

ユーザープロセス起動 ユーザープロセス起動 …

といった感じで並列的にプロセスを起動していくのでSysVinitよりも高速で起動することが可能になっています。
しかしながら問題点も存在しています。
Upstartはイベント駆動というだけあって、プロセスが起動するイベント(条件)を設定ファイルに記述する必要があります。
しかも、指定したイベントがそろうとジョブは無条件で起動、停止をしてしまうので不必要なジョブへの操作が行われてしまうかもしれません。
Upstartではジョブの依存関係をイベントに書き換えて記述しなおさないといけないため、SysVinitからの移行には手間がかかります。


そして現在主流となっているSystemdです。
SystemdもUpstartと同じくユーザープロセスを並列起動可能です。
ただ、Upstartと違い必要なプロセスのみを起動するのでより高速です。
Upstartの場合は最初に発動したイベントをトリガーに連鎖的にジョブを起動させていきます、
なのでシステムに不必要なジョブまで起動してしまうとのことです。
その点はSystemdで改善されています。
Systemdはジョブではなくユニットという単位で管理でプロセスを管理しており、起動したいユニットに必要なユニットのみ起動することで改善されています。
そのほかにも機能が多数追加されています。
・スナップショット機能
systemdの動作状態をある時点で保存しておくことにより、復元可能にする。
・cgroups
Upstartでは孫プロセスまでしか監視できないが、systemdではcgroupsを単位に監視するので同一グループのプロセスはすべて監視できる。
・SysVinitとの互換性
Upstartと違いSysVinitとの互換モードが存在するので移行に便利

Systemdでは様々な機能をsystemctlコマンドで操作します。
SysVinit/Upstartの場合はserviceコマンドでした。
以降したばっかりの頃は、SysVinit/Upstartの癖が抜けずに苦しんだ人が続出したとかしないとか。

にわか知識ですので、ご指摘あったらぜひともください。

Docker使ってみました

2018-03-03 12:30:25 | Linuxの勉強
以前から使ってみたいと思っていました、そう思ったまま一年経っていたDockerをようやく触ることができました。
勉強会でDockerとリバースプロキシを用いてマルチドメインを実装するのを見たので、自分もやってみました。

まずDockerとはなにか
Dockerとはコンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。
従来の仮想環境はホスト型もハイパーバイザー型もゲストOSは必要でしたが、コンテナ型仮想環境であるDockerは違います。
ホストOSのカーネルを利用した仮想環境を構築し、別マシンが動いているかのように動かすことができるのでメモリやリソースが従来より少量ですみます。
Dockerによって起動された仮想マシンはコンテナと呼ばれます。
コンテナはコードによって構築することが可能なので、コードを記したファイルを用いれば同じ環境をすぐさま構築することができます。

基本操作
・docker pull イメージ名
dockerではpullコマンドでイメージをダウンロードできます。
ダウンロードしたイメージを指定して起動すれば簡単に用意されていた環境を起動することができます。

・docker run イメージ名
pullでダウンロードしたイメージファイルを元に仮想環境を構築します。
各種オプションを付けることで様々な設定をすることができます。


今回はAWS EC2でやります。
ホスト環境
ubuntu16.04
docker
nginx←リバースプロキシとして

コンテナ1(A.com)
apache

コンテナ2(B.com)
apache

本当はCentOSでやりたかったんですがAWSの無料枠だとなかったんで、今回はubuntuです。
RHELもいいかと思ったんですが、docker-ceがインストールできなかったので。
今回はdockerとnginxはインストールされている&二つのドメインの登録済という前提で進めます。

1.Dockerイメージの取得
今回コンテナとして使うのはapacheなのでapacheイメージを取得します。
# docker pull httpd
取得できたか確認するため、取得イメージを一覧表示します。
# docker images

2.Dockerネットワークの作成
コンテナの属するネットワークを定義します
# docker network create --subnet=192.168.30.0/24 user_defined_nw


3.Dockerコンテナの作成
イメージを元にコンテナを作成します。
コンテナ1
# docker run -d --name server1 -p 80 --net=user_defined_nw --ip=192.168.30.101 -v /var/www/html1:/usr/local/apache2/htdocs httpd

# docker run -d --name server2 -p 80 --net=user_defined_nw --ip=192.168.30.102 -v /var/www/html2:/usr/local/apache2/htdocs httpd

各オプションについて説明します。
・-d
コンテナをバックグラウンドで動作させます。
・--name 名前
コンテナに名前を付けることができます。これによりコンテナIDだけでなく名前でも操作可能になります。
・--net=ネットワーク名
先ほど作成したネットワークグループを指定し、そこへ所属します。
・--ip=IPアドレス
コンテナのIPアドレスをしていします。
・-v /var/www/html:/usr/local/apache2/htdocs
ホストOSの「/var/www/html」をコンテナ内の「/usr/local/apache2/htdocs」にマウントします。
今回はwww下にhtml1とhtml2を作成し、それぞれに割り当てています。
・httpd
コンテナイメージの指定です。指定したイメージを元に起動します。


4.nginxの設定
マルチドメインにするための設定ファイルを新規作成します。
# vi /etc/nginx/sites-available/web_serverA
内容:
server {
server_name A.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location / {
proxy_pass http://192.168.30.101;
}
}

# vi /etc/nginx/sites-available/web_serverB
内容:
server {
server_name B.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location / {
proxy_pass http://192.168.30.102;
}
}

5.nginxの設定の有効化
sites-enabled下にシンボリックリンクを作成し設定を有効化します
# sudo ln -s /etc/nginx/sites-available/web_serverA /etc/nginx/sites-enabled/
# sudo ln -s /etc/nginx/sites-available/web_serverB /etc/nginx/sites-enabled/
そしてサービスの再起動
#systemctl restart nginx

/var/www/html1と/var/www/html2にそれぞれ違うhtmlファイルを用意し、二つのURLでアクセスしてそれぞれ違うページが表示されれば成功です。


激安ノートパソコン購入

2018-01-19 23:14:04 | 日記


ASUS VivoBook E203NA E203NA-232

ビックカメラで税込み19200円でしたが、前回のポイント1000円分+10%ポイント還元されたのでもっと安めです。

色はグレーのを購入しましたが、一番良いと思います。ほかの色よりも安っぽさがありません。

ドンキのPCより安いですが、ドンキのPCよりは壊れにくそうです。

本来であれば中古のを買ってきて即座にLinuxを入れますが、そろそろWindows離れが進みすぎてまともに使えなくなってきたのでWindowsのまま使おうと思います。

なんとファンレスで静かな上にデザインもシンプルで重さも1kg以下とかなり軽量。

 

基本スペック(価格.comより引用)
液晶サイズ  11.6インチ 解像度  WXGA (1366x768)
CPU Celeron Dual-Core N3350(Apollo Lake)
1.1GHz/2コア
CPUスコア  1117
ワイド画面    ストレージ容量 eMMC:32GB
HDD回転数  メモリ容量

2GB

 

ネットブックに慣れ切っている自分的にはあまり苦しくないスペックですが、少し苦しい部分が一か所あります。

「eMMC:32GB」です。自分は初eMMCですが衝撃を気にする必要がない点はとてもうれしいです。ただ、容量がwindows10にはあまりにも苦しい…。

購入時点でこの有り様。

 

プリインストールの不要なアプリをどんどん削除していきます。

メーカー製PCに当然のごとく入っているマ〇フィーも当然のごとく削除。

そのあとディスクのクリーンアップを掛けてちょっぴりすっきりしたら更新を掛けます。

メインで使ったことあるのはwindows7までだったのでWinodwsUpdateの場所を見つけるのに少し時間が掛かりました…。

しかしながら、「更新プログラムを確認しています。」からなかなか進みません。

Windowsは進行状況をプログレスバーやパーセンテージ表示でしか表示しないことが多いため、処理が止まっているのか動いているのかわかりにくいです…。

とりあえずはWindowsXP以前より数倍マシになったWindowsのトラブルシューティングを使います。

 

いろいろ問題を修復してくれたみたいですが、一番重要そうな不具合が修復されていません。

データベースにエラー起きてるから修復しろ、といいますが原因わかってるなら修復してほしいところです。

調べてみたらコマンドプロンプトからコマンドでWindowsUpdateを停止して初期化しろと書いてあったのでさっそく実行しようと思いましたが、なぜだか終了してくれませんでした。しっかりと管理者権限で実行したのに。

仕方がないので再起動を掛けました。

するとなぜかドライブにエラーが、、、HDDならそろそろ交換を考えなきゃいけないようなエラーですね。

とりあえずドライブにエラーチェックが掛かって何事もなかったことが確認されたので初日に返品はありませんでしたね。

気付くと更新が少し進んでいたのでそのままそっとしておくと無事更新が掛かりました。

Aniversary Updateの更新アシスタントが追加されたので、そのまま掛けます。

↑Aniversary Update前

↑Aniversary Update後

WindowsXPや軽量Linuxなら32GBでも困ることなかったので、ここまで苦戦するとは思いませんでした。

復元ポイント(更新前のWindows)が大きく容量を食っていますね。

ディスクのクリーンアップでさっさと削除します。

いやー、すっきりすっきり。

今まで手元にWindowsが無くいろいろ出来なかった事が あったのでそういう事に手を出していこうと思います。「アクティブデスクトップの修復」とか「システムがビジー状態です」とか。

 

追記(1月21日)

二日程度使ってみたので、とりあえずの感想を。

パフォーマンスやバッテリー持ちに関しても値段のわりにかなりいいと思います。

自分はBash on WindowsやRlogin、eclipseの利用を目的に買ったのですが、今のところそれらの目的はストレスなく達成できましています。

一番心配だったのは交換することができないバッテリーです。バッテリーが劣化しきる頃にはPCごと買い替えればいいだけですが、もし

 駆動時間が短すぎると使い物になりませんのでとにかく心配でした。

しかしながらカタログスペック最長約7.6時間というだけあって、外出先で軽く使うだけでは切れることはありません。

体感自分の使っているおんぼろスマホより電池が長持ちする気がします。

ちょっと前の最低価格PCだと当たり前にあったフリーズも今のところ体験していません。

なんで、こんな安いのにこんなしっかりしてるんですかね。

起動も早いですし、動作もサクサク、デザインまで素敵です。

これが技術の進化ってやつですか、やっと最低価格構成のスペックがOSに追いついたんですか。

Celeron N3350というCPUが搭載されているようです。CPUのロゴも私が見たことない新しいシールになっています、最新から逃げていたせいで頭の中は2010年のcore iシリーズのロゴで止まってました…。

Windowsといえば、ウイルス対策ソフトが必須ですよね。中学生の頃はとにかくウイルス対策ソフトに凝っていて定期的に第三者機関で公表される検出率をみてどれを使うか考えたり、ウイルス対策ソフトだけじゃなくてスパイウェア対策ソフトやファイアウォールやメインのと競合しないウイルス対策ソフトをもう一つ入れたりとなんだかよくわからない事に凝っていました。

今はもう開発終了となり公式サイトでも配布はされていませんが、当時「PC Tools Firewall」というのがあって、それが無料で日本語対応なうえに知識がない人でも大変使いやすかったので気に入っていました。

最近はWindowsの標準ファイアウォールを使いやすくするツールなんてのがあったので、それを使っています。「Windows Firewall controll」ってやつなのですが、通知機能を有効にするには有料のシリアルコードを購入しないといけないみたいです。

Linuxをメインで使っているとセキュリティソフトは入れることはないので、ただでさえ少ないメモリ上を常駐させるのに抵抗を感じます。

ただ、Windows10は以前より搭載されていたスパイウェア対策ソフト「Windows Defender」とウイルス対策ソフトである「MSE」が統合されて「Windows Defender」になったようで最初から最低限の保証がされているとか。もうこれでいいです、軽いですし。


SELinuxに手を出したらログインできなくなった話

2018-01-13 14:16:36 | Linuxの勉強
SELinuxとは、Security-Enhanced-Linuxの略称でアクセス制限機能の名称です。
これを使えばrootアカウントであろうと制限を掛けることが可能で、有効にしておけばより安全になるらしいです。
しかし、設定が少し複雑でトラブルの原因になりやすいらしくインストール直後に無効にする人も多いとか。

webサーバとして公開するなら有効にしたほうがいいとのことなので有効にしようと思いました。
# restorecon -RF /var/www
SELinux有効化の為に、Apacheのドキュメントルートを対象にApacheプロセスからのアクセス許可しました。
restoreconコマンドは/var/www などの既定のディレクトリはシステム標準でテンプレートが用意されているらしいので使いました。

ちなみに、行き当たりばったりでやっていたのでこの時はsetenforceコマンドの存在を知りません。
なので最初から/etc/selinux/configでSELINUX=enableし再起動。

すると、sshの通信が弾かれてログイン不能に…。
私は知りませんでした、ポート番号も指定しなければいけないなんて。
一瞬とてつもなく焦りましたが、VPSの管理画面からログインすることで事なきを得ましたが
やっぱり下調べは重要だということを思い知りました。