2015/08/28

CentOS7.1 無理やり PDFTkをインストールする。

CentOS7.1にして、ありゃりゃな事に遭遇。
PDFTkがRPMでインストールできなかった・・・。

以前の作業(PDFTkをRPMでインストール)
http://t0463.blogspot.jp/2014/12/pdfpdftk.html


フォーラム等によると、どうも、libgcjとかいうライブラリがCentOS7から入っていない為、駄目らしい
https://github.com/documentcloud/docsplit/issues/123 此処に

building PDFtk on RHEL 7 currently isn't possible due to upstrean (Fedora) dropping support for libgcj
とあるので、サポートして無いのだろう。
だがしかし、こちらに偉大な先人が 数名いらっしゃった。
http://ume.macoron.net/archives/7627
http://blog.cyber-support.info/article/424149031.html

ベクタ画像を描くのに必要となる基本的なライブラリを入れる。
yum install libart_lgpl

GNUのコンパイラも必要みたいなので、CentOS6.7のものをPRMでインストール
# wget http://ftp.riken.jp/Linux/centos/6.7/os/x86_64/Packages/gmp-4.3.1-7.el6_2.2.x86_64.rpm 
# rpm -iv --force  gmp-4.3.1-7.el6_2.2.x86_64.rpm


つづいて、そのサポートしなくなったlibgcjのパッケージを用意
# wget http://ftp.riken.jp/Linux/centos/6.7/os/x86_64/Packages/libgcj-4.4.7-16.el6.x86_64.rpm
# rpm -iv --force libgcj-4.4.7-16.el6.x86_64.rpm
最後にPDFTkを持ってくる。
# wget https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-1.el6.x86_64.rpm
# rpm -ivh pdftk-2.02-1.el6.x86_64.rpm


動いているようなので、良かった・・・。

OSのアップグレードはこういうのがネックだと感じる。

2015/08/22

CentOS7.1 Logwatch と crontabの設定


# yum install logwatch
# nano /usr/share/logwatch/default.conf/logwatch.conf
Detail = Med
MailTo = 任意のアドレス


以前の記事にあるが、crontabの時間がランダムになってしますので、
レガシーなcrontabにする。
# yum install cronie-noanacron
# rpm -e cronie-anacron


# nano /etc/cron.d/dailyjobs を修正。



2015/08/21

CentOS7.1 sambaインストール

http://desktop-linux.namakemono345.com/samba-centos-7/

これは、特に考えずにyumでインストールする。
# yum install samba

sambaの設定
[global]内に以下を、書き換え、追加する。
        workgroup = workgroup
        server string = 表示したいことを書いておく
        netbios name = 表示したいことを書いておく
#windowsからのアクセスを許容する
        map to guest = bad user
末尾に
        [共有させる名称] ←この名前で認識される
        comment = 名称
;       browseable = yes
        create mode = 0777
        directory mode = 0777
        path = /home/任意ディレクトリ
        guest ok = yes
        only guest = yes
        writeable = yes

上記は基本全権限。

ディレクトリを作る。
#mkdir /home/任意ディレクトリ

OS起動時に自動起動にする
自動起動を有効にする。
# systemctl enable smb
# systemctl list-unit-files で確認。
smb.service                                 enabled

起動
# systemctl start smb
ファイアーフォール開ける。
# firewall-cmd --add-service=samba --permanent
# firewall-cmd --reload

Windowsマシンからアクセスすると、
ディレクトリに入って中が見えるのに、書き込もうとすると
アクセス権限が無いといわれる。
そのくせ、デリートは出来たみたいになる。
(Linux上では消えていないので、オカシイ)

SELinuxがわるさしてるっぽいので動いているか調べる
# getenforce
Enforcing
動いておるので、とりあえず止めてみる。
# setenforce 0
これでwindows側から修正できた。
postgresの絡みの部分も再起動する毎、読み込まない症状が出たので、
社内用のサーバなので、セキュリティはそこそこで良いためSElinuxはとりあえず止める。
# nano /etc/selinux/config
SELINUX=disabled

SELinuxの件で2時間程嵌った・・・・。

CentOS7.1 HDDの追加

今回追加するHDDは2Tbi以下で、尚且つインターネットに曝されていないので、
XFSフォーマットで行う(centOS6で云うext4はXFSに変わったので)
HDDを取り付け、はじめにHDDが認識されているか確認
(LVMは手順が多いし、過去にVGの名称が同じなのに誤ってつないでしまい、データを壊した経験があるので喰わず嫌いなのである・・・。)

