タグ: centos

使用していないNICのMACアドレスを確認

MACアドレスはifconfigコマンドで使っているものについては確認できる。

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0D:E4:AC:37:62
          inet addr:192.168.1.10  Bcast:192.168.1.1  Mask:255.255.255.0
          inet6 addr: fe80::fa0f:41ff:fe0c:306d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20927967 errors:0 dropped:4346 overruns:0 frame:0
          TX packets:13823127 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1704246343 (1.5 GiB)  TX bytes:1443416185 (1.3 GiB)
          Interrupt:169

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:209435 errors:0 dropped:0 overruns:0 frame:0
          TX packets:209435 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:15911333 (15.1 MiB)  TX bytes:15911333 (15.1 MiB)

こんなカンジで。
しかし、実は使用していないNICがあって、そこの部分のMACアドレスを確認したい時がある。
簡単なのは、繋いでもう一回ifconfigすればいいってことなんだけど、
遠隔だったりしたらそうも行かないので、別のコマンドで確認。

# dmesg | grep eth5
tg3 0000:0c:00.1: eth5: Tigon3 [partno(BCM95718) rev 5717100] (PCI Express) MAC address d8:cb:8a:aa:dd:cc
tg3 0000:0c:00.1: eth5: attached PHY is 5718C (10/100/1000Base-T Ethernet) (WireSpeed[1], EEE[1])
tg3 0000:0c:00.1: eth5: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[1] TSOcap[1]
tg3 0000:0c:00.1: eth5: dma_rwctrl[00000001] dma_mask[64-bit]

こんなカンジ。
これでETH5のMACアドレスは「d8:cb:8a:aa:dd:cc」ってことが分かる。

CP コマンドのアレヤコレヤ

普段ボーッと使っているCPコマンドですが、
ときどき最後のスラッシュの有無について忘れるのでメモ。

cp -r /usr/katz/ /usr/katz2/

コレコレ。この場合。
すでに『katz2』というディレクトリが存在する場合は
『katz2』ディレクトリの中に『katz』ディレクトリを作ってコピーする。
『katz2』ディレクトリが存在しない場合は
『katz2』ディレクトリを作成して、『katz』ディレクトリの中身をコピーする。

/usr/katz/某某某某某
をコピーしたい時に、

ディレクトリがあるとコピー結果は
/usr/katz2/katz/某某某某某
ディレクトリがないと
/usr/katz2/某某某某某
となる。

親切心で「コピー先のディレクトリ名、忘れないように予め作っとこう」とかやっちゃうと
後でゲンナリすることになるってことで。

ちなみに
cp -r /usr/katz/ /usr/katz2/

cp -r /usr/katz/ /usr/katz2
でも結果は同じ。

スロークエリを見つける

mysql> show global variables;
 long_query_time        | 10.000000
 slow_query_log         | OFF
 slow_query_log_file    | /home/mysql_data/localhost-slow.log

この辺を確認する。
[ long_query_time ]の設定が10秒だとなかなか引っかかるものは少ないです。
むしろこの状態でも引っかかるのは相当重い処理ということに……
なので、これは1秒に変更。
大量に引っかかるようなら、2秒3秒に後で増やせばいいので。

mysql> set global long_query_time=1;

では実際にログ取得を開始する。

mysql> set global slow_query_log='on';

これで[ slow_query_log_file ]で指定されたファイルに
処理時間が[ long_query_time ]を超えるクエリが書き込まれます。

# Time: 151105 16:22:44
# User@Host: root[root] @  [192.168.100.200]  Id: 123456789
# Query_time: 2.960907  Lock_time: 0.000287 Rows_sent: 3750  Rows_examined: 21077
SET timestamp=1446708164;
SELECT `hogehoge`.`moe` AS `moe`, `hogehoge`.`moemoe` AS `moemoe`........

こんなカンジで。
このクエリは3秒近く時間がかかっててヤバイね。

CentOS5 向けの Zabbix2.4 リポジトリづくり

公式のRPMを引っ張ってきてもyum.repos.dにrepoファイルが出来る気配がない。
うちが悪いんだろうけど、解決すると他の部分がおかしくなりそうな気配なので
自分で書いちゃうよ、もう。

#ZABBIX Repository - Written by katz
#NO WARRANTY !
[zabbix]
name=zabbix 2.4 repository for CentOS5(32bit)
baseurl=http://repo.zabbix.com/zabbix/2.4/rhel/5/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX

はい。
これを「zabbix.repo」的なファイル名で保存しておいて、
使うときに「enablerepo=zabbix」つければいいだけ。

MySQL はじめのユーザ設定

インストールしたてのMySQLのrootにはパスワードが設定されてないんだか、あるんだか。
とりあえず、mysqladminでパスワードを設定する。

