def get_weekdays_for_subject(subject):
    weekdays = []
    with open("input/timetable.csv",encoding="utf-8") as f:
        for row in f:
            colums = row.rstrip().split(",")
            day = colums[0]
            if row.find(subject) >= 0:
                weekdays.append(day)
    return weekdays


def main():
    subject = '理科'
    weekdays = get_weekdays_for_subject(subject)
    print("「{}」は{}にあります".format(subject,",".join(weekdays)))


if __name__ == '__main__':
    main()




----------------
def count_subjects():
    pass
    s_count = {}
    with open('input/timetable.csv', encoding='utf-8') as f:
        for row in f:
            columns = row.rstrip().split(",")
            day = columns[0]
            for col in columns:
                if col != day:
                    if col in s_count.keys():
                        s_count[col] += 1
                    else:
                        s_count[col] = 1
    return s_count



def main():
    subject_counts = count_subjects()
    for subject, count in subject_counts.items():
        pass
        print('{}は{}回'.format(subject, count))

if __name__ == '__main__':
    main()



----------------------
def replace_subject(row, week_day, p_sub, a_sub):
    pass
    if row.startswith(week_day):
        return row.replace(p_sub, a_sub, 1)
    else:
        return row 

def main():
    with open('input/timetable.csv', encoding='utf-8') as f:
        for row in f:
            new_row = replace_subject(row, '月曜日', '体育', 'ダンス')
            print(new_row, end='')


if __name__ == '__main__':
    main()




月曜日,国語,算数,社会,体育,体育
火曜日,算数,外国語,理科,国語,音楽
水曜日,体育,社会,家庭,国語,算数
木曜日,国語,図画工作,理科,算数,国語
金曜日,算数,社会,体育,理科,生活

Openstack

・Openstack サーバ環境

# yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-juno/rdo-release-juno-1.noarch.rpm
# yum install -y openstack-packstack
# yum install -y qemu-kvm
# ssh-keygen -t rsa
# packstack --gen-answer=param.txt

# systemctl stop NetworkManager
# systemctl disable NetworkManager
※Openstack のネットワークが動作するシステムでは NetworkManager は動作しないこと、と警告が出た。

# systemctl stop ntpd
※chrony が動作しているから、停止する必要があるらしい

# packstack --answer-file=param.txt

・Openstack クライアント環境 (RHEL7)

1.パッケージのインストール
# yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-juno/rdo-release-juno-1.noarch.rpm
# yum install -y epel-release
# yum install -y bash-completion python-novaclient python-neutronclient python-glanceclient python-cinderclient python-swiftclient python-keystoneclient python-openstackclient


2.oepnrc の作成
※Openstack サーバ環境の /root/keystonerc_admin を流用

# source openrc

# nova keypair-add key-temporary > key-temporary.pem
# chmod 600 key-temporary.pem

OpenLDAP サーバ

OpenLDAP サーバの基本的な設定

1.以下のパッケージの導入

openldap 
openldap-clients 
openldap-servers


2.Berkeley DB のパフォーマンスチューニング用のファイル作成

# cp -rp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG


3./root/slapd.conf の作成

# cp -rp /usr/share/openldap-servers/slapd.conf.obsolete /root/slapd.conf


4./root/slapd.conf に追記

database config
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none

database        bdb
suffix          "dc=example,dc=com"
checkpoint      1024 15
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}HjIlhOG0qV8+sVbL40ND5UnODaaEm50h

5.設定ファイルの削除

# rm -fr /etc/openldap/slapd.d/*
# echo "" |slapadd -f /root/slapd.conf


6.slapd.conf を変換

# slaptest -f /root/slapd.conf -F /etc/openldap/slapd.d/


7.ディレクトリの権限変更

# chown -R ldap:ldap /etc/openldap/slapd.d/
# chmod -R u+rwX /etc/openldap/slapd.d/
# chown -R ldap:ldap /var/lib/ldap/


8./etc/sysconfig/ldap ファイルに ldapi サポートの確認

SLAPD_LDAPI=yes


9.slapd の起動

# service slapd status
# chkconfig slapd on

※参考情報
http://qiita.com/mykysyk@github/items/25e6adbfdb313afaf339
http://www.openldap.org/doc/admin24/index.html
http://www5f.biglobe.ne.jp/~inachi/openldap/admin23/index-ja.html