# dmesg|grep sd
[    3.602350]  sda: sda1 sda2
[    3.602758] sd 0:0:0:0: [sda] Attached SCSI disk
[    3.619862]  sdb: unknown partition table
[    3.620061] sd 1:0:0:0: [sdb] Attached SCSI disk
[    8.846799] XFS (sda1): Mounting V4 Filesystem
[   10.971040] XFS (sda1): Ending clean mount
[   10.971065] SELinux: initialized (dev sda1, type xfs), uses xattr

サイズ等を認識しているかを確認する。
# fdisk -l
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト

# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xbe76e7c2.

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

コマンド (m でヘルプ):
コマンドの動作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)
             Pを入れて、パーテーションを設定
コマンド (m でヘルプ): p

Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
Disk label type: dos
ディスク識別子: 0xc7f836c8

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-3907029167, 初期値 2048):エンター
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-3907029167, 初期値 3907029167):エンター
初期値 3907029167 を使います
Partition 1 of type Linux and of size 1.8 TiB is set

コマンド (m でヘルプ): p
Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
Disk label type: dos
ディスク識別子: 0xc7f836c8

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            2048  3907029167  1953513560   83  Linux

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

XFSタイプのファイルシステムを作成する。
# mkfs -t xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=122094598 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=488378390, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=238466, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

続いて追加したHDDをstorage2としてマウントさせる

# mkdir /home/storage2
# mount /dev/sdb1 /home/storage2
# chown  ユーザ名 /home/storage2/

dfで確認
# df
ファイルシス            1K-ブロック    使用     使用可 使用% マウント位置
/dev/mapper/centos-root    52403200 4574420   47828780    9% /
devtmpfs                    2920376       0    2920376    0% /dev
tmpfs                       2930520      80    2930440    1% /dev/shm
tmpfs                       2930520    8964    2921556    1% /run
tmpfs                       2930520       0    2930520    0% /sys/fs/cgroup
/dev/mapper/centos-home  1893548692   85400 1893463292    1% /home
/dev/sda1                    505580  127680     377900   26% /boot
/dev/sdb1                1952559696   32976 1952526720    1% /home/storage2

常時、マウントするようにfstabを編集する。赤を追記(UUIDは置き換えること)
# blkid /dev/sdb1
/dev/sdb1: UUID="320f300e-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="xfs"
# nano /etc/fstab
末尾に追加
#追加HDD
UUID=320f300e-XXXX-XXXX-XXXX-XXXXXXXXXXXX /home/storage2 xfs defaults 0 0

再起動してみて自動的にマウントされていればOK。

CentOS7.1 PHP インストールとhttpdやFirewallの設定

# yum install php php-mbstring php-pdo php-pgsql
5.4.16なので、そのままyumでインストールする。
一気にyum install php* をやったら依存関係で怒られた。

インストール後の設定
# nano /etc/php.ini

short_open_tag = off を on へ
;extension=msql.so の;を外して有効にする。
下に
extension=pgsql.so
extension=mbstring.so
を追加



httpd.confにもphpの内容を追加する。
の項目内に
AddType application/x-httpd-php .php
を追記。

httpdを再起動
# systemctl start httpd.service

続いて
# firewall-cmd --add-service=postgresql --permanent
# firewall-cmd --reload

クライアントからアクセスして、PHPが予定通り動けばOK。

CentOS7.1 postgresql インストールから設定

パッケージは9.2.13がbaseでrpmに含まれている。
最新版は9.4.4の様なので、まぁ9.2でいいかということで、
# yum install postgresql*

インストール後そのまま起動しようとしても、起動できなかった。

systemctl start の中にpostgresql.serviceが無く、コマンド叩いても
Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.
詳細を確認されたい。と出ます。

# systemctl status postgresql.service
postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled)
Active: failed (Result: exit-code) since 金 2015-08-21 13:55:21 JST; 2min 57s ago
Process: 4824 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)

${PGDATA} がおかしいということなので、
指定先を調べてみる。
# nano /usr/lib/systemd/system/postgresql.service

# Location of database directory
Environment=PGDATA=/var/lib/pgsql/data ということで、/var/libpgsql/ に/data を作る。

# mkdir -p /var/lib/pgsql/data
# chown postgres:postgres /var/lib/pgsql/data/
postgresさんになってDBをフォーマットする。
# su - postgres
initdbコマンドでデータ格納場所を初期化する。
-bash-4.2$ initdb -D /var/lib/pgsql/data/
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。

データベースクラスタはロケール"ja_JP.UTF-8"で初期化されます。
したがってデフォルトのデータベース符号化方式はUTF8に設定されました。
initdb: ロケール"ja_JP.UTF-8"用の適切なテキスト検索設定が見つかりません
デフォルトのテキスト検索設定はsimpleに設定されました。