# /usr/bin/mysqladmin -u root password 'ほげほげ'
Warning: Using a password on the command line interface can be insecure.

コマンドラインで設定するのは丸見えだからセキュアじゃないとかなんとか。
仕方がないじゃん。
で、入ってみる。

# mysql -u root -p -h 192.168.1.2
Enter password: 
ERROR 1130 (HY000): Host '192.168.1.2' is not allowed to connect to this MySQL server

ああ、さっきのmysqladminで設定したのはあくまで「root@localhost」に対してってことなのね。
では気を取り直して

# mysql -u root -p

で入る。

で入ってから

mysql> create user root@192.168.1.2 identified by 'ほげほげ';
Query OK, 0 rows affected (0.00 sec)

作っただけだとなにも権限がないので、

mysql> grant all privileges on *.* to root@192.168.1.2 identified by 'ほげほげ' with grant option;
Query OK, 0 rows affected (0.00 sec)

これでいつもどおり。

ReadyMedia (miniDLNA)

2015/05/19 現在でリリースされているバージョンは1.1.4。
minidlna-1.1.4.tar.gz
minidlna-1.1.4_static.tar.gz
両方あるけど、自分でmakeするのは面倒なので static の方をダウンロードする。

wget http://downloads.sourceforge.net/project/minidlna/minidlna/1.1.4/minidlna-1.1.4_static.tar.gz

ダウンロードしたら解凍。

tar -zxvf minidlna-1.1.4_static.tar.gz -C /

本体と設定ファイル、言語ファイルが展開される。
設定を見直します。

vi /etc/minidlna.conf
media_dir=V,/mnt/D/video
friendly_name=katzDLNA

みたいなカンジで。

CentOS6 まではここまでやって

/usr/sbin/minidlnad -R

で終わったのだが、CentOS7 はそうも行かず。
firewall を通過できるようにしなくてはいけない。
とあるSEのリマインダーさまに分かりやすい設定方法が書いてあるので、真似する。

vi /usr/lib/firewalld/services/minidlna.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
    <short>minidlna</short>
    <port protocol="udp" port="1900"/>
    <port protocol="tcp" port="5000"/>
</service>

こんなカンジで保存。
したら

firewall-cmd --permanent --zone=public --add-service=minidlna
firewall-cmd --reload

で、通れるようにしておく。
同時に systemctl のserviceファイルの作り方も言われたとおりにやる。

vi /usr/lib/systemd/system/minidlna.service
[Unit]
Description=minidlna server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=simple
PIDFile=/var/run/minidlna/minidlna.pid
EnvironmentFile=/etc/sysconfig/minidlna
ExecStart=/usr/sbin/minidlnad -R -f $CONFIG_FILE
ExecStop=/bin/kill -SIGTERM $MAINPID

EnvironmentFile で指定したファイルに confファイルの位置を記入しておく。

vi /etc/sysconfig/minidlna
CONFIG_FILE=/etc/minidlna.conf

これで保存。
あとは

systemctl start minidlna

で。
素晴らしい。

mod_rewrite を適用するために httpd.conf を修正

新しいサーバに mod_rewrite を使ったシステムをそのままコピーしても使えない。
これは当たり前。
「.htaccess」をコピーしても使えない。
なんで?

httpd.conf も修正する必要があるから。
修正する箇所は次の2ヶ所。
両方共「AllowOverride」の設定。

1つ目。305行目付近にある。

<Directory />
    Options FollowSymLinks
    # AllowOverride None
    AllowOverride All
</Directory>

「None」を「All」に修正する。

2つ目も同じような修正。339行目付近にある。

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    # AllowOverride None
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

この2箇所を修正すると .htaccess の mod_rewrite が動くようになる。

sed で置き換え

sed でテキストファイルの中を置き換えたりすることが可能。

sed -i "s/hogehoge/moemoe/g" /root/test.txt

hogehoge部分をmoemoeに置き換えることができる。

見つけたい条件が置き換えたい部分を違う場合は、

sed -i "/^認めたく/ s/クワトロ・バジーナ/シャア・アズナブル/g" /root/test.txt

「認めたく」で始まる行にある「クワトロ・バジーナ」を「シャア・アズナブル」に置き換える。

sed -i "/.dll$/ s/^/#/g" httpd.conf

「.dll」で終わる行の行頭に「#」を付けてコメントアウトする。

こんなカンジで。
【 sed 】 文字列の置換,行の削除を行う – ITPro

pdftotext でPDF内の文字情報取得

PDFの内容を検索材料として投入したい。
どのPDFのの何ページ目がヒットしたのか、ぐらいは表示できるようにしたい。
というわけで、pdfinfoとpdftotextを使用します。

