個人的なまとめ。

てきとーに何か書きます。

hostapdの各種設定

f:id:kosuke128:20170822130002p:plain

IPアドレス関連の設定 (Raspberry Piの場合)


/etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

# "*"となっている場所には実際には数字が入っています。
# 自分の環境に合わせて変更をしてください。
iface eth0 inet static
address 150.***.***.***
netmask 255.255.255.224
gateway 150.***.***.***

iface wlan1 inet static
address 192.168.178.1
netmask 255.255.255.0
gateway 150.***.***.***

#pre-up iptables-restore < /etc/iptables.ipv4.nat


allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
#iface wlan1 inet manual
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

/etc/dhcpcd.conf

一番最後の行に追加。

interface wlan1
static ip_address=192.168.178.1/24
static routers=150.***.***.***
# static routersのIPアドレスは、eth0のIPアドレスと同じにする。
# 例えば、eth0 = 150.0.0.1 だった場合は、
# static routers=150.0.0.1 とする。

DHCPサーバー関連の設定


まずはインストールを行う。

sudo apt install isc-dhcp-server

/etc/default/isc-dhcp-server

一番最後のINTERFACESに無線として使用するwlanを設定する。

- INTERFACES=
+ INTERFACES="wlan1"

/etc/dhcp/dhcpd.conf

一番最後の行に追加。

#wlan1
subnet 192.168.178.0 netmask 255.255.255.0 {
  range 192.168.178.10 192.168.178.250;
  option subnet-mask 255.255.255.0;
  option domain-name-servers 150.***.***.***;
  option domain-name "local_wlan1";
  option routers 192.168.178.1;
  option broadcast-address 192.168.178.255;
  default-lease-time 600;
  max-lease-time 7200;
}

hostapd.conf


interface=wlan1
ssid=Free-wifi
#driver=rtl871xdrv
driver=nl80211
hw_mode=g
#ieee80211n=1
wmm_enabled=1
channel=5
wpa=2
wpa_passphrase=testtest
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

基本的にはdriver=nl80211で可能ですが、エレコムの無線ドングルでは反応しない事があります。
その場合ではdriver=rtl871xdrvに変更をし、別にインストールが必要なパッケージがあるので、
そちらをインストールを行ってください。
本記事では具体的には触れません。

推奨はしませんが、パスワードを付けたくない時は、wpa_passphraseをコメントアウトする事で可能となります。


ポートの設定



#!/bin/sh
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan1 -o eth0 -j ACCEPT
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"


エラーが発生した場合は、以下の記事も参考にしてください。
kosuke128.hatenadiary.jp

Gitlabで出るエラーに悩まされてた。

研究室用に余っていたPCを使ってGitサーバーを建てた。
今回は、フリーで使用できるGitlabを使用した。

建て方は、このサイトを参考にした。
orebibou.com


構築に関しては特に問題なく進む事が出来た。

しかし、プロジェクトを作成してクローンをする所でエラーが出た。



良く出ていたエラー:

ssh: Could not resolve hostname hogehoge: Name or service not known
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

や、

The authenticity of host '***.***.**.***' can't be established.
ECDSA key fingerprint is **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/hogehoge/.ssh/known_hosts).
Agent admitted failure to sign using the key.


Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

がよく出ていました。

改善策:

まず、新規プロジェクトを作成する所までは問題なく出来ると思います。
作成後に、このような物が画面に表示されていると思います。
f:id:kosuke128:20170728221333p:plain

ここで、赤で囲んである所は、サーバーを建てた時のユーザー名
黒で囲んである所は、Gitlabに登録したユーザー名です。

色々なサイトを見ると、

git clone git@SERVER_NAME:GITAB_NAME/test.git

でいける等という風に書いていますが、上記のようなエラーが出る場合は、そこに書いてある文をそのまま使用するのではなく、

git clone git@192.168.1.0:GITLAB_NAME/test.git

のように、IPアドレスを指定してあげる必要があります。
その際に指定するIPアドレスは、GitlabのサーバーのIPアドレスです。


