######################################## CentOS 7 設定 Tips ######################################## インストール時 ----------------- リポジトリの場所:: http://ftp.riken.jp/Linux/centos/7/os/x86_64/ その他:: -- GNOME とDevelopment tools くらいは入れといても良いかな。 -- Instalation destination の設定で、デフォルトではルートディレクトリ"/"に50GB、/Homeにswapなどを取った残りの容量が割り当てられるので変えておいた方が個人的には便利。 システム関連 ----------------- ネットワーク設定:: #NICステータス確認 nmcli -p ip addr #NIC詳細情報 nmcli device nmcli device show enpxxx #Connection作成 nmcli c add type ethernet ifname enpxxx con-name enpxxx #ネットワーク接続確認 nmcli networking connectivity #プロファイル及び接続確認 nmcli connection show #IPアドレス、サブネットマスク変更 nmcli c mod enpxxx ipv4.method manual ipv4.addresses 192.168.1.2/24 #IP,subnet nmcli c modify enpxxx ipv4.addresses 192.168.10.100/24 #デフォルトゲートウェイ変更 nmcli c modify enpxxx ipv4.gateway 192.168.0.1 #IP固定 or DHCP nmcli c m enpxxx ipv4.method auto #DNS設定 nmcli c modify enpxxx ipv4.dns 8.8.8.8 #インターフェイス自動起動設定 nmcli c m enpxxx connection.autoconnect yes #インターフェース再起動 nmcli c down enpxxx; nmcli c up enpxxx #ネットワーク再起動 systemctl restart network #ルーティングテーブル確認、変更 route sudo route add -net 192.168.10.16 netmask 255.255.255.0 enpxxx sudo route del -net 192.168.10.0 netmask 255.255.255.0 enpxxx #port設定確認 netstat ネットワーク設定チェック:: #作業中のマシンのPortが空いているかをチェック netstat -nap #外からPortが空いているかをチェック nmap -sT -p [port] [target IP] #for TCP sudo nmap -sU -p [port] [target IP] #for UDP #例 nmap -sT -p 22,80 192.168.XX.YY サービス設定:: systemctl start sshd systemctl stop sshd systemctl restart sshd systemctl status sshd systemctl list-unit-files DHCPサーバ設定:: #/etc/dhcpd/dhcpd.conf に以下の感じのことを書く subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.101 192.168.0.200; default-lease-time 86400; max-lease-time 259200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.254; option domain-name-servers 192.168.0.254; option domain-name "space.local"; host haagen { hardware ethernet 08:00:2b:4c:59:23; fixed-address 192.168.0.222; } } #NICが複数(192.168.0.XXと10.0.0.XX)があって、下の項目のようにinterfaceを指定しないなら、DHCPに関して何もしないという設定をconfに加える。 subnet 10.0.0.0 netmask 255.255.255.0 { } #NICを指定してDHCPサーバを起動 # cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/ # vi /etc/systemd/system/dhcpd.service ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid # systemctl --system daemon-reload # systemctl restart dhcpd.service #DHCPリース状況を確認 cat /var/lib/dhcpd/dhcpd.leases Xilinx Software Installation ------------------------------ Vivado導入:: #Download the installer from Xilinx. chmod +x Xilinx_Vivado_SDK_Web_2017.4_1216_1_Lin64.bin sudo chmod 0777 /opt ./Xilinx_Vivado_SDK_Web_2017.4_1216_1_Lin64.bin #Do not be a root user (it's not recommended)!! #Follow GUI, (install Vivado HL Design Suite if you have a proper licence) #Installation of cable drivers cd /opt/Xilinx/Vivado/2017.4/data/xicom/cable_drivers/lin64/install_script/install_drivers/ sudo ./install_drivers #インストール後 source /opt/Xilinx/Vivado/2017.4/settings64.sh vivado で起動。 ISE導入:: #Download the installer from Xilinx. tar xvf Xilinx_ISE_DS_Lin_14.7_1015_1.tar cd Xilinx_ISE_DS_Lin_14.7_1015_1/ ./xsetup #Follow GUI, but uncheck "Install cable driver" (it'll fail anyway due to permission denied). #インストール後 source /opt/Xilinx/14.7/ISE_DS/settings64.sh ise #で起動。 Platform Cable USB IIを使うための準備:: #Third partyのドライバを導入 cd /opt/Xilinx/ git clone git://git.zerfleddert.de/usb-driver cd usb-driver make #put below in your .bashrc to use IMPACT export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so #Platform Cableを認識させるためには以下。 sudo ./setup_pcusb /opt/Xilinx/14.7/ISE_DS/ISE/ #その後、USBケーブルをさしてLEDが光れば成功。 Python 関連 --------------------------- 計算の基本:: sudo yum install -y numpy scipy sudo yum install -y python-matplotlib 画像解析:: sudo yum install -y python-pillow sudo yum install -y opencv-python Git 関連 --------------------------- 一部ディレクトリのみclone:: git clone -b developping ssh://../../../hogehoge.git . git config core.sparsecheckout true echo hogehoge/ >> .git/info/sparse-checkout git read-tree -m -u HEAD Gitlab で"Author not in member of team..."のエラーでpushできない場合の対処法。:: git config --global user.name "yourname" git config --global user.email "yourname@youremail.com" #でまずユーザ設定。その後、過去のcommitに遡って上のユーザを適応させる。 git commit --amend --reset-author --no-edit #過去に幾つもcommitしてしまっている場合は、 https://stackoverflow.com/questions/56177751/git-push-failed-with-error-gitlab-author-not-member-of-team #を参照。 SAMBA 関連 --------------------------- SAMBAのインストールと有効化:: #インストール sudo yum install samba sudo systemctl start samba sudo systemctl enable samba #クライアントが自動でホストを見つけられるようにする sudo yum install avahi sudo systemctl start avahi-daemon sudo systemctl enable avahi-daemon SAMBAの設定(TimeCapsule用Volume追加):: #/etc/samba/smb.confに以下を追加 [TimeMachine] comment = Backup for Mac Computers path = /pass/to/your/directory writable = Yes browsable = Yes fruit:time machine = yes fruit:time machine max size = 2T SAMBAにユーザを追加:: #登録されているユーザの確認 pdbedit -L #ユーザの登録 pdbedit -a yourusername [ユーザはLinuxに登録されたユーザである必要がある] Tips --------------------------- キーリピートの速度変更:: #xset r rate (delay) (repeat) xset r rate 205 65 yumのリポジトリにEPEL/SCLを追加:: #以下の操作をしようと思ったら、枯れた Base Repo.ではキツい。 sudo yum install epel-release sudo yum install centos-release-scl GCC7導入:: sudo yum install devtoolset-7 #下記コマンドでgcc7を使えるようにする scl enable devtoolset-7 bash ROOT導入:: sudo yum install root #画面が飛んでこない。MacintoshのXQuartzの設定に問題があるっぽいので、Macintosh上で下記を実行。 defaults write org.macosforge.xquartz.X11 enable_iglx -bool true gv導入:: sudo yum install gv mysql導入:: #mysql-community のリポジトリを追加 sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm sudo yum install mysql-community-client tmux導入:: sudo yum install tmux #~/.tmux.confに以下を追加。PrefixをCtrl-bからCtrl-oへ変更 set-option -g prefix C-o unbind-key C-b bind-key C-o send-prefix リモートデスクトップ導入:: sudo yum install xrdp sudo firewall-cmd --permanent --zone=public --add-port=3389/tcp sudo firewall-cmd --reload sudo systemctl start xrdp sudo systemctl enable xrdp ソフトウェアRAID:: #fdiskを使うのはそろそろやめよう。。。 #Disk確認 grep -H "" /sys/block/*/device/model parted -l #パーティションテーブル作成 sudo parted /dev/sdb #partedのプロンプト起動 #使用方法 (parted) help (parted) help [command] #現在のパーティションテーブル確認 (parted) print #パーティション設定 (parted) mklabel gpt (parted) unit MiB (parted) mkpart primary xfs 0% 100% #ソフトウェアRAID構築 sudo mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb1 /dev/sdc1 cat /proc/mdstat #Build終了後にファイルシステム構築 sudo mkfs.xfs /dev/md0 #マウントポイント作成 sudo mkdir /data sudo chmod 0777 /data #起動時に自動マウントするには/etc/fstabに下の行を追加 /dev/md0 /data xfs defaults 0 0 #(おまけ)UUIDを使う場合 sudo blkid /dev/sda1: UUID="872543d7-8f94-4542-8283-a4c70e280ddd" TYPE="xfs" PARTLABEL="primary" PARTUUID="1632dd72-1dfc-475c-a68b-576f88ec5ed3" #起動時に自動マウントするには/etc/fstabに下の行を追加 UUID=12345abcd.... /data xfs defaults 0 0 #(おまけ)/dev/sdXがどのSATAポートに繋がっているかわからない場合。 lshw でdiskのdevice file名とHDDのシリアル番号の対応を調べることができる。 #RAIDチェック #/etc/sysconfig/raid-check を下記のように変更 ENABLED=yes CHECK=check NICE=low CHECK_DEVS="md0" #/etc/cron.d/raid-check にこう書かれているかチェック 0 1 * * Sun root /usr/sbin/raid-check #毎週日曜1時に自動チェック開始 #自動チェックを手動で止めたいとき cat /sys/block/md0/md/sync_action #idleではなくcheckになっているはず echo idle > /sys/block/md0/md/sync_action #エラー時にメール #/etc/mdadm.confに以下の行を追加 MAILADDR something@*****.com #sendmail設定 sudo yum install sendmail sendmail-cf sendmail-devel mailx mail something@*****.com Subject: test hogehoge . EOT #でメールが届けば一段階クリア。 #ダメなら何が起こったか以下のログで確認。 #因みに、champは@localhost.localdomainからのメールを弾く仕様です。gmailは問題なし。 sudo tail /var/log/maillog #mdmonitorが生きているか確認 systemctl status mdmonitor #テストメール送信 mdadm --monitor --test --oneshot --scan #RAID運用コマンド mdadm --detail /dev/md0 mdadm --detail --scan mdadm --fail /dev/md0 /dev/sdb #ディスクに障害を発生させる mdadm --remove /dev/md0 /dev/sdb #アレイからディスクを外す mdadm --add /dev/md0 /dev/sdb #アレイにディスクを追加 #ディスク交換時はconfig fileに情報保存 mdadm --detail --scan > /etc/mdadm.conf システムモニタ導入:: sudo yum install gkrellm sudo yum install lm_sensors sudo sensors-detect sensors ストレステスト:: sudo yum install stress #CPU stress --cpu 2 --timeout 2m #メモリ stress --vm 2 --vm-bytes 1G --timeout 2m Firewallの設定:: #iptablesを使うのはもうやめよう。。。 systemctl start firewalld #起動 systemctl status firewalld #状態確認 systemctl stop firewalld #停止 systemctl enable firewalld #自動起動 systemctl disable firewalld #自動起動なし #設定確認 firewall-cmd --list-all #ポート追加 #firewall-cmd --add-port=80/tcp --zone=public --permanent #ポート削除 firewall-cmd --remove-port=80/tcp --zone=public --permanent パフォーマンスチェック:: sudo yum install qperf #Opening port to listen at the server side sudo firewall-cmd --add-port=10000-10010/tcp --permanent #Server side command qperf --listen_port 10000 #Client side command qperf --listen_port 10000 [SERVER IP] udp_bw #iperf3でやる場合 iperf3 -s #server side iperf3 -c 192.168.XX.YY #client side #Port 5201/tcpがデフォルト WOL設定:: #Mother boardでWOLが有効になっているか確認。 #"Power Management"とか"Wake Up Event"とかの項目あたりにあるかも(マザーボードメーカに依る)。 #設定確認 sudo ethtool enp0s31f6 #"Wake-on:" が"g"(マジックパケット)になっているか? nmcli connection show eth0| grep 802 #"802-3-ethernet.wake-on-lan:" が"64(magic)"になっているか? #WOL有効化 sudo nmcli connection modify eth0 802-3-ethernet.wake-on-lan magic sudo ethtool -s net0 wol g #上の設定で勝手に有効化されているかも? #再起動後に設定が残っているか確認すること。ダメなら下記コマンドで自動設定。 #/etc/udev/rules.d/99-wol.rulesに以下を追加 ACTION=="add", SUBSYSTEM=="net", NAME=="enp*", RUN+="/usr/sbin/ethtool -s $name wol g" #Pythonを用いたMagic Packetの送り方 #MAC=00:01:02:03:04:05 #IPv4=192.168.1:123 (ルータを中継するとき以外はなんでも良い) #Port=4567 (ルータを中継するとき以外はなんでも良い) ##以下の内容の実行ファイルを作って実行。 #----------------------------------------- #!/usr/bin/env python import socket s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.sendto('\xff'*6+'\x00\x01\x02\x03\x04\x05'*16, ('192.168.1.255', 7)) #Linux ether-wake を用いたMagic Packetの送り方 ether-wake 00:01:02:03:04:05 #ルータ越えはどうやってやる? Global IPを持つ機器に向かってmagic packetを投げる。 機器には事前にUDP port=7(magic packetによく使われるポート)をフォワードするように設定。 宛先をbroadcast(255)にするとうまく行かない機器あり。 NetworkHubがMACアドレスを覚えているため、broadcastしないとうまく行かない環境も存在。。。 PCI Passthrough for Virtual Machine:: #Enabling IOMMU on boot (need to setup on the host linux). #Edit /etc/sysconfig/grub #Add "intel_iommu=on" for GRUB_CMDLINE_LINUX like below. GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap rd.lvm.lv=centos/root vconsole.font=latarcyrheb-sun16 crashkernel=auto vconsole.keymap=us rhgb quiet intel_iommu=on" #参考URL https://serverfault.com/questions/743256/activate-intel-vt-d-in-the-kernel-on-centos7 Login attempt check:: journalctl _SYSTEMD_UNIT=sshd.service | egrep "Failed|Failure" 既定のEditorを変更:: #/etc/profile.d/editor.sh を作成し以下を追加 export EDITOR="emacs" Cron configuration:: #設定確認 crontab -l #設定削除 crontab -r #cron設定を書いたファイルをどこかに作成(cron.conf) #分 時 日 月 曜日 <実行コマンド> 0 */2 * * * echo "hogehoge" #2時間おきにhogehoge喋る 0,30 * * * * echo "hogehoge" #0分と30分にhogehoge喋る 0 2 * 1-5 * echo "hogehoge" #平日の夜中2時にhogehoge喋る #上記ファイルからcron設定 sudo crontab -u root cron.conf #自動バックアップ例 0 2 * * * rsync -av /home /bkp/ Rootkit Detection:: #Installation yum install epel-release yum install rkhunter unhide #Update rkhunter --update rkhunter --propupd #Execution rkhunter --check --skip-keypress --report-warnings-only 問題対処 ------------- Home拡張:: ##参考URL=https://icondecotter.jp/blog/2016/03/17/centos7でhomeパーティションの容量を削減してrootに割り当/ sudo mkdir /work sudo useradd -d /work/resize -m -G wheel -p resize resize sudo passwd resize sudo yum install xfsdump #optional sudo yum install psmisc #optional ##Below done by the user "resize" cd /work sudo xfsdump -J -L home -M drive -f home.dump /home sudo umount /dev/mapper/centos-home sudo fuser -km /home sudo pvdisplay sudo vgdisplay sudo lvdisplay sudo lvchange -an /dev/mapper/centos-home sudo lvremove /dev/mapper/centos-home sudo lvcreate -L 50G -n home centos sudo mkfs.xfs /dev/centos/home sudo mount /dev/centos/home df -h sudo xfsrestore -J -L home -f home.dump /home sudo lvextend -l +100%FREE /dev/centos/root sudo xfs_growfs /dev/mapper/centos-root Intel Ethernet Connection I219-Vが認識しない:: #CentOS 7のデフォルトのドライバではIntel I219-Vを認識できない。 #Intel e1000e driverを手動でインストールする。 https://www.intel.com/content/www/us/en/download/14611/15817/intel-network-adapter-driver-for-pcie-intel-gigabit-ethernet-network-connections-under-linux.html #readme.txtに従ってsuper userで下記を実行。 cd e1000e-X.Y.Z/src make install modinfo e1000e modprobe e1000e #もし古いkernel moduleがある場合以下を先に実行 rmmod e1000e; modprobe e1000e #initrd/initramfsをアップデート dracut --force 画面解像度が低い、変えれない:: #Core i7 8700Kのグラフィクドライバの問題? yum install lshw sudo lshw -c video *-display UNCLAIMED になっている。。。 #参考URL: https://www.centos.org/forums/viewtopic.php?t=64780 #治らなかった。。。 USBデバイスが/dev/ttyUSBXとして認識されない:: #Vender/Device IDを調べる lsusb (-t, -v) #もしくはplug/unplugでデバイスをどう認識しているかを確認 sudo tail -f /var/log/messages #USB機器をPCから外した状態で以下を試す modprobe ftdi_sio #調べたIDを以下のファイルに追加 /sys/bus/usb-serial/drivers/ftdi_sio/new_id #接続し直すと認識されるはず。ただしrebootすれば消える。 #恒久的に変えるには、/etc/udev/rules.d/99-ftdi.rulesに以下を追加。idVendorとidProductとechoする文字列は適宜変える。 ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", RUN+="/sbin/modprobe ftdi_sio" RUN+="/bin/sh -c 'echo 0403 6001 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'" #rebootするか、以下のコマンドでudev設定をロード。 sudo udevadm control --reload #unplug/plugで認識されるはず。 シリアルデバイスをユーザ権限で使用する:: #デバイスはdialoutグループに権限があるように設定されている。 ls -l /dev/ttyU* #ユーザをdialoutグループへ追加。 sudo gpasswd -a $USER dialout #udevで見つかるデバイスの権限を自動で書き換える。 #/lib/udev/rules.d/50-udev-default.rules内のttyXXXの0666にする。 KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout" #を KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout", MODE="0666" #に変更。 #USBTMCのデバイスはrootにしか権限がなく、sudoでもアクセスできない。rootになってからだとechoできる。 /etc/udev/rules.d/99-usbtmc.rules などを作成して、以下のように書けば権限を変更できる。 # Tektronix, Inc. AFG1062 SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="0699", ATTRS{idProduct}=="0353", GROUP="usbtmc", MODE="0666" # Kernel devices KERNEL=="usbtmc/*", MODE="0666", GROUP="usbtmc" KERNEL=="usbtmc[0-9]*", MODE="0666", GROUP="usbtmc" USBポート番号に対応したUSBシリアルデバイスのシンボリックリンクを作成:: #/etc/udev/rules.d/90-usb-aliases.rulesを作成。以下を書く。 SUBSYSTEM=="tty",KERNELS=="1-1",SUBSYSTEMS=="usb",SYMLINK+="ttyUSB_PORT1-1" SUBSYSTEM=="tty",KERNELS=="1-2",SUBSYSTEMS=="usb",SYMLINK+="ttyUSB_PORT1-2" ...以下、欲しい数だけ。 #各マザーボード、ケースに対応したポート番号はUSB機器をそれぞれのポートに抜き差ししてみて/var/log/messagesに現れる情報から読み取る。 Feb 19 11:39:11 localhost kernel: usb 1-4: FTDI USB Serial Device converter now attached to ttyUSB0 #と返ってきた場合、そのポートは1-4。 #ポートX-Yに機器をさせば、/dev/ttyUSB_PORT1-1でアクセスできる。 NICの名前変更:: #Xilinx Vivado の古いバージョン(e.g. 2016.2で確認)では ethX のMACアドレスでライセンスを確認するため、enp0s3などの最近のLinuxのNIC命名方法ではライセンス認証を失敗する。これに対処する方法。 #しかし、eth0 などに変えると問題が起こるソフトウェアも最近はあるらしい(仮想マシンとの通信とか)。自己責任で。 #参考URL: 大変助かった。http://zokibayashi.hatenablog.com/entry/2015/04/05/035642 /etc/default/grub 内の GRUB_CMDLINE_LINUX=",,,," に biosdevname=0 net.ifnames=0 を足す。 (もし rhgb や quiet のコマンドがそもそも含まれているのならそれらよりも前に足さなければならない。) #上記の設定変更をコンフィグファイルに反映させる。 sudo grub2-mkconfig -o /boot/grub2/grub.cfg #ネットワークの設定ファイルをリネームする。 mv /etc/sysconfig/network-scripts/ifcfg-enpXsY /etc/sysconfig/network-scripts/ifcfg-eth0 #もし中にDEVICEとNAMEの項目があるのならそれも適宜変更。 #さらに、この中にHWADDRの項目がないとうまくいきません。 #この後再起動すれば eth0 とかに変わるはず。 カーネルドライバ関連:: #カーネルドライバインストールしても読み込まれたドライバが変わらないことがある。 ls -ltr /usr/lib/modules/[kernel version]/extra/ #などの中にあるドライバは新しいが、initramfsに登録されているドライバが古いままになっていることが原因。 #下記コマンドで、該当ドライバの更新日時などを見て古くないかどうか確認する。 lsinitrd /boot/initramfs-3.10.0-862.3.2.el7.x86_64.img #古い場合、下記コマンドでinitramfsを再構築。やる前にimgファイルのbackupを推奨。 dracut -f /boot/initramfs-3.10.0-862.3.2.el7.x86_64.img 3.10.0-862.3.2.el7.x86_64 Apple TimeCapsuleをマウント:: sudo mount.cifs //192.168.13.126/Data/ /Volumes/timecapsule -o pass=kouene,rw,iocharset=utf8,file_mode=0777,dir_mode=0777,sec=ntlm ストレージ掃除:: #du コマンドは隠しファイル、ディレクトリをデフォルトでは対象としない。 du -ks .[^.]* * | sort -n #プロセスが掴んでいるファイルシステムには存在しないファイルを探る lsof / | sort -k7 -nr #それでもduとdfが合わない場合、巨大なファイルがマウントポイント以下に隠されていないかチェック。 システムサービス起動順序の確認:: #起動順序のtreeの表示 systemctl list-dependencies #起動時間の測定 systemd-analyze plot > unitstart.html その他:: -- sshd が自動起動しなかった。systemctl disable sshd; systemctl enable sshd で直った。治らない場合があったが、sshd.socket のサービスをdisableするとなおった。 -- ターミナル上で改行文字がおかしくなり、プロンプトが新しい行から始まらなくなったり、マウスなどでスクロールできなくなる場合がある。resetコマンドで直る場合があるので、とりあえず試す。 -- firefoxのtabがcrashする。about:configでbrowser.tabs.remote.autostart = false、browser.tabs.remote.autostart.2 = falseにすると解決。 -- CapsLockをCtrlに。Applications->Utilities->Tweak Toolを起動。Typyng->Ctrl key positionでCaps Lock as Ctrlにチェック。 -- JavaEmbeddedFrameが消えない。 -- ModemManagerが突然USBシリアルデバイスをmodemだと思って制御し始めた(ModemManager[901]: (ttyUSB0): port attributes not fully set と/var/log/messagesに出る)。ttyUSBXが使用不可に。yumでModemManagerを削除で解決。 -- Mac から ssh する場合、Preferences->Advanced にある"Set locale environment variables on startup" のチェックを外すと system の既定の locale を使用する。幸せになれる。