ディレクトリ/var/lib/pgsql/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 32MB
設定ファイルを作成しています ... ok
/var/lib/pgsql/data/base/1にtemplate1データベースを作成しています ... ok
pg_authidを初期化しています ... ok
依存関係を初期化しています ... ok
システムビューを作成しています ... ok
システムオブジェクトの定義をロードしています ... ok
照合順序を作成しています ... ok
変換を作成しています ... ok
ディレクトリを作成しています ... ok
組み込みオブジェクトに権限を設定しています ... ok
情報スキーマを作成しています ... ok
PL/pgSQL サーバサイド言語をロードしています ... ok
template1データベースをバキュームしています ... ok
template1からtemplate0へコピーしています ... ok
template1からpostgresへコピーしています ... ok

警告: ローカル接続向けに"trust"認証が有効です。
pg_hba.confを編集する、もしくは、次回initdbを実行する時に-Aオプショ
ン、または、--auth-localおよび--auth-hostを使用することで変更するこ
とができます。

成功しました。以下を使用してデータベースサーバを起動することができます。

    postmaster -D /var/lib/pgsql/data
または
    pg_ctl -D /var/lib/pgsql/data -l logfile start

-bash-4.2$ exit

systemctl start の中にpostgresql.serviceが増えているので、
# systemctl start postgresql.service で起動
# systemctl status postgresql.service
postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled)
   Active: active (running) since 金 2015-08-21 14:22:24 JST; 2s ago
  Process: 5510 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=0/SUCCESS)
  Process: 5503 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 5513 (postgres)
   CGroup: /system.slice/postgresql.service
           tq5513 /usr/bin/postgres -D /var/lib/pgsql/data -p 5432
           tq5514 postgres: logger process
           tq5516 postgres: checkpointer process
           tq5517 postgres: writer process
           tq5518 postgres: wal writer process
           tq5519 postgres: autovacuum launcher process
           mq5520 postgres: stats collector process

大丈夫っぽい。

ユーザabcを作成。
#su - postgres
-bash-4.2$ createuser -P -s -E abc
新しいロールのためのパスワード:
もう一度入力してください:

ユーザが増えているか確認。
-bash-4.2$ psql
psql (9.2.13)
"help" でヘルプを表示します.

postgres=# select * from pg_shadow
2名になっているのでOK
\qでexit


pg_hba.confでネットワーク内からのアクセスを許容する。
# nano /var/lib/pgsql/data/pg_hba.conf
末尾の
# IPv4 local connections:
host    all         all         192.168.0.0/16          md5

こんな感じで、拠点間の接続にも対応できるように設定しておく。

CentOS7.1 httpdの設定 chkconfigはレガシー iptablesもレガシー

# yum list | grep httpd*
httpd.x86_64 2.4.6-31.el7.centos base

現在2.4が最新のようなので、このままyumでインストールしてしまう。

インストール後、自動起動の設定をしようと、
# chkconfig --add httpdを行うと、systemd serviceに移行したからそっち使え
と応答されるので、ちょっと調べた。

#systemctl list-unit-files
これで一覧が生じされるので、確認はここで行えばよさそう。

chkconfigでもパスしてくれるので、一緒だけど、正しくは
#systemctl is-enabled サービス名.service

httpdの場合は、# systemctl enable httpd.service
このように表記する模様。

更に、iptablesもレガシーな扱いになっているようだ・・・。
firewalld に移行したそうなので、そっちで設定してみる。
#systemctl list-unit-files に
firewalld.service enabled となっているので、
新規インストールは不要。 


firewall-cmdがコマンドらしいのでリストを出してみる。
#firewall-cmd --list-all
 public (default, active)
  interfaces: enp2s0
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

ゾーンの定義があるようだが、外部からのアクセスを許容したいので、
ゾーン設定は特に行わない。 --permanent を付けると再起動後も有効と
なるが、即時有効ではない模様。 --reloadしておく。

# firewall-cmd --add-service=http --permanent
success
# firewall-cmd --reload
success

ポートは開けたので、今度はhttpdの設定を行う。(PHPインストール後には再度弄る)
#nano /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.php index.htm index.shtml

保存して上書き
httpdを走らせる。
# systemctl start httpd
# systemctl enable httpd

外部クライアントからブラウジングできればOK。

2015/08/20

CentOS7.1 インストール作業~ネットワーク接続まで

インストールの前作業

http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso

http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso 

この辺からISOイメージをダウンロードして、DVDを作成する。

今回購入したPRIMEGY TX1310M1 は ハードウェアRAIDを実装しており、
インストール時にRAIDのパッケージを追加する必要があった。

CenOS7 install にカーソルを併せてTABを押し、
inst.dd を追加してからインストールを行う。