もし、それでもエラーが出る場合は、sshの鍵を作りなおしましょう。

Gitlab→Setting→SSH Keysと進み、そこに書いてある

ssh-keygen -t rsa -C "your.email@example.com" -b 4096

を端末で実行をし、

cat ~/.ssh/id_rsa.pub

を実行し、表示されたコードを全てコピーして、SSH Keysの[Key]内に張り付け、[Add Key]を押して登録をします。

次に、端末上で

ssh-add ~/.ssh/id_rsa

を実行します。


これで再度、

git clone git@192.168.1.0:GITLAB_NAME/test.git

を実行すると無事、クローンできるはずです。

Rustをgeditで読み易くする

geditにはデフォルトでいくつかの言語のパッケージが入っている為、その言語にあった形式に合わせてコードに色を付けてくれる。

www.rust-lang.org

しかし、まだ発展途中な?いくつかの言語はパッケージが無いため、geditでソースファイルを開くと非常に見にくく、今回はRustのソースを読み易くしたい。


検索するとgithubにソースが上がっていたので有難く頂戴する。

github.com


READMEに書かれている通りに実行をすれば良いのだが、3番目の

Open a shell in "~/.local/share" and run "update-mime-database mime"

が実行できない。
実行すると、

hoge@~/.local/share : sudo update-mime-database mime
Directory 'mime/packages' does not exist!

と表示される。

なのでコマンドを、

hoge@~/.local/share : sudo update-mime-database /usr/share/mime/

に変更して実行する事で上手く通った。

これでgeditでRustのコードを読んでも全部黒文字じゃなくなるので読み易くなる。

hostapdが起動しない時の確認事項

hostapdを使用しようとすると、うまく起動しない場合があります。
とりあえず考えられる場合を挙げます。

githubのREADME用に設定を書いた記事があるので、そちらも参考にしてみてください。
kosuke128.hatenadiary.jp

1. interfaceのエラー



エラー例:

Configuration file: /home/hogehoge/Desktop/hostapd.conf
Could not read interface wlan1 flags: No such device
nl80211: Driver does not support authentication/association or connect commands
nl80211: deinit ifname=wlan1 disabled_11b_rates=0
Could not read interface wlan1 flags: No such device
nl80211 driver initialization failed.
wlan1: interface state UNINITIALIZED->DISABLED
wlan1: AP-DISABLED
hostapd_free_hapd_data: Interface wlan1 wasn't started

理由:APとして使用したいインターフェースが設定と合っていない可能性が高いです。
確認するべき場所:

  • /etc/network/interfaces
  • /etc/default/isc-dhcp-server
  • hostapd.confファイル(自分で設定した場合はそのファイル)

改善策:
1. /etc/network/interfacesの確認
--> iface wlan0 inet static の wlanの番号がifconfigで確認した物と合っているか確認。

2. /etc/default/isc-dhcp-server
--> 最後部のINTERFACES=" "の中にwlan0等と記載があるか確認。

3. hostapd.confファイル
--> confファイル内の interface=wlan0 のwlan0が合っているか確認。

設定を変更した後は、ネットワークマネージャーを再起動させましょう。

sudo service network-manager restart

2. make時のエラー


../src/drivers/driver_nl80211.c:17:31: fatal error: netlink/genl/genl.h: そのようなファイルやディレクトリはありません
 #include <netlink/genl/genl.h>

理由:libnlが読み込めていないため。
確認するべき場所:

  • /hostapd-*.*/hostapd/defconfig
  • /hostapd-*.*/hostapd/.config

のどちらか。
改善策:defconfig もしくは .config内を以下のようにする。

- #CONFIG_LIBNL32=y
+ CONFIG_LIBNL32=y

また、defconfig内を変更した場合は、

cp defconfig .config

を端末で入力する必要がある。

それでも同様のエラーが出る場合は、

sudo apt install libnl-dev libssl-dev libnl-genl-3-dev

をインストールしましょう。

3. エラーは出ないが通信が出来ない場合