・cn=config へのアクセス

# ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"

・cn=config の rootpw の設定追加

# cat test
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}NtFL4k34N3FHDdr5kXFdfpPFVGCPJ8Cn
# ldapmodify -Y EXTERNAL -H ldapi:/// -f test
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
#

※参考情報
https://mowa-net.jp/wiki/LDAP


OpenLDAP クライアントの基本的な設定 (nslcd の場合)

1.以下のパッケージの導入

nscd
nss-pam-ldapd
pam_ldap


2./etc/sysconfig/authconfig の編集

#yes に変更
FORCELEGACY=yes


3.authconfig の実行

# authconfig --enableldap --enableldapauth --ldapserver=192.168.110.135 --ldapbasedn="dc=example,dc=com" --enablemkhomedir --update
# chkconfig nslcd on


・エントリの追加

# cat test.ldif
dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example

dn: ou=Group,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Group

dn: ou=People,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: People
#
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f test.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=com"

adding new entry "ou=Group,dc=example,dc=com"

adding new entry "ou=People,dc=example,dc=com"

# cat  user.ldif
dn: uid=luser1,ou=People,dc=example,dc=com
givenName: ldap
sn: user1
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
objectClass: posixAccount
uid:luser1
cn:ldap user1
homeDirectory: /home/luser1
userPassword: {SSHA}NtFL4k34N3FHDdr5kXFdfpPFVGCPJ8Cn

dn: cn=lgroup1,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: lgroup1
gidNumber: 1001

# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f user.ldif
Enter LDAP Password:
adding new entry "uid=luser1,ou=People,dc=example,dc=com"

adding new entry "cn=lgroup1,ou=Group,dc=example,dc=com"

#

zabbix

Documentation
http://www.zabbix.com/download.php

2.4 (英語)
https://www.zabbix.com/documentation/2.4/manual/installation/install_from_packages#red_hat_enterprise_linux_centos

2.2
https://www.zabbix.com/documentation/2.2/jp/manual/installation/install_from_packages

2.0
https://www.zabbix.com/documentation/2.0/jp/manual/installation/install_from_packages

1.8
http://www.zabbix.jp/documents/installation/install-rpm


https://www.scsk.jp/lib/product/oss/pdf/oss_16.pdf

●zabbix サーバ

1.パッケージのインストール

# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
# yum -y install zabbix-server-mysql zabbix-web-mysql
# yum -y install mysql-server

※場合よっては、以下。
# yum -y install httpd mysql-server php php-mysql


2./etc/my.cnf の編集

                                                          • -

[mysqld]

default-character-set=utf8
skip-character-set-client-handshake

innodb_file_per_table
innodb_buffer_pool_size=64M
innodb_log_file_size=16M
innodb_log_files_in_group=2

                                                          • -

※MySQL5.5 で、default-character-set → character-set-server になったらしい。
http://kennyqi.com/archives/334.html


3.MySQL の起動

# service mysqld start
# chkconfig mysqld on


4.DB の構築

zabbix データベースとユーザーを作成

# mysql -uroot
psql> create database zabbix character set utf8 collate utf8_bin;
psql> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
psql> flush privileges;
psql> quit;

初期スキーマとデータをインポートします。

# cd /usr/share/doc/zabbix-server-mysql-2.4.5/create/
# mysql -uroot zabbix < schema.sql
# mysql -uroot zabbix < images.sql
# mysql -uroot zabbix < data.sql


5.Zabbix サーバプロセスの開始

# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password

# service zabbix-server start
# chkconfig zabbix-server on


6.PHPタイムゾーン変更

/etc/php.ini を変更
date.timezone = Asia/Tokyo


7.httpd プロセスの開始

# service httpd start
# chkconfig httpd on


8.Web インタフェースのインストール

以下を参照してインストール

http://blog.torigoya.net/2012/03/10/centos6-zabbix/
http://www.letsplay-network.info/zabbix-24/
https://blog.apar.jp/linux/334/

インストール後、Adimin/zabbix でログイン。


●zabbix エージェント

1.zabbix パッケージのインストール

rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
yum -y install zabbix-agent


2./etc/zabbix/zabbix_agentd.conf の編集