対話式のモードになるので、fujitsuのホームページから

URL: http://support.ts.fujitsu.com/Download/Index.asp

「Product selection(manually search)」より「Fujitsu Server PRIMERGY」→「PRIMERGY TXxxx」
→「PRIMERGY TX1310 M1」 →「Red Hat Enterprise Linux」→「Red Hat Enterprise Linux 7(x86_64)」→「SATA RAID」→「RHDUP driver package megasr 16.01.2014.0318-1 for RHEL 7 GA」を用意しておく。
加えて、RAIDコントローラは有効にしないと起動時に制御が掛かるらしく、
OSインストール中の最後の再起動で躓いたので
BIOSでSATA Configurationの設定があるので、そこをIDE MODEにした。
必要を感じたらRAIDを組む事にする。



インストール後の設定

先ずは他のクライアントからターミナルで操作したいので、
ネットワークの設定をする。

$ ip address show 
でNICの情報を取る。
このサーバはNICを2つ持っている(19800で購入の割にすごいな)
 
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0:  mtu 1500 qdisc mq state UP qlen 1000
    link/ether 90:1b:0e:XX:XX:ee brd ff:ff:ff:ff:ff:ff
    valid_lft forever preferred_lft forever
3: enp0s25:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 90:1b:0e:XX:XX:dc brd ff:ff:ff:ff:ff:ff

$ nmcli device show enp2s0 で詳細を取る
GENERAL.デバイス:                       enp2s0
GENERAL.タイプ:                         ethernet
GENERAL.ハードウェアアドレス:           90:1B:0E:60:54:EE
GENERAL.MTU:                            1500
GENERAL.状態:                           1000 (接続済み)
GENERAL.接続:                           enp2s0
GENERAL.CON パス:                       /org/freedesktop/NetworkManager/ActiveConnection/3
WIRED-PROPERTIES.キャリア:              オン
IP4.アドレス[1]:                         ip = 127.0.0.1/8, gw = 0.0.0.0
IP6.アドレス[1]:                         ip = ::1/128, gw = ::                     

こんな感じ 

$ nmcli con show enp2s0 を見る。
 
↓サーバ起動時に自動で接続させる 
connection.autoconnect:                 no 
↓DHCPを固定にしたいので、ここはマニュアルにして、IPアドレスを指定。 
ipv4.method:                            auto
これについては、 昔のようなバグはもう無い様なのでGUIで弄ったほうが楽。
 
 
# nmcli con mod enp2s0 connection.autoconnect "yes"
# nmcli con mod enp2s0 ipv4.addresses "192.168.0.XXX/24"
# nmcli con mod enp2s0 ipv4.method "manual" 

# nmcli device disconnect enp2s0
# nmcli device connect enp2s0
 

他のクライアントからTeraTerm等で接続してみる。

2015/08/12

rsyncのエラー 12番

rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]

今更ながら、rsyncのエラーが起こったので、再度見直し、いろいろと調べてみた所
サイズの大きい圧縮ファイルの所で躓く様なので、そのあたりを調べてみた。

原因の推測
恐らく、ファイルサイズの異なる同じ名前のファイルを参照し、転送を開始する際に、
コマンドの指定が無い時は、差分の転送を行うが、
zip等の場合、内部構成まで見て差分処理を行おうとするようで、
エラーを返してくる模様。

解決方法
・ --whole-file をつけて、差分の送信をやめる。
・ zipやtarで保存する際は、別のファイルとなるように常にdateを付与する処理をする。
・ zip等のファイルは同期しないようにする。
そこで、一番楽そうな --whole-file をコマンドに追加することにした。

スクリプトシェル
#!/bin/sh
# バックアップ先ディレクトリ指定
BackupDIR=/home/*****/dailyBackup

mkdir -p $BackupDIR
# バックアップログ定義
BackupLog=/home/*****/log/rsync_backup.log rm -f $BackupLog
touch $BackupLog
chmod 600 $BackupLog
#エラーチェック
error_exit () {
exit 1
}
#バックアップ実行
echo "`date` backup start" >> $BackupLog
LastBackup=`ls -t $BackupDIR | grep backup | head -1`
NewBackup=`date +%Y%m%d`backup

mkdir $BackupDIR/$NewBackup
rsync -rlptv --whole-file --link-dest=../$LastBackup /home/比較元のディレクトリ/ $BackupDIR/$NewBackup >> $BackupLog 2>&1

code=$?
if [ $code -ne 0 ]; then
cat $BackupLog | mail -s "BACKUP NG CODE IS $code" root
rm -rf $BackupDIR/$NewBackup
error_exit
fi
echo "`date` backup end" >> $BackupLog