- 投稿日:2019-03-10T23:50:20+09:00
Linuxの時刻合わせ
はじめに
例えばシステムに障害が起きた時など、ログを確認する時には日時が非常に重要です。
複数のサーバーでシステムを構成している場合、それぞれのサーバーの時刻がバラバラだと、障害時に状況の把握や原因究明の足枷となる可能性があります。以下は、自宅で運用しているサーバーで使っている時刻合わせのスクリプトと、その設定方法です。
本番環境では負荷に耐えられるNTPサーバーを指定したり、時刻合わせの間隔を調整する必要があるので、スクリプトや設定を適宜修正する必要があると思いますが、何かの参考になれば幸いです。使用した環境
- OS:CentOS 6.10
事前準備
- 時刻合わせに使うntpdateパッケージをインストールしておきます。
- ntpと異なり、ntpdateコマンドは「NTPサーバーとの時刻差が大きくてもエラーとならない」のが特徴です。
[root@kumotori ~]# yum install ntpdate -y時刻合わせ用スクリプト
- 時刻合わせに使うNTPサーバーは、googleのPublic NTPサーバー(time.google.com)を指定しています。
/sbin/clock --systohc
は「ハードウェアクロックをシステムクロックに合わせる」という設定です。
- ハードウェアクロック:マザーボード上で管理される時刻で、OSをシャットダウンしても消えませんが、マザーボード上の電池(ボタン電池)が切れると消えてしまいます。
- システムクロック:OSが管理する時刻で、OSがシャットダウンすると消えてしまいます。
ntpdate.sh#!/bin/sh /usr/sbin/ntpdate -s time.google.com /sbin/clock --systohcタイムゾーンの設定
スクリプトの配置
- 任意のフォルダに上記のスクリプトを配置しています。
- 私は
/root/scripts
というフォルダを作って、そこに上記のスクリプトを配置しています。- 配置した後、スクリプトに実行権限(x)を付けておきます。
- 最後に
crontab -e
で、crontabに「毎時30分に上記のスクリプトを実行する」と設定して完了です。[root@kumotori ~]# chmod 744 /root/scripts/ntpdate.sh [root@kumotori ~]# ls -l /root/scripts/ 合計 4 -rwxr--r--. 1 root root 75 3月 10 15:48 2019 ntpdate.shcrontab### ntpdate. 30 * * * * /root/scripts/ntpdate.sh
- 投稿日:2019-03-10T22:40:46+09:00
Creating Xilinx Linux SD boot image for Zybo Z7-20 on Windows10 (Ubuntu16.04 WSL)
Environment
- Ubuntu 16.04 is installed on WSL.
- Vivado 2018.3 WebPack is installed both on Windows and WSL Ubuntu 16.04 to default paths.
Maybe it can be done only with WSL Ubuntu 16.04 . (But my vcXsrv often freezes with GUI applications.)
Working path
- Windows 10
d:\xlnx
- WSL Ubuntu 16.04
/mnt/d/xlnx
Install Digilent board files into Vivado
$ sudo apt install git $ git clone https://github.com/Digilent/vivado-boardsThen copy
./vivado-boards/new/board_files/*
toC:\Xilinx\Vivado\2018.3\data\boards\board_files
(See 'Digilent board file installation guide')Create a CPU design for Zybo Z7-20 (Vivado)
Invoke Vivado on Windows 10.
- Select
File->Project->New
- Click "Next" and "Next", setting:
- Project Name :
zybo_z7_20_linux
- Project Path :
d:/xlnx
- Board :
Zybo Z7-20
- Create Block Design
- Design Name:
cpu
- Click
+
in diaglam window- Select
ZYNQ7 Processing System
- Run
Block Automation
and clickOK
- Connect
FCLK_CLK0
toM_AXI_GP0_ACLK
- Create HDL wrapper (A pop-up menu appears with right click on
cpu
in Sources window.), clickOK
.- Click
Generate Bitstream
- Select
File->Export->Hardware
, checkInclude bitstream
, clickOK
Setting environmet variables
Create following
env.sh
env.sh#!/bin/sh export CROSS_COMPILE=arm-linux-gnueabihf- export ARCH=arm export PATH=$PATH:/mnt/d/xlnx/u-boot-xlnx/tools source /tools/Xilinx/Vivado/2018.3/settings64.shApply it.
$ source env.shBuild Xilinx u-boot
Because u-boot-xlnx v2018.3 does not have Zybo Z7-20 configuration, need to clone snapshot
$ git clone https://github.com/Xilinx/u-boot-xlnxThe hash of the commit was,
$ git rev-parse HEAD 195c620e348891ca2d90c759781413f2adb3f748Append the following line to
u-boot-xlnx/configs/zynq_zybo_z7_defconfig
CONFIG_OF_EMBED=y CONFIG_CMD_NET=n
CONFIG_OF_EMBED=y
embeds device tree for the board into binary.CONFIG_CMD_NET=n
preventsBOOTP
tries few times beforebootm
runs.
If the system does not have flex and bison,$ sudo apt install flex bisonBuild u-boot.
$ cd u-boot-xlnx $ make zynq_zybo_z7_defconfig $ make $ cd ..Build Xilinx Linux kernel
$ wget https://github.com/Xilinx/linux-xlnx/archive/xilinx-v2018.3.tar.gz $ tar zxvf xilinx-v2018.3.tar.gz $ rm xilinx-v2018.3.tar.gz $ cd linux-xilinx-v2018.3 $ make ARCH=arm xilinx_zynq_defconfig $ make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage $ cd ..Build DTC
$ git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git $ cd dtc $ make $ cp dtc ../u-boot-xlnx/tools $ cd ..Create RAM disk image (see Xilinx wiki)
Download
arm_ramdisk.image.gz
to /mnt/d/xlnx
(d:/xlnx
) from here. Then create RAM disk image.mkimage -A arm -T ramdisk -C gzip -d arm_ramdisk.image.gz uramdisk.image.gzBecause WSL Ubuntu does not have loop device, we cannot mount the root file system as in Xilinx wiki. To modify the image, other Linux computer should be prepared on VMs or PCs.
My own modification on rootfs
- Eliminating two lines of
fstab
mounting SD card to/mnt
: I do not know the exact reason why the two lines do not work properly. (/dev/mmcblk0p1
may not be prepared when the auto-mount is invoked.)- Inserting '
mount /dev/mmcblk0p1 /mnt
' into/etc/init.d/rcS
just before executing/mnt/init.sh
.:init.sh
placed at root of the SD card is automatically executed at the end ofrcS
. Soinit.sh
is a convenient mean for us to insert start-up operation without modifying rootfs.Create FSBL and Device Tree Blob (XSDK on WSL Ubuntu 16.04)
First, download device tree files.
$ wget https://github.com/Xilinx/device-tree-xlnx/archive/xilinx-v2018.3.tar.gz $ tar zxvf xilinx-v2018.3.tar.gz $ rm xilinx-v2018.3.tar.gzInvoke XSDK.
$ xsdk &Create hardware platform specification
- Set workspace directory as
/mnt/d/xlnx
- Select File->New->Project, select
Xilinx->'Hardware Platform Specification'
, clickNext
- Set
project name
tozybo_z7_20_linux_hw
, setTarget Hardware Specification
to/mnt/d/xlnx/zybo_z7_20_linux/zybo_z7_20_linux.sdk/cpu_wrapper.hdf
, clickFinish
Create FSBL
- Select
File->New->Application Project
, setproject name
tozybo_z7_20_linux_fsbl
- Confirm
zybo_z7_20_linux_hw
is selected asHardware Platform
- Click
Next
, SelectZynq FSBL
, clickFinish
Create devicetree
- Select
Xilinx->Repositories
, select/mnt/d/xlnx/device-tree-xlnx-xilinx-v2018.3
inGlobal Repositories
, clickRescan Repositories
,Apply
, thenOK
- Set
Project name
tozybo_z7_20_linux_dt_0
, select 'device_tree' in 'Board Support Package OS', click 'Finish', then 'OK'Modify and build device tree
At
/mnt/d/xlnx/zybo_z7_20_linux_dt_0
(WSL Ubuntu 16.04), revise following lines insystem-top.dts
system-top.dts09 #include "zynq-7000.dtsi" 10 #include "pcw.dtsi" 21 memory {system-top.dts(revised)09 /include/ "zynq-7000.dtsi" 10 /include/ "pcw.dtsi" 21 memory@0 {Insert the description of Ethernet PHY into
&gem0
node insystem.dts
system.dts&gem0 { local-mac-address = [00 0a 35 00 00 00]; phy-handle = <ðernet_phy>; ethernet_phy: ethernet-phy@0 { reg = <0>; }; };Compile device tree as,
dtc -I dts -O dtb -o devicetree.dtb system-top.dtsCreate boot image
At /mnt/d/xlnx (WSL Ubuntu 16.04),
$ mkdir zybo_z7_20_linux_boot $ cd zybo_z7_20_linux_boot $ cp ../zybo_z7_20_linux_hw/cpu_wrapper.bit fpga.bit $ cp ../zybo_z7_20_linux_fsbl/Debug/zybo_z7_20_linux_fsbl.elf fsbl.elf $ cp ../u-boot-xlnx/u-boot u-boot.elf $ cp ../linux-xlnx-xilinx-v2018.3/arch/arm/boot/uImage uImage $ cp ../uramdisk.image.gz uramdisk.image.gz $ cp ../zybo_z7_20_linux_dt_0/devicetree.dtb devicetree.dtbCreate
boot.bif
asboot.bifimage : { [bootloader]fsbl.elf fpga.bit u-boot.elf }Run bootgen
bootgen -image boot.bif -o i boot.binBoot
Move follwing files to a SD card.
- boot.bin
- devicetree.dtb
- uramdisk.image.gz
- uImage
- 投稿日:2019-03-10T18:00:27+09:00
Polybarの番号によるフォント指定に関する注意点
「設定したフォント番号」と「番号によるフォント指定」のズレ
フォント番号設定は0-based indexなのにフォント指定は1-based indexだから注意してね、という話です。
ドキュメントには "*-font = 1 will use font-0" って書かれてます。
具体例を出すと、
~/.config/polybar/configfont-0 = "Fira Code:pixelsize=10;3" font-1 = "Osaka:pixelsize=14;3"のフォント番号設定がある時、
~/.config/polybar/configbar-fill-font = 1 bar-empty-font = 2のフォント指定では、
- bar-fill-font -> Fira Code
- bar-empty-font -> Osaka
になります。
これを間違えて「アイコン表示できない!」って戸惑う人が現れないことを祈ります。現れたらこの記事が参考になってほしい。
まとめ
0-based indexと1-based indexは0オリジンと1オリジンとも呼ばれるらしい
参考
- 投稿日:2019-03-10T13:14:52+09:00
linuxでメモリ解放の話〜分かり易いイメージで〜
はじめに
linux環境で、なんか動作がもっさりしてきたな〜って時にめもりが原因だった場合の対処法。
その前に
まずメモリの話から。と言っても当方そっちの専門家じゃないので、詳しい人に聞いた感じ。
そもそもメモリって
PCにおいて主な計算はCPUによって行われています。しかし、CPUはHDDやSSDなどの記録媒体から直接データを読み込んだり計算したりはできないのです。そこでメモリは、一時的に記憶媒体などからデータを読取り、CPUが計算できる様にする役割があります。
もっとわかりやすく、イメージしてもらうために、ここで一つ個人的にわかりやすかった例え話を。皆さん、小学校で使われている机をイメージしてみいてください。天盤の下に教科書とかが入れられるタイプのアレです。そして、そこで作業をしようとする自分を思い浮かべてください。
そうすると、机の中・・・HDDなどの記憶媒体
机の上・・・メモリ
自分・・・CPUという感じで対応ができます。
まずあなたが作業しようとした時、机の中にある道具やら何やらをそのまま机の中で作業するのは難しいかと思います。なので、机の上に色々出して作業するかと思います。これと同じ様なことがPCでも起こっております。この時、作業するために机の上に出したあれこれを、作業が終わった後に机の中に戻すはずなのですが、「また後でつかうかも?」と思うと、一旦そのままにしてしまうことがあるかと思います。そしてそれを多用すると、机の上にあれこれが沢山残っている状態ができてしまうのです。この状態が所謂「キャッシュが溜まっている」ってやつです。よくこのキャッシュが有ると「重くなる」と思っている人が多いかと思いますが、それは思い違いであることが多いです。考えてみてください、机の上にあるモノを参照するのと、机の中にあるモノを参照するの、どちらが早いか。明らかに机の上にあるモノを参照した方が速いことがわかると思います。
ではなぜキャッシュが多くなると「重くなる」とおもわれるのでしょうか?それは机の上のモノがたくさんある状態で、机の中のモノを出さないといけない場合を考えてみてください。その場合、机の上にある当分使いそうに無い、又は使っていなかったモノを一旦捨てるか机の中に戻す作業を挟まなければなりません。この動作が頻繁に起こると「重くなる」という現象が起こります。ここからが本題
溜まったキャッシュは基本的に自動的で管理されるのですが、それを強制的に消去する方法をいくつか紹介します。が、強制的にキャッシュを消去すると、キャッシュを参照して動作しているアプリが誤作動する可能性があり、最悪データが破損しかねません。なので、危険性の少ない方から順に紹介していきます。というかぶっちゃけ再起動するのがいいんだけど、それができない環境での措置ってことで。
当方の環境はこんな感じ。
OS: Cent OS 7
方法其ノ壱
$ syncスタンダードな、よくある方法。
方法其ノ弐
$ echo 1 > /proc/sys/vm/drop_cachesキャッシュの中でも、消しても大丈夫そうなのを消去。
方法其ノ参(非推奨)
$ echo 3 > /proc/sys/vm/drop_caches取り敢えず全部のキャッシュを消去。
方法其ノ肆(めっちゃ非推奨)
$ du -s /;\ sync && sync && sync;\ echo 3 > /proc/sys/vm/drop_cachesduコマンドでキャッシュを整理。
syncコマンドで少し解放。三回やってるのは念の為。
drop_cachesで全てのキャッシュを解放。最後に
実行は自己責任にてお願いします。
取り敢えず、書いてみた感がすごいけど、メモリの解放はあまりオススメはできませんので悪しからず。
- 投稿日:2019-03-10T04:27:03+09:00
CentOS 7でBINDの設定をするメモ
セキュリティ意識した設定とかではないです.
ゆるーく適当に動かすためのメモです.
- BINDのインストール
途中でインストールして良いか聞かれたら
y
を入力してEnter.# yum install bind bind-utils
- ファイアウォールの設定
デフォルトではブロックされているのでDNSを許可するようにする
# firewall-cmd --add-service dns --permanent // 再起動しても設定を有効化する # firewall-cmd --reload // リロード # firewall-cmd --list-services // 通信が許可されているか確認
- named.confの設定
BINDの設定ファイルである
named.conf
, また正引き, 逆引きの設定ファイルである<ドメイン名>
,<ドメイン名>.rev
という名前のファイルを作成しておく.
それぞれのファイルはどこかから雛形を引っ張ってくるなり, 自分で書くなりする.# touch named.conf # touch <ドメイン名> # touch <ドメイン名>.rev
named.conf
のシンボリックリンクを貼る# ln -sf /var/named/named.conf /etc
named.conf
をゴリゴリ書く.
いろいろ端折ってる.options { listen-port 53 { 127.0.0.1; }; ... directory "/var/named" ... allow-transfer {}; allow-query {}; allow-recursion {}; allow-query-cache {}; }; ... zone "hoge.piyo" { type master; allow-query { any }; file "hoge.piyo"; }; zone "X.0.168.192.in-addr.arpa" { type master; allow-query { any }; file "hoge.piyo.rev"; };
listen-port
にはDNSのサービスを動作させるポート番号と, IPアドレスを指定する.
directory
には,named.conf
が存在するディレクトリを指定する.
allow-transfer
にはセカンダリDNSサーバのIPアドレスを指定する.
セカンダリDNSサーバを用意しない場合は//
でコメントアウトする.
allow-query
にはクエリ(問い合わせ)全般を受け付けるかどうかを書く.
any
ならどこからでも, ネットワークアドレス(プレフィックス表記)を指定したら指定したネットワークの範囲のみ.
allow-recursion
には再帰問い合わせを受け付けるかどうかを書く.
つまりフルサービスリゾルバとして動作させるかということ.
any
ならどこからでも, ネットワークアドレス(プレフィックス表記)を指定したら指定したネットワークの範囲のみ.
allow-query-cache
にはキャッシュを返すのを許可するかどうかを書く.
any
ならどこからでも, ネットワークアドレス(プレフィックス表記)を指定したら指定したネットワークの範囲のみ.
zone
にはゾーン情報を書く.
正引きは"<ドメイン名>"
, 逆引きは"<IPアドレスの逆順>.in-addr.arpa"
を指定する.
また,file
にはそれぞれのドメインのゾーン情報を記述するファイルのパスを書く.
- 正引き・逆引きの設定
イイ感じにやる(めんどいので省略).
- BINDの起動
# systemctl start named.service // すでに起動している場合はrestart # systemctl enable named.service // 再起動しても設定を有効化する
- 動作確認
$ ping <IPアドレス> // IP到達性があるか $ nmap -sU -p 53 <IPアドレス> // UDPポート53番が開いているか $ dig <ドメイン名> // DNSのサービスとしてちゃんと動いているかぼくは
listen-port
の設定ミスで動かなかったので注意してネ.