無線接続を行う端末でSSIDが見えているが、SSIDに接続が出来ない場合。

理由:DHCPサーバーの設定が完了していない、もしくはDHCPサーバーが起動していない可能性が有ります。
   もしくは、iptablesの設定が完了していない可能性が有ります。

確認するべき場所:

  • /etc/default/isc-dhcp-server
  • /etc/dhcp/dhcpd.conf
  • sudo service isc-dhcp-server status
  • sudo iptables --list

改善策:

1. /etc/default/isc-dhcp-server
--> 1のinterfaceのエラーと同様の確認をしてください。

2. /etc/dhcp/dhcpd.conf
--> 最後部に以下のような書き込みがあるか確認。
--> 更に、/etc/network/interfacesでwlanに設定したIPと下記のIPが一致しているか確認。

subnet 10.5.5.0 netmask 255.255.255.0 {
  range 10.5.5.10 10.5.5.255;
  option domain-name-servers ns1.internal.example.org;
  option domain-name "testtest";
  option routers 10.5.5.1;
  option broadcast-address 10.5.5.255;
  default-lease-time 600;
  max-lease-time 7200;
}


3. sudo service isc-dhcp-server status
--> そもそもDHCPサーバーが起動しているかを確認します。
端末上で、

test@test: sudo service isc-dhcp-server status
isc-dhcp-server stop/waiting 

となっていた場合は、起動させましょう。

test@test: sudo service isc-dhcp-server start
isc-dhcp-server start/running, process 5225

起動時にエラーが吐かれる場合は、設定がオカシイ可能性があるので、もう一度よく見直して見て下さい。

4. sudo iptables --list
自分の設定の場合は以下のようになっています。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

hostapdを起動する前に、以下の設定をシェルスクリプトなどにしておいて、コマンドを打つだけでiptablesの設定が完了するようにしておくと便利です。
iptablesのwlanの番号も他と同様、無線ルーターとして用いるドングルのwlanと同じものに設定をする必要があります。

#!/bin/sh
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

4. ドライバーが合っていない場合


安価で手に入るBuffaloのWLI-UC-GNM2などを使用した場合だと、hostapd.confのdriver部には、

driver=nl80211

と記載する事で問題なく使用する事が出来ますが、エレコムWDC-433SU2を使用する場合、

driver=rtl871xdrv

をと記述する必要があります。


rtl871xdrvに関する詳しい設定は詳しく説明しているサイトがあるので、そちらを参考にすると良いかと思います。


ami-gs.hatenablog.com





以上の方法でも改善しない場合は、設定をよく見直してください。


追記 2017/07/28

pandasで読み込んだcsvにカラム名前を付けたい

最近Pythonを触る事が増えてきていて、matplotlibやpandasを触り始めた。

data = pd.read_csv('data', sep=' ', index_col=0)

とかやってcsvからデータを取得した時に、各カラムに名前を付けていなかった為、

data.plot()

とかやると、x軸のラベルが意図したものになってくれなくて困ってた。

色々本やサイトでコードを見てたら、

data = pd.read_csv('data', index['AAA', 'BBB', 'CCC'])

とか、

data = pd.read_csv('data', names=('AAA','BBB', 'CCC'))

って書いてある物が多くて、IPythonで入力してたけれどもエラーばっかり返ってきてた。

他の表現方法とか調べて色々やってたけどうまくならなくて、結局、

data = pd.read_csv('data', names=("AAA", "BBB", "CCC"))

という風に、シングルクォーテーション ' 'を、ダブルクォーテーション " "に変更したらあっさり出来た。

全然分からなくて1時間ぐらい時間が取られたのが悔しい・・・。



よく出てきていたエラー文追記。

NameError: name 'AAA' is not defined
TypeError: parser_f() got an unexpected keyword argument 'args'
SyntaxError: non-keyword arg after keyword arg

とりあえず、一番上のものをよく見ました。他の原因で同じようなエラーが出てこのサイトに来た人は、もしかしたら...程度に参考にしてください。