まず

# yum install poppler poppler-utils

で、popplerをインストールしておきます。

# pdftotext --help
pdftotext version 0.12.4
Copyright 2005-2009 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2004 Glyph & Cog, LLC
Usage: pdftotext [options]  []
  -f           : first page to convert
  -l           : last page to convert
......
  -layout           : maintain original physical layout
  -raw              : keep strings in content stream order
......
  -enc      : output text encoding name
......
  -nopgbrk          : don't insert page breaks between pages
......

うむ。入ってるっぽい。

# pdftotext /home/katzplus/hogehoge.pdf

で、今いるディレクトリに「hogehoge.txt」が作成される。
が、中身を見ると・・・
———-
!んゃじいなえ吸コバタ、どけイイはのるすせわ合ち待でバタス
———-
なんだこれ・・・

rawをつける

# pdftotext -raw /home/katzplus/hogehoge.pdf

———-
スタバで待ち合わせするのはイイけど、タバコ吸えないじゃん!
———-
できた。
コレをDBに入れておく。

ページごとにコンバートしたいときは

pdftotext -raw -f 1 -l 1 /home/katzplus/hogehoge.pdf /home/katzplus/hogehoge_page1.txt

これで1枚目のみのコンバート。

pdftotext -raw -f 1 -l 9 /home/katzplus/hogehoge.pdf /home/katzplus/hogehoge_page1to9.txt

だと1枚目から9枚目までのコンバート。

PDFが何ページあるのか確認したい場合は、

# pdfinfo /home/katzplus/hogehoge.pdf
Title:          
Author:         katzplus
Creator:        PScript5.dll Version 5.2.2
Producer:       GPL Ghostscript 8.15
CreationDate:   Fri Oct 32 19:19:29 2014
ModDate:        Fri Oct 32 19:19:29 2014
Tagged:         no
Pages:          11
Encrypted:      no
Page size:      595 x 842 pts (A4)
File size:      232654 bytes
Optimized:      no
PDF version:    1.4

こんなカンジでページ数を確認できたりします。この場合は11枚。
PDFに振ってあるノンブルは作成者が任意に指定することができるので、
11ページではなくて11枚ってことで。

ページごとにデータを取得すると、何ページに該当ワードが出現したのか示すことができるようになるけど、
ページをまたいで出現したワードの扱いが面倒になる。
その辺はデータの入れ方や検索のやり方で任意に迎撃しましょう。

MySQL のストレージエンジンを確認&変更

通常は InnoDB エンジンで作っているけど、
他の人が作ったもので MyISAM が使われちゃってる物があったりする。
これの確認方法。

show table status from `DB名`;

これで左から2つ目のカラムに「Engine」というカラムがあるので、ココを確認する。

MyISAM エンジンを使用しているテーブルを見つけちゃったら

alter table `テーブル名` engine=InnoDB;

で変更していく。

MySQL データディレクトリの移動

yumでインストールされたままのmy.cnfは
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
と、なっているのでこれを変更したい。

まずは
/etc/init.d/mysqld stop
で、データベースを止めておく。

止めたら
nice -n 19 rsync -auvz –delete /var/lib/mysql/ /mysql_data_dir
で、データを移動したいディレクトリにコピー。

併せてmy.cnfも移動後のディレクトリを見るように書き換えておく。
datadir=/mysql_data_dir
socket=/mysql_data_dir/mysql.sock

あとはコピー完了後に
/etc/init.d/mysqld start
で起動するだけ。

もし、起動に失敗するようだったらSELINUXの設定を確認する。
getenforce
の結果が
enforcing
だったら
/etc/selinux/config
で指定を[permissive]もしくは[disabled]に書き換える。

Got fatal error 1236 from master when reading data from binary log

Master側でDBが一つ壊れたので調べてたら、レプリケーションを取っているSlave側でこんなエラーが出ていた。
正確には
Got fatal error 1236 from master when reading data from binary log: ‘Client requested master to start replication from position > file size; the first event ‘mysql-bin.000024’ at 875536559, the last event read from ‘./mysql-bin.000024’ at 4, the last byte read from ‘./mysql-bin.000024’ at 4.
こんなカンジ。
「Masterのバイナリログ読んでる時にエラった」→「このバイナリログなんか変」ってことなんだろう。

Master側がエラーを出した後に何も更新されていないという確証があるなら、ログの読み込み位置を変更してstart slaveすればイイ。
でもその確証を得るためにクエリログを総ざらいして…とかやってられないので、素直にレプリケーションを作り直すことにします。
Master側を修復した後に。

レプリケーションの作成方法は
MySQL Replication for 5.6
MySQL Replication
この辺を参考に。