Server=192.168.11.18★zabbix サーバ
Hostname=HTTP01.testdomain1zabbix エージェントのホスト名
ListenIP=192.168.11.19★zabbix エージェントが listen する IP アドレス
※zabbix サーバの場合は、本項は不要

3.
# service zabbix-agent restart
# chkconfig zabbix-agent on





https://blog.apar.jp/linux/334/
http://blog.torigoya.net/2012/03/10/centos6-zabbix/
http://comp.senseofwonder.org/2009/05/200905291334.html
https://blog.apar.jp/zabbix/1081/
http://changineer.info/server/monitoring/monitoring_zabbix.html


http://192.168.11.18/zabbix


●Zabbix の Web Interface 日本語化
http://katzplus.com/centos-6/zabbix/zabbix-%E3%81%AE-web-interface-%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96/









http://www.slideshare.net/zembutsu/is-the-order-an-automation-of-operation-and-monitoring
http://pocketstudio.jp/log3/2014/04/29/spoke_at_zabbix_jp_6th/
https://gist.github.com/zembutsu/7640108
http://knowledge.sakura.ad.jp/tech/2406/

DNS サーバの構築 (マスター、スレーブ)

環境は以下の通り。

mas:RHEL61.example.com (192.168.110.135)
sla:RHEL66.example.com (192.168.110.136)


・マスター・サーバ/スレーブ・サーバ

1./etc/sysconfig/named の編集

#IPv6 の無効
OPTIONS="-4"


・マスター・サーバ

1.named.conf (/var/named/chroot/etc/named.conf) の編集

acl local-net {
  10.0.1.1;
  192.168.110.0/24;
};

options
{
        directory               "/var/named";

        #rndc によるダンプ情報のファイル
        dump-file               "data/cache_dump.db";

        #rndc によるステータス情報のファイル
        statistics-file         "data/named_stats.txt";

        #rndc によるメモリ情報のファイル
        memstatistics-file      "data/named_mem_stats.txt";

        #BIND がクライアントからのクエリを受け取るport と NIC を指定
        listen-on port 53       { 127.0.0.1; 192.168.110.135;};
        #listen-on-v6 port 53    { ::1; };

        #クエリが出来るクライアントを指定
        allow-query             { local-net; };

        #キャッシュされた情報に対するクエリが出来るクライアントを指定
        allow-query-cache       { local-net; };

        #再帰的なサーバーとして動作するかどうかを指定
        recursion yes;

        #DNSSEC を無効
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside no;
};

