インターネットへ接続できないサーバでyumを使う
インターネットへ接続できない環境にあるサーバ(以下、サーバB)で、yumを使ってパッケージのインストールをする方法。
はじめに、インターネットへの接続性のあるApacheがインストールされたHTTPサーバ(以下、サーバA)を用意する。サーバAとサーバB間で通信可能な環境(以下のような構成)を構築する。
サーバAのhttpd.confを編集して、mod_proxyモジュールを有効化(コメントアウトを解除)および
# vi /etc/httpd/conf/httpd.conf <snip> LoadModule proxy_module modules/mod_proxy.so <snip> <IfModule mod_proxy.c> ProxyRequests On ProxyVia On <Proxy *> Order deny,allow Deny from all Allow from 172.16.0.0/24 # 許可するIPアドレス </Proxy>
サーバAのhttpdを再起動する。
サーバBのyum.confに編集して、proxyの設定を追加する。
# vi /etc/yum.conf <snip> proxy=http://サーバAのIPアドレス:ポート番号/
さくらのクラウドにDHCPサーバ構築してパフォーマンス測定してみた
さくらインターネットから「さくらのクラウド」の2万円分無料クーポンをいただきました。ありがとうございます。
「さくらのクラウドでDHCPサーバ運用すれば、自前でサーバ持ってなくていいよな。サーバ買い替えなくてもいいし。VPN張って、DHCPリレー先(helper address)をさくらのクラウドにすればいいよね。とりあえず、さくらのクラウド内でパフォーマンスを測定してみよう。」ってことでやってみた。
さくらのクラウドに2台の仮想サーバを作成する。スイッチ(dhcp-sw)経由で2台を接続する。1台をDHCPサーバ(dhcp01)、もう1台をパフォーマンス測定サーバ(dhcperf)とする。構成図は、以下の通り。
パフォーマンス測定に使用したツールは、nominum社提供のdhcperfというやつ。
Measurement Tools - Nominum
用意したもの
- サーバ x 2台
- ネットワーク
- スイッチ(ルータ いいえ) x 1台
DHCPサーバの準備
1. インタフェースの設定
[root@dhcp01 ~]# nmcli add type eth ifname eth1 con-name eth1 Connection 'eth1' (f1fdbd45-0160-471c-9357-ff302598d36f) successfully added. [root@dhcp01 ~]# nmcli c mod eth1 ipv4.method manual ipv4.addresses "10.0.0.1/16 10.0.255.254" [root@dhcp01 ~]# # nmcli c down eth1 Error: 'eth1' is not an active connection. [root@dhcp01 ~]# # nmcli c up eth1 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) [root@dhcp01 tmp]# ip addr show eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 9c:a3:ba:30:44:16 brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/16 brd 10.0.255.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::9ea3:baff:fe30:4416/64 scope link valid_lft forever preferred_lft forever
2. dhcpのインストール
[root@dhcp01 ~]# yum install dhcp <snip> Installed: dhcp.x86_64 12:4.2.5-27.el7.centos.2 Complete!
3. dhcpd.confの設定
[root@dhcp01 ~]# vi /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page # authoritative; ddns-update-style none; subnet 10.0.0.0 netmask 255.255.0.0 { default-lease-time 600; max-lease-time 7200; range 10.0.0.10 10.0.255.253; option routers 10.0.255.254; ddns-updates off; } #NIC subnet 133.242.*.0 netmask 255.255.255.0 { not authoritative; }
4. dhcpのリースファイル作成
[root@dhcp01 ~]# touch /var/tmp/dhcpd.leases
5. dhcpdのコンフィグファイルのテスト
[root@dhcp01 ~]# dhcpd -t -cf /etc/dhcp/dhcpd.conf -lf /var/tmp/dhcpd.leases
コンフィグにerrorがあると、以下のような感じです。
/etc/dhcp/dhcpd.conf line 27: expecting a declaration }; ^ Configuration file errors encountered -- exiting <snip>
6. dhcpdの起動
[root@dhcp01 ~]# dhcpd -cf /etc/dhcp/dhcpd.conf -lf /var/tmp/dhcpd.leases Internet Systems Consortium DHCP Server 4.2.5 Copyright 2004-2013 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Wrote 0 leases to leases file. Listening on LPF/eth1/9c:a3:ba:30:44:16/10.0.0.0/16 Sending on LPF/eth1/9c:a3:ba:30:44:16/10.0.0.0/16 Listening on LPF/eth0/9c:a3:ba:30:ee:51/133.242.*.*/24 Sending on LPF/eth0/9c:a3:ba:30:ee:51/133.242.*.*/24 Sending on Socket/fallback/fallback-net
7. dhcpdの起動を確認
[root@dhcp01 ~]# ps axww | grep dhcp[d] 5550 ? Ss 0:00 dhcpd -cf /etc/dhcp/dhcpd.conf -lf /var/tmp/dhcpd.leases
8. ログを眺める
[root@dhcp01 ~]# tailf /var/log/messages Jan 22 15:32:50 dhcp01 dhcpd: Internet Systems Consortium DHCP Server 4.2.5
dhcperfの準備
1. インタフェースの設定
[root@dhcp01 ~]# nmcli add type eth ifname eth1 con-name eth1 Connection 'eth1' (862f4a5e-e055-430e-94b5-8e5b9c2c9209) successfully added. [root@dhcp01 ~]# nmcli c mod eth1 ipv4.method manual ipv4.addresses "10.0.0.2/16 10.0.255.254" [root@dhcp01 ~]# # nmcli c down eth1 Error: 'eth1' is not an active connection. [root@dhcp01 ~]# # nmcli c up eth1 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) [root@dhcpperf ~]# ip addr show eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 9c:a3:ba:30:ef:89 brd ff:ff:ff:ff:ff:ff inet 10.0.0.2/16 brd 10.0.255.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::9ea3:baff:fe30:ef89/64 scope link valid_lft forever preferred_lft forever
2. wgetのインストール
wgetインストール済みであれば、skip
[root@dhcpperf ~]# yum install wget <snip> Complete!
3. dhcperfのパッケージをダウンロード
[root@dhcpperf ~]# wget ftp://ftp.nominum.com/pub/nominum/dhcperf/1.0.1.0/dhcperf-1.0.1.0-1-rhel-4-i386.tar.gz
4. dhcperfのインストール
[root@dhcpperf ~]# tar xzf dhcperf-1.0.1.0-1-rhel-4-i386.tar.gz [root@dhcpperf ~]# rpm -ivh ./dhcperf-1.0.1.0-1/dhcperf-1.0.1.0-1.i386.rpm
5. dhcperfのテスト
[root@dhcpperf ~]# /usr/local/nom/bin/dhcperf --server 10.0.0.1 --one-discover Sending DHCPDISCOVER. Received DHCPOFFER of 10.0.128.106. Sending DHCPREQUEST for 10.0.128.106. Received DHCPACK of 10.0.128.106. Acquired address: 10.0.128.106
6. dhcperfでパフォーマンス測定
DISCOVER - OFFER - REQUEST - ACK - RELEASE の測定
[root@dhcpperf ~]# /usr/local/nom/bin/dhcperf --server 10.0.0.1 --discover --test-duration 30 Beginning DHCPDISCOVER load test. Initial probe complete: High-water mark is 61 clients/second. Preparing for next test run. Beginning test run: 30 clients/second for 30 seconds. Succeeded: 0/900 clients failed. Preparing for next test run. Beginning test run: 45 clients/second for 30 seconds. Stopping run after 6 seconds; 2/109 clients failed. Preparing for next test run. Beginning test run: 37 clients/second for 30 seconds. Stopping run after 16 seconds; 2/542 clients failed. Preparing for next test run. Beginning test run: 33 clients/second for 30 seconds. Succeeded: 0/990 clients failed. Preparing for next test run. Beginning test run: 35 clients/second for 30 seconds. Succeeded: 0/1050 clients failed. Preparing for next test run. Beginning test run: 36 clients/second for 30 seconds. Stopping run after 15 seconds; 2/430 clients failed. 35 five-way handshakes per second.
7. dhcperfでパフォーマンス測定
REQUEST - ACK の測定
[root@dhcpperf ~]# /usr/local/nom/bin/dhcperf --server 10.0.0.1 --renew --test-d uration 30 Creating 20000 clients for renew test. 20000 clients available Beginning DHCPRENEW load test. Initial probe complete: High-water mark is 209 clients/second. Preparing for next test run. Beginning test run: 104 clients/second for 30 seconds. Stopping run after 11 seconds; 4/935 clients failed. Preparing for next test run. Beginning test run: 52 clients/second for 30 seconds. Succeeded: 0/1560 clients failed. Preparing for next test run. Beginning test run: 78 clients/second for 30 seconds. Stopping run after 23 seconds; 3/1776 clients failed. Preparing for next test run. Beginning test run: 65 clients/second for 30 seconds. Succeeded: 0/1950 clients failed. Preparing for next test run. Beginning test run: 71 clients/second for 30 seconds. Succeeded: 0/2130 clients failed. Preparing for next test run. Beginning test run: 74 clients/second for 30 seconds. Succeeded: 0/2220 clients failed. Preparing for next test run. Beginning test run: 76 clients/second for 30 seconds. Succeeded: 0/2280 clients failed. 76 DHCPRENEW transactions per second.
それぞれのテストを6回実施した結果。
テスト種別 | 1目 | 2回目 | 3回目 | 4回目 | 5回目 | 6回目 | 平均 |
---|---|---|---|---|---|---|---|
RENEW[回/秒] | 76 | 74 | 94 | 71 | 92 | 59 | 77.6 |
DISCOVER[回/秒] | 35 | 30 | 32 | 32 | 28 | 31 | 31.3 |
※RENEWは、REQUEST-ACKで1回。DISCOVERは、DISCOVER-OFFER-REQUEST-ACK-RELEASEで1回。
VPN張ってなかったり, DHCPに設定しているサブネット1つだったりと実際の利用を想定した環境と全然違って、このデータ意味あるのかという感も否めませんが。今後、下記を参考にVyOSでVPN張ってテストしてみたい。
サイト間VPN設定 | さくらのクラウドニュース
dhcperfがインストールに失敗した時の対処例
[root@dhcpperf ~]# rpm -ivh ./dhcperf-1.0.1.0-1/dhcperf-1.0.1.0-1.i386.rpm error: Failed dependencies: libc.so.6 is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.0) is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.1) is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.1.3) is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.2) is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.3) is needed by dhcperf-1.0.1.0-1.i386 libm.so.6 is needed by dhcperf-1.0.1.0-1.i386 libresolv.so.2 is needed by dhcperf-1.0.1.0-1.i386 [root@dhcpperf ~]# yum install glibc* <snip> Complete! [root@dhcpperf ~]# yum install glibc*i686 <snip> Complete!
Raspberry PiのGPIOを制御してLEDを点滅
Raspberry PiのGPIOを制御してLEDを点滅する方法。
※本サイトを参考にして被った損害、怪我、事故、障害、不都合、不利益等に関して責任は一切負いません。
- 使用部材
- Raspberry Pi Model B x 1台
- ブレッドボード x 1個
- 抵抗100Ω x 1本
- LED(SLR343BTT32) x 1本
- ジャンパケーブル x 数本
抵抗は、GPIOが3.3VでLEDの順方向電圧が2.7Vとして、(3.3V-2.7V)/5mA=120Ωというような計算。
※120Ωの抵抗持っていないので、100Ωを使った。多少電流増えるがまぁー大丈夫だろう。
GPIO17(ピン番号11)--抵抗100Ω--(アノード)LED(カソード)--GND(ピン番号25)となるように接続する。
1. rootになって
$ sudo su
2. GPIO17(ピン番号11)を使います
# echo "17" > /sys/class/gpio/export
3. GPIO17のディレクトリが作成されて
# ls /sys/class/gpio/ export gpio17 gpiochip0 unexport # ls /sys/class/gpio/gpio17/ active_low direction edge power subsystem uevent value
4. GPIO17を出力として使います
# echo "out" > /sys/class/gpio/gpio17/direction
5. GPIO17の出力をONして、LEDが点灯
# echo "1" > /sys/class/gpio/gpio17/value
6. GPIO17の出力をOFFして、LEDが消灯
# echo "0" > /sys/class/gpio/gpio17/value
7. GPIO17を使うのをやめます
# echo "17" > /sys/class/gpio/unexport
8. GPIO17のディレクトリが削除される
# ls /sys/class/gpio/ export gpiochip0 unexport
例えば、下記スクリプトを作成して実行すれば、LEDが10回点滅して終了する。
#!/bin/bash echo "17" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio17/direction for i in `seq 1 10` do echo "1" > /sys/class/gpio/gpio17/value echo "0" > /sys/class/gpio/gpio17/value done echo "17" > /sys/class/gpio/unexport
次は制御するGPIOの数を増やして数個のLEDをピカピカさせるか、PWM制御で明るさ調整してみる。
Raspberry PiをWi-Fi接続する
Raspberry PiをWPA2-PSK(AES)でWi-Fi接続する時の流れ。使用したUSB2.0無線LANアダプタは、ロジテックのLAN-W150N/U2です。
1. USBデバイスの一覧で無線LANアダプタが認識されていることを確認
$ lsusb <snip> Bus 001 Device 005: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter
2. wpa_passphrase コマンドでWi-Fi接続時の設定を作成
$ sudo wpa_passphrase SSIDNAME PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf
3. wpa_supplicant.confに足りない記載があれば、書き加える
$ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="SSIDNAME" key_mgmt=WPA-PSK #ここらへん proto=RSN #ここらへん pairwise=CCMP #ここらへん group=CCMP #ここらへん #psk="PASSPHRASE" psk=2b1d17284c5410ee5eaae7151290e9744af2182b0eb8af20dd4ebb415928f726 }
4. Wi-Fi接続
$ sudo wpa_supplicant -s -B -P /var/run/wpa_supplicant.wlan0.pid -i wlan0 -D nl80211,wext -c /etc/wpa_supplicant/wpa_supplicant.conf
補足
起動時にWi-Fi接続するには、/etc/network/interfacesを編集して
$ sudo vi /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp auto wlan0 allow-hotplug wlan0 #iface wlan0 inet manual iface wlan0 inet dhcp #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp
再起動する。
有線LANも接続されているとデフォルトゲートウェイが想定と異なることもあるので、そういった場合はrouteコマンドでデフォルトゲートウェイを変更する。
Raspberry PiにSTM32F411REを繋いでLED点滅させる
Raspberry PiにSTM32F411REを繋ぎ、mbedオンラインコンパイラでコンパイルしてできた.binを書き込み、LED点滅させるまでにやったこと。
※STM32F411REに電源供給すれば、あらかじめ書き込まれているプログラムが実行されてLED点滅する。
Raspberry PiのUSBポートにSTM32F411REを接続すれば自動認識される。
$ dmesg <snip> [ 3.386473] usb 1-1.2: Product: STM32 STLink [ 3.393662] usb 1-1.2: Manufacturer: STMicroelectronics [ 3.400817] usb 1-1.2: SerialNumber: 0673FF514951775087035535 [ 3.466354] usb-storage 1-1.2:1.1: USB Mass Storage device detected [ 3.489401] scsi0 : usb-storage 1-1.2:1.1 <snip> [ 4.490367] scsi 0:0:0:0: Direct-Access MBED microcontroller 1.0 PQ: 0 ANSI: 2 <snip> . It is not a modem. [ 7.146527] cdc_acm 1-1.2:1.2: ttyACM0: USB ACM device
USBデバイス一覧の中に確認できる。
$ lsusb <snip> Bus 001 Device 004: ID 0483:374b SGS Thomson Microelectronics
マウントもされている。
$ df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 15104000 1865976 12588232 13% / /dev/root 15104000 1865976 12588232 13% / devtmpfs 219744 0 219744 0% /dev tmpfs 44784 264 44520 1% /run tmpfs 5120 0 5120 0% /run/lock tmpfs 89560 0 89560 0% /run/shm /dev/mmcblk0p1 57288 9904 47384 18% /boot /dev/sda 16 16 0 100% /media/NUCLEO
オンラインコンパイラでコンパイルしてできたプログラム(.bin)をコピーしたら失敗。
$ cp Nucleo_blink_led_NUCLEO_F411RE.bin /media/NUCLEO/ cp: writing `/media/NUCLEO/Nucleo_blink_led_NUCLEO_F411RE.bin': No space left on device cp: failed to extend `/media/NUCLEO/Nucleo_blink_led_NUCLEO_F411RE.bin': No space left on device
下記ページを参考にして、firmwareのアップデートとST-Linkドライバのインストールを試みる。
Preparing the STM32 Nucleo Board - | mbed
$ unzip stlinkupgradev2j23m6.zip Archive: stlinkupgradev2j23m6.zip creating: STLinkUpgradeV2J23/ inflating: STLinkUpgradeV2J23/ST-LinkUpgrade.exe inflating: STLinkUpgradeV2J23/STLinkUSBDriver.dll pi@raspberrypi ~/stm32 $ unzip stlinknucleodriversigned.zip Archive: stlinknucleodriversigned.zip inflating: STLinkNucleoDriverSigned/dpinst_amd64.exe inflating: STLinkNucleoDriverSigned/dpinst_x86.exe <snip>
Windows環境でないとダメそうなので、あきらめて別の方法を探して有益な情報にたどりつく。
Uploading .bin files to STM32 Nucleo in Linux. | mbed
Programming STM32 Microcontroller Flash in Linux
1. libusbをインストール
$ sudo apt-get install libusb-1.0.0-dev <snip>
2. stlinkをインストール
$ git clone https://github.com/texane/stlink stlink.git もしくは $ wget https://github.com/texane/stlink/archive/master.zip <snip> $ unzip master.zip <snip> $ cd stlink-master/ $ ./autogen.sh autoreconf: Entering directory `.' <snip> $ ./configure checking for a BSD-compatible install... /usr/bin/install -c <snip> $ make Making all in . <snip> $sudo make install Making install in . <snip> $ sudo cp *.rules /etc/udev/
3. st-flashコマンドで書き込む
$ sudo st-flash write Nucleo_blink_led_NUCLEO_F411RE.bin 0x8000000 2015-01-04T16:36:21 INFO src/stlink-common.c: Loading device parameters.... 2015-01-04T16:36:21 INFO src/stlink-common.c: Device connected is: F4 device (low power) - stm32f411re, id 0x10006431 2015-01-04T16:36:21 INFO src/stlink-common.c: SRAM size: 0x20000 bytes (128 KiB), Flash: 0x80000 bytes (512 KiB) in pages of 16384 bytes 2015-01-04T16:36:21 INFO src/stlink-common.c: Attempting to write 13408 (0x3460) bytes to stm32 address: 134217728 (0x8000000) EraseFlash - Sector:0x0 Size:0x4000 Flash page at addr: 0x08000000 erased 2015-01-04T16:36:21 INFO src/stlink-common.c: Finished erasing 1 pages of 16384 (0x4000) bytes 2015-01-04T16:36:21 INFO src/stlink-common.c: Starting Flash write for F2/F4 2015-01-04T16:36:21 INFO src/stlink-common.c: Successfully loaded flash loader in sram size: 13408 2015-01-04T16:36:21 INFO src/stlink-common.c: Starting verification of write complete 2015-01-04T16:36:21 INFO src/stlink-common.c: Flash written and verified! jolly good!
4. ピカピカ。やったね。
プログラムが反映されなければ、STM32F411RE上のRESETボタン(黒いスイッチ)を押してみたり。
尚、./autogenを実行したときに"autoreconfがないよ"って言われたら、autoconfをインストールする。
$ ./autogen.sh ./autogen.sh: 2: ./autogen.sh: autoreconf: not found $ sudo apt-get install autoconf <snip>
Excelファイルをシート毎に分割する
Excelファイル(ブック)をシート毎に分割して保存したいということが稀にある。
1. 分割したいExcelファイル(ブック)に以下のマクロを登録する。
2. マクロを実行する。
3. シート名がファイル名になったExcelファイル(ブック)ができあがる。
Sub 分割() Dim i As Integer Dim N As Integer 'ファイル作成数のカウンタ Dim Filename As String '保存するファイル名 Application.ScreenUpdating = False '画面更新を停止 i = 1 Do While i <= Worksheets.Count Filename = Worksheets(i).Name Worksheets(i).Copy With ActiveWorkbook .SaveAs ThisWorkbook.Path & "\" & Filename & ".xls" '元ファイルと同フォルダに保存する .Close N = N + 1 End With i = i + 1 Loop Application.ScreenUpdating = True '画面更新を再開 MsgBox N & " 個のブックを作成しました。" End Sub
デスクトップで実行して、デスクトップがExcelアイコンで埋まった...。