logging
{
        channel default_debug {
                file "data/named.log" versions 3 size 10m;
                severity dynamic;
                print-time yes;
                print-severity yes;
                print-category yes;

        };

        #クエリ情報を queries.log に出力
        channel "log_queries" {
                file "data/queries.log" versions 3 size 10m;
                severity info;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        category queries { "log_queries"; };
};

view "internal"
{
        match-clients           { local-net; };
        recursion yes;

        zone "." IN {
                type hint;
                file "/var/named/named.ca";
        };

        include "/etc/named.rfc1912.zones";


        zone "example.com" {
                type master;
                file "example.com.db";

                #ゾーン転送要求を許可するスレーブサーバの IP アドレス指定 (192.168.110.136)
                #自身からの dig の axfr を許可するため自身の IP アドレス指定 (192.168.110.135)
                allow-transfer { 192.168.110.136; 192.168.110.135;};

                #ゾーン情報に変更が加えられた際に他のネームサーバに変更を通知
                notify yes;

                #notify が yes の場合、通知先となるサーバの IP アドレスを指定
                also-notify { 192.168.110.136; };

        };

        zone "110.168.192.in-addr.arpa" {
                type master;
                file "192.168.110.0.local.rev";

                #ゾーン転送要求を許可するスレーブサーバの IP アドレス指定 (192.168.110.136)
                #自身に対して dig の axfr を許可するため自身の IP アドレス指定 (192.168.110.135)
                allow-transfer { 192.168.110.136; 192.168.110.135;};

                #ゾーン情報に変更が加えられた際に他のネームサーバに変更を通知
                notify yes;

                #notify が yes の場合、通知先となるサーバの IP アドレスを指定
                also-notify { 192.168.110.136; };

        };
};


2.ゾーンファイルの編集

/var/named/chroot/var/named/example.com.db の編集。

$ttl 38400
@                    IN      SOA     RHEL61.example.com. root.RHEL61.example.com. (
                                     0000000001
                                     10800
                                     3600
                                     604800
                                     38400 )

                     IN      NS      RHEL61.example.com.
RHEL61.example.com.  IN      A       192.168.110.135
RHEL66.example.com.  IN      A       192.168.110.136

※「FQDN + .」と「FQDN」のみの違い

RHEL61.example.com.→RHEL61.example.com となる
                  ^
RHEL61.example.com →RHEL61.example.com.example.com となる
                  ^


/var/named/chroot/var/named/192.168.110.0.local.rev の編集。

$ttl 38400
@                    IN      SOA     RHEL61.example.com. root.RHEL61.example.com. (
                                     0000000001
                                     10800
                                     3600
                                     604800
                                     38400 )

                     IN      NS      RHEL61.example.com.
135                  IN      PTR     RHEL61.example.com.
136                  IN      PTR     RHEL66.example.com.

※以下でゾーン情報をダンプして確認可能

# rndc dumpdb -zones
# cat /var/named/chroot/var/named/data/cache_dump.db


・スレーブ・サーバ

1.named.conf (/var/named/chroot/etc/named.conf) の編集

acl local-net {
  10.0.1.1;
  192.168.110.0/24;
};

options
{
        directory               "/var/named";

        #rndc によるダンプ情報のファイル
        dump-file               "data/cache_dump.db";

        #rndc によるステータス情報のファイル
        statistics-file         "data/named_stats.txt";

        #rndc によるメモリ情報のファイル
        memstatistics-file      "data/named_mem_stats.txt";

        #BIND がクライアントからのクエリを受け取るport と NIC を指定
        listen-on port 53       { 127.0.0.1; 192.168.110.136;};
        #listen-on-v6 port 53    { ::1; };

        #クエリが出来るクライアントを指定
        allow-query             { local-net; };

        #キャッシュされた情報に対するクエリが出来るクライアントを指定
        allow-query-cache       { local-net; };

        #再帰的なサーバーとして動作するかどうかを指定
        recursion yes;

        #DNSSEC を無効
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside no;
};

logging
{
        channel default_debug {
                file "data/named.log" versions 3 size 10m;
                severity dynamic;
                print-time yes;
                print-severity yes;
                print-category yes;

        };

        #クエリ情報を queries.log に出力
        channel "log_queries" {
                file "data/queries.log" versions 3 size 10m;
                severity info;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        category queries { "log_queries"; };
};

view "internal"
{
        match-clients           { local-net; };
        recursion yes;

        zone "." IN {
                type hint;
                file "/var/named/named.ca";
        };

        include "/etc/named.rfc1912.zones";


        zone "example.com" {
                type slave;
                file "slaves/example.com.db";

                #マスターサーバの IP アドレス指定 (192.168.110.135)
                masters { 192.168.110.135; }; 

        };

        zone "110.168.192.in-addr.arpa" {
                type slave;
                file "slaves/192.168.110.0.local.rev";

                #マスターサーバの IP アドレス指定 (192.168.110.135)
                masters { 192.168.110.135; }; 


        };
};

※参考情報
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html-single/Deployment_Guide/index.html
14.2. BIND
https://lists.openshift.redhat.com/docs/manuals/enterprise/RHEL-5-manual/ja-JP/Deployment_Guide/s2-bind-introduction-bind.htm
http://www.atmarkit.co.jp/flinux/index/indexfiles/bind9index.html
https://www.suse.com/ja-jp/documentation/sles10/book_sle_reference/data/cha.dns.htmll
http://www.eis.co.jp/category/dns_bind/
http://www.maruko2.com/mw/rndc%E3%81%A7named%E3%82%92%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B

独自の yum リポジトリを作成

・独自の yum リポジトリを作成 (ローカルのマシン)

1.createrepo パッケージを導入。

# yum install createrepo


2.yum リポジトリとして利用するディレクトリを作成。

# mkdir /mnt/local_repo/ 


3.上記のディレクトリに rpm パッケージを格納し以下のコマンド。

# createrepo --database /mnt/local_repo


4.yum リポジトリのファイルを /etc/yum.repos.d に作成。
あとは、yum コマンドを実行。
※/etc/yum.repos.d/original.repo として以下を作成。

[local-myrepository]
name=My repository
baseurl=file:///mnt/local_repo
gpgcheck=0
enabled=1

※該当のリポジトリを更新する場合は以下のコマンド

# createrepo -update /mnt/local_repo


・独自の yum リポジトリを作成 (HTTP)


1.先に作成したディレクトリを httpd で公開するディレクトリに移動。

mv /mnt/local_repo /var/www/html/


2.createrepo をコマンドを実行し、httpd を再起動。

createrepo --database /var/www/html/local_repo



3.該当の yum リポジトリのファイルを /etc/yum.repos.d に作成。
あとは、yum コマンドを実行。

[local-myrepository]
name=My repository
baseurl=http://192.168.110.135/local_repo
gpgcheck=0
enabled=1

※参考 URL

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html-single/Deployment_Guide/index.html#ch-yum
第6章 Yum
http://zokibayashi.hatenablog.com/entry/2015/04/24/074048
https://access.redhat.com/ja/node/395763
http://blog.asial.co.jp/319
http://momijiame.tumblr.com/post/87789692026/%E8%87%AA%E5%88%86%E7%94%A8%E3%81%AE-yum-%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8B
http://knowledge.sakura.ad.jp/tech/1086/



・利用可能なリポジトリ ID を一覧表示 (enabled、disabled 含む)

# yum repolist all


・利用可能なリポジトリ ID を一覧表示 (enabled のみ)

# yum repolist
::
リポジトリー ID                                  リポジトリー名                                      状態
base                                             CentOS-6 - Base                                     6,518
extras                                           CentOS-6 - Extras                                      38
updates                                          CentOS-6 - Updates                                  1,370
repolist: 7,926


・特定のリポジトリを enable、disable

# yum-config-manager --enable <リポジトリ ID >
#
# yum-config-manager --enable base
#
# yum-config-manager --disable <リポジトリ ID >
#
# yum-config-manager --disable base


・一括で disable

# yum-config-manager --disable

鍵ベース認証による ssh 接続

・鍵ベース認証による ssh 接続

※鍵はユーザーごとに別々に生成する必要がある

1.接続元

#  ssh-keygen -t rsa ★鍵作成 (RSA)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):★Enterキーのみでも可。ここでパスフレーズを入力した場合は ssh 接続でパスフレーズを入力することになる
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0b:f5:3c:b2:74:d4:27:00:3c:41:45:f6:21:a4:4c:88 root@RHEL66.example.com
The key's randomart image is:
+--[ RSA 2048]----+
|     . +=*B .    |
|    E .ooo = .   |
|        +.. + .  |
|       . +   o   |
|      . S =      |
|       o = .     |
|        o        |
|                 |
|                 |
+-----------------+
#
#  chmod 700 ~/.ssh ★権限変更


2.接続先

# ssh-keygen -t rsa ★鍵作成
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
95:0c:67:81:da:a2:b6:60:9e:fd:19:b3:22:34:bc:a6 root@RHEL61.example.com
The key's randomart image is:
+--[ RSA 2048]----+
|        ..+.     |
|        .= .     |
|       o  +      |
|      o ..       |
| .   . .S        |
|  * o            |
| + B .o          |
|  * +  =         |
|Eo . o+          |
+-----------------+
#
# chmod 700 ~/.ssh ★権限変更


3.接続元

# scp .ssh/id_rsa.pub xxx.xxx.xxx.xxx:/root/.ssh/authorized_keys
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is 1b:5e:46:6b:df:d8:f1:17:84:a7:a2:98:b6:c5:fc:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx.xxx.xxx.xxx' (RSA) to the list of known hosts.
root@xxx.xxx.xxx.xxx's password:
id_rsa.pub                                                                                                                                                          100%  405     0.4KB/s   00:00


4.接続先

# chmod 600 .ssh/authorized_keys

あとは ssh コマンドで接続するだけ。


・パスワード認証を無効化

パスワード認証を無効化し、鍵ベース認証のみにする場合は、
/etc/ssh/sshd_config に以下を設定し、sshd サービスを再起動する。

PasswordAuthentication no


パスフレーズの削除

# ssh-keygen -p -P <古いパスフレーズ> -N <古いパスフレーズ> -f /root/.ssh/id_rsa


※参考情報
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html-single/Deployment_Guide/index.html
→第12章 OpenSSH
http://www.atmarkit.co.jp/ait/articles/1503/20/news007.html