yumでソースコードいんすこ

参考文献

yum でソースコードをダウンロードしたい  
Linuxコマンドのソースコードを取得する方法:オリジナルコマンド作成前の勉強向け  

coreutilsためしにいれてみる

コード表示

[oracle@centos ~]$ sudo yum install -y yum-utils

[oracle@centos ~]$ which ls
alias ls='ls --color=auto'
	/usr/bin/ls

[oracle@centos ~]$ yum whatprovides /usr/bin/ls
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * centos-qemu-ev: ftp.iij.ad.jp
 * epel: ftp.yz.yamagata-u.ac.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
coreutils-8.22-23.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts
リポジトリー        : base
一致          :
ファイル名    : /usr/bin/ls



coreutils-8.22-23.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts
リポジトリー        : @base
一致          :
ファイル名    : /usr/bin/ls



[oracle@centos ~]$ sudo yumdownloader --source coreutils-8.22-23.el7.x86_64

[oracle@centos ~]$ find / -name "*coreutils-8.22-23.el7.src.rpm*" 2>/dev/null
/home/oracle/coreutils-8.22-23.el7.src.rpm
[oracle@centos ~]$ ll
合計 380472
-rw-r--r--.  1 oracle docker 383991324  5月 24 04:19 CentOS-7-x86_64-Vagrant-1902_01.Libvirt.box
drwxr-xr-x.  2 oracle docker      4096  6月 23 08:39 Desktop
drwxr-xr-x.  2 oracle docker      4096  6月 14 09:25 Documents
drwxr-xr-x.  2 oracle docker      4096  6月 22 15:06 Downloads
drwxr-xr-x.  2 oracle docker      4096  5月 12 16:16 Music
drwxr-xr-x.  2 oracle docker      4096  6月 14 20:02 Pictures
drwxr-xr-x.  2 oracle docker      4096  5月 12 16:16 Public
drwxr-xr-x.  2 oracle docker      4096  5月 12 16:16 Templates
drwxr-xr-x.  2 oracle docker      4096  5月 12 16:16 Videos
-rw-r--r--.  1 root   root     5518732 11月 13  2018 coreutils-8.22-23.el7.src.rpm
drwxr-xr-x. 25 oracle docker      4096  5月 25 12:58 docker-images
drwxr-xr-x.  4 oracle docker      4096  6月  3 06:33 doclan
drwxr-xr-x.  7 oracle docker      4096  6月  3 22:00 ff
drwxr-xr-x.  2 oracle docker      4096  6月 14 13:18 gg
drwxr-xr-x.  3 oracle docker      4096  5月 25 15:01 jj
drwxr-xr-x.  6 oracle docker      4096  6月  6 23:23 kk
drwxr-xr-x.  9 oracle docker      4096  6月  9 18:22 pp
drwxr-xr-x. 11 oracle docker      4096  6月 23 08:00 rr
drwxr-xr-x.  2 oracle docker      4096  6月 21 07:38 tmp
drwxr-xr-x.  4 oracle docker      4096  6月  7 19:45 tt
drwxr-xr-x.  7 oracle docker      4096  6月  7 01:06 vx
drwxr-xr-x.  4 oracle docker      4096  5月 25 10:29 weban

[oracle@centos ~]$ mkdir centos_coreutils
[oracle@centos ~]$ ll
合計 380476
-rw-r--r--.  1 oracle docker 383991324  5月 24 04:19 CentOS-7-x86_64-Vagrant-1902_01.Libvirt.box
drwxr-xr-x.  2 oracle docker      4096  6月 23 08:40 Desktop
drwxr-xr-x.  2 oracle docker      4096  6月 14 09:25 Documents
drwxr-xr-x.  2 oracle docker      4096  6月 22 15:06 Downloads
drwxr-xr-x.  2 oracle docker      4096  5月 12 16:16 Music
drwxr-xr-x.  2 oracle docker      4096  6月 14 20:02 Pictures
drwxr-xr-x.  2 oracle docker      4096  5月 12 16:16 Public
drwxr-xr-x.  2 oracle docker      4096  5月 12 16:16 Templates
drwxr-xr-x.  2 oracle docker      4096  5月 12 16:16 Videos
drwxr-xr-x.  2 oracle docker      4096  6月 23 08:42 centos_coreutils
-rw-r--r--.  1 root   root     5518732 11月 13  2018 coreutils-8.22-23.el7.src.rpm
drwxr-xr-x. 25 oracle docker      4096  5月 25 12:58 docker-images
drwxr-xr-x.  4 oracle docker      4096  6月  3 06:33 doclan
drwxr-xr-x.  7 oracle docker      4096  6月  3 22:00 ff
drwxr-xr-x.  2 oracle docker      4096  6月 14 13:18 gg
drwxr-xr-x.  3 oracle docker      4096  5月 25 15:01 jj
drwxr-xr-x.  6 oracle docker      4096  6月  6 23:23 kk
drwxr-xr-x.  9 oracle docker      4096  6月  9 18:22 pp
drwxr-xr-x. 11 oracle docker      4096  6月 23 08:00 rr
drwxr-xr-x.  2 oracle docker      4096  6月 21 07:38 tmp
drwxr-xr-x.  4 oracle docker      4096  6月  7 19:45 tt
drwxr-xr-x.  7 oracle docker      4096  6月  7 01:06 vx
drwxr-xr-x.  4 oracle docker      4096  5月 25 10:29 weban


[oracle@centos ~]$ cd centos_coreutils
[oracle@centos centos_coreutils]$ pwd
/home/oracle/centos_coreutils


[oracle@centos centos_coreutils]$ ll
合計 5744
-rw-rw-r--. 1 oracle docker     868  6月 23 08:44 coreutils-4.5.3-langinfo.patch
-rw-rw-r--. 1 oracle docker    5427  6月 23 08:44 coreutils-6.10-configuration.patch
-rw-rw-r--. 1 oracle docker     576  6月 23 08:44 coreutils-6.10-manpages.patch
-rw-rw-r--. 1 oracle docker     617  6月 23 08:44 coreutils-7.4-sttytcsadrain.patch
-rw-rw-r--. 1 oracle docker    1471  6月 23 08:44 coreutils-8.2-uname-processortype.patch
-rw-rw-r--. 1 oracle docker    3758  6月 23 08:44 coreutils-8.22-cp-selinux.patch
-rw-rw-r--. 1 oracle docker   11416  6月 23 08:44 coreutils-8.22-cp-sparsecorrupt.patch
-rw-rw-r--. 1 oracle docker    1633  6月 23 08:44 coreutils-8.22-date-emptyTZ.patch
-rw-rw-r--. 1 oracle docker   16663  6月 23 08:44 coreutils-8.22-dd-progress.patch
-rw-rw-r--. 1 oracle docker    1575  6月 23 08:44 coreutils-8.22-df-autofs.patch
-rw-rw-r--. 1 oracle docker   18860  6月 23 08:44 coreutils-8.22-df-filtermountlistupdate.patch
-rw-rw-r--. 1 oracle docker    3651  6月 23 08:44 coreutils-8.22-df-getdisk.patch
-rw-rw-r--. 1 oracle docker    2773  6月 23 08:44 coreutils-8.22-df-stat.patch
-rw-rw-r--. 1 oracle docker    5801  6月 23 08:44 coreutils-8.22-du-bindmountcycles.patch
-rw-rw-r--. 1 oracle docker    1363  6月 23 08:44 coreutils-8.22-failingtests.patch
-rw-rw-r--. 1 oracle docker    1477  6月 23 08:44 coreutils-8.22-id-groups.patch
-rw-rw-r--. 1 oracle docker    6854  6月 23 08:44 coreutils-8.22-ls-interruption.patch
-rw-rw-r--. 1 oracle docker   14467  6月 23 08:44 coreutils-8.22-mv-hardlinksrace.patch
-rw-rw-r--. 1 oracle docker   37417  6月 23 08:44 coreutils-8.22-mv-n-noreplace.patch
-rw-rw-r--. 1 oracle docker    6740  6月 23 08:44 coreutils-8.22-newfilesystems.patch
-rw-rw-r--. 1 oracle docker   10225  6月 23 08:44 coreutils-8.22-non-defaulttests.patch
-rw-rw-r--. 1 oracle docker    1895  6月 23 08:44 coreutils-8.22-ppc64le.patch
-rw-rw-r--. 1 oracle docker    4559  6月 23 08:44 coreutils-8.22-selinux-optionsseparate.patch
-rw-rw-r--. 1 oracle docker    1145  6月 23 08:44 coreutils-8.22-sort-blanks.patch
-rw-rw-r--. 1 oracle docker     563  6月 23 08:44 coreutils-8.22-temporarytestoff.patch
-rw-rw-r--. 1 oracle docker     588  6月 23 08:44 coreutils-8.22-vxfs-noinotify.patch
-rw-rw-r--. 1 oracle docker    1226  6月 23 08:44 coreutils-8.22-xfs-tests.patch
-rw-rw-r--. 1 oracle docker    2593  6月 23 08:44 coreutils-8.22-xfsbuildfailure.patch
-rw-rw-r--. 1 oracle docker 5335124  6月 23 08:44 coreutils-8.22.tar.xz
-rw-rw-r--. 1 oracle docker     685  6月 23 08:44 coreutils-8.4-mkdir-modenote.patch
-rw-rw-r--. 1 oracle docker    5090  6月 23 08:44 coreutils-DIR_COLORS
-rw-rw-r--. 1 oracle docker    5725  6月 23 08:44 coreutils-DIR_COLORS.256color
-rw-rw-r--. 1 oracle docker    4669  6月 23 08:44 coreutils-DIR_COLORS.lightbgcolor
-rwxrwxr-x. 1 oracle docker    1741  6月 23 08:44 coreutils-colorls.csh
-rwxrwxr-x. 1 oracle docker    1606  6月 23 08:44 coreutils-colorls.sh
-rw-rw-r--. 1 oracle docker    6026  6月 23 08:44 coreutils-df-direct.patch
-rw-rw-r--. 1 oracle docker    2291  6月 23 08:44 coreutils-getgrouplist.patch
-rw-rw-r--. 1 oracle docker    2509  6月 23 08:44 coreutils-i18n-fold-newline.patch
-rw-rw-r--. 1 oracle docker    3070  6月 23 08:44 coreutils-i18n-sort-memleak.patch
-rw-rw-r--. 1 oracle docker  147328  6月 23 08:44 coreutils-i18n.patch
-rw-rw-r--. 1 oracle docker     331  6月 23 08:44 coreutils-overflow.patch
-rw-rw-r--. 1 oracle docker   19930  6月 23 08:44 coreutils-selinux.patch
-rw-rw-r--. 1 oracle docker    2249  6月 23 08:44 coreutils-selinuxmanpages.patch
-rw-rw-r--. 1 oracle docker   72699  6月 23 08:44 coreutils.spec
-rw-rw-r--. 1 oracle docker     590  6月 23 08:44 sh-utils-2.0.11-dateman.patch


[oracle@centos centos_coreutils]$ tar -xvf coreutils-8.22.tar.xz


[oracle@centos src]$ ll
合計 2808
-rw-r--r--. 1 oracle docker   8640 12月  4  2013 base64.c
-rw-r--r--. 1 oracle docker   4919 12月  4  2013 basename.c
-rw-r--r--. 1 oracle docker   5290 12月  4  2013 c99-to-c89.diff
-rw-r--r--. 1 oracle docker  22725 12月  4  2013 cat.c
-rw-r--r--. 1 oracle docker  16355 12月  4  2013 chcon.c
-rw-r--r--. 1 oracle docker   8836 12月  4  2013 chgrp.c
-rw-r--r--. 1 oracle docker  15845 12月  4  2013 chmod.c
-rw-r--r--. 1 oracle docker  17246 12月  4  2013 chown-core.c
-rw-r--r--. 1 oracle docker   2281 12月  4  2013 chown-core.h
-rw-r--r--. 1 oracle docker  10116 12月  4  2013 chown.c
-rw-r--r--. 1 oracle docker   6821 12月  4  2013 chroot.c
-rw-r--r--. 1 oracle docker   9879 12月  4  2013 cksum.c
-rw-r--r--. 1 oracle docker  12863 12月  4  2013 comm.c
-rw-r--r--. 1 oracle docker 102362 12月  5  2013 copy.c
-rw-r--r--. 1 oracle docker  10637 12月  4  2013 copy.h
-rw-r--r--. 1 oracle docker   4645 12月  4  2013 cp-hash.c
-rw-r--r--. 1 oracle docker    204 12月  4  2013 cp-hash.h
-rw-r--r--. 1 oracle docker  39399 12月  5  2013 cp.c
-rw-r--r--. 1 oracle docker  39607 12月  4  2013 csplit.c
-r--r--r--. 1 oracle docker   3209 12月 13  2013 cu-progs.mk
-rw-r--r--. 1 oracle docker  22606 12月  4  2013 cut.c
-rw-r--r--. 1 oracle docker  16993 12月  4  2013 date.c
-rwxr-xr-x. 1 oracle docker   1334 12月  4  2013 dcgen
-rw-r--r--. 1 oracle docker  72722 12月  4  2013 dd.c
-rw-r--r--. 1 oracle docker  46625 12月  4  2013 df.c
-rw-r--r--. 1 oracle docker  12875 12月  4  2013 dircolors.c
-r--r--r--. 1 oracle docker  18409 12月  9  2013 dircolors.h
-rw-r--r--. 1 oracle docker   4582 12月  4  2013 dircolors.hin
-rw-r--r--. 1 oracle docker   3188 12月  4  2013 dirname.c
-rw-r--r--. 1 oracle docker  33767 12月  4  2013 du.c
-rw-r--r--. 1 oracle docker   7630 12月  4  2013 echo.c
-rw-r--r--. 1 oracle docker   4387 12月  4  2013 env.c
-rw-r--r--. 1 oracle docker  11212 12月  4  2013 expand.c
-rw-r--r--. 1 oracle docker  21189 12月  4  2013 expr.c
-rw-r--r--. 1 oracle docker   7620 12月  4  2013 extent-scan.c
-rw-r--r--. 1 oracle docker   2099 12月  4  2013 extent-scan.h
-rw-r--r--. 1 oracle docker   4637 12月  4  2013 extract-magic
-rw-r--r--. 1 oracle docker  74954 12月  4  2013 factor.c
-rw-r--r--. 1 oracle docker     51 12月  4  2013 false.c
-rw-r--r--. 1 oracle docker   3052 12月  4  2013 fiemap.h
-rw-r--r--. 1 oracle docker   3345 12月  4  2013 find-mount-point.c
-rw-r--r--. 1 oracle docker    836 12月  4  2013 find-mount-point.h
-rw-r--r--. 1 oracle docker  28532 12月  4  2013 fmt.c
-rw-r--r--. 1 oracle docker   8195 12月  4  2013 fold.c
-r--r--r--. 1 oracle docker   3921 12月 13  2013 fs-is-local.h
-r--r--r--. 1 oracle docker   3571 12月 13  2013 fs.h
-rw-r--r--. 1 oracle docker   5221 12月  4  2013 getlimits.c
-rw-r--r--. 1 oracle docker   3121 12月  4  2013 group-list.c
-rw-r--r--. 1 oracle docker    865 12月  4  2013 group-list.h
-rw-r--r--. 1 oracle docker   3837 12月  4  2013 groups.c
-rw-r--r--. 1 oracle docker  32194 12月  4  2013 head.c
-rw-r--r--. 1 oracle docker   2355 12月  4  2013 hostid.c
-rw-r--r--. 1 oracle docker   3107 12月  4  2013 hostname.c
-rw-r--r--. 1 oracle docker  12624 12月  4  2013 id.c
-rw-r--r--. 1 oracle docker  30866 12月  4  2013 install.c
-rw-r--r--. 1 oracle docker   2710 12月  4  2013 ioblksize.h
-rw-r--r--. 1 oracle docker  32132 12月  4  2013 join.c
-rw-r--r--. 1 oracle docker   8823 12月  4  2013 kill.c
-rw-r--r--. 1 oracle docker     37 12月  4  2013 lbracket.c
-rw-r--r--. 1 oracle docker   4724 12月  4  2013 libstdbuf.c
-rw-r--r--. 1 oracle docker   2605 12月  4  2013 link.c
-rw-r--r--. 1 oracle docker  21549 12月  4  2013 ln.c
-rw-r--r--. 1 oracle docker  17421 12月  4  2013 local.mk
-rw-r--r--. 1 oracle docker   2259 12月  4  2013 logname.c
-rw-r--r--. 1 oracle docker  78147 12月  4  2013 longlong.h
-rw-r--r--. 1 oracle docker     44 12月  4  2013 ls-dir.c
-rw-r--r--. 1 oracle docker     37 12月  4  2013 ls-ls.c
-rw-r--r--. 1 oracle docker     46 12月  4  2013 ls-vdir.c
-rw-r--r--. 1 oracle docker 151003 12月  4  2013 ls.c
-rw-r--r--. 1 oracle docker    201 12月  4  2013 ls.h
-rw-r--r--. 1 oracle docker   5766 12月  4  2013 make-prime-list.c
-rw-r--r--. 1 oracle docker  24492 12月  4  2013 md5sum.c
-rw-r--r--. 1 oracle docker   9062 12月  5  2013 mkdir.c
-rw-r--r--. 1 oracle docker   4933 12月  5  2013 mkfifo.c
-rw-r--r--. 1 oracle docker   8116 12月  5  2013 mknod.c
-rw-r--r--. 1 oracle docker  10046 12月  4  2013 mktemp.c
-rw-r--r--. 1 oracle docker  16286 12月  5  2013 mv.c
-rw-r--r--. 1 oracle docker   6035 12月  4  2013 nice.c
-rw-r--r--. 1 oracle docker  16275 12月  4  2013 nl.c
-rw-r--r--. 1 oracle docker   7907 12月  4  2013 nohup.c
-rw-r--r--. 1 oracle docker   3220 12月  4  2013 nproc.c
-rw-r--r--. 1 oracle docker  41966 12月  4  2013 numfmt.c
-rw-r--r--. 1 oracle docker  57126 12月  4  2013 od.c
-rw-r--r--. 1 oracle docker   2317 12月  4  2013 operand2sig.c
-rw-r--r--. 1 oracle docker    832 12月  4  2013 operand2sig.h
-rw-r--r--. 1 oracle docker  14970 12月  4  2013 paste.c
-rw-r--r--. 1 oracle docker  11819 12月  4  2013 pathchk.c
-rw-r--r--. 1 oracle docker  14943 12月  4  2013 pinky.c
-rw-r--r--. 1 oracle docker  86849 12月  4  2013 pr.c
-r--r--r--. 1 oracle docker 104356 12月  9  2013 primes.h
-rw-r--r--. 1 oracle docker   4059 12月  4  2013 printenv.c
-rw-r--r--. 1 oracle docker  19700 12月  4  2013 printf.c
-rw-r--r--. 1 oracle docker   1174 12月  4  2013 prog-fprintf.c
-rw-r--r--. 1 oracle docker    962 12月  4  2013 prog-fprintf.h
-rw-r--r--. 1 oracle docker  69914 12月  4  2013 ptx.c
-rw-r--r--. 1 oracle docker  10591 12月  4  2013 pwd.c
-rw-r--r--. 1 oracle docker   5112 12月  4  2013 readlink.c
-rw-r--r--. 1 oracle docker   7794 12月  4  2013 realpath.c
-rw-r--r--. 1 oracle docker   3654 12月  4  2013 relpath.c
-rw-r--r--. 1 oracle docker    918 12月  4  2013 relpath.h
-rw-r--r--. 1 oracle docker  19761 12月  4  2013 remove.c
-rw-r--r--. 1 oracle docker   3015 12月  4  2013 remove.h
-rw-r--r--. 1 oracle docker  10477 12月  4  2013 rm.c
-rw-r--r--. 1 oracle docker   6786 12月  4  2013 rmdir.c
-rw-r--r--. 1 oracle docker   8035 12月  4  2013 runcon.c
-rw-r--r--. 1 oracle docker   8986 12月  4  2013 selinux.c
-rw-r--r--. 1 oracle docker   1459 12月  5  2013 selinux.h
-rw-r--r--. 1 oracle docker  18070 12月  4  2013 seq.c
-rw-r--r--. 1 oracle docker   6033 12月  4  2013 setuidgid.c
-rw-r--r--. 1 oracle docker  40495 12月  4  2013 shred.c
-rw-r--r--. 1 oracle docker  17528 12月  9  2013 shuf.c
-rw-r--r--. 1 oracle docker   3913 12月  4  2013 sleep.c
-rw-r--r--. 1 oracle docker 143380 12月  4  2013 sort.c
-rw-r--r--. 1 oracle docker  46504 12月  4  2013 split.c
-rw-r--r--. 1 oracle docker  46255 12月 13  2013 stat.c
-rw-r--r--. 1 oracle docker  10090 12月  4  2013 stdbuf.c
-rw-r--r--. 1 oracle docker  55677 12月  4  2013 stty.c
-rw-r--r--. 1 oracle docker   6726 12月  4  2013 sum.c
-rw-r--r--. 1 oracle docker   1977 12月  4  2013 sync.c
-rw-r--r--. 1 oracle docker  18060 12月  5  2013 system.h
-rw-r--r--. 1 oracle docker   5973 12月  4  2013 tac-pipe.c
-rw-r--r--. 1 oracle docker  20994 12月  4  2013 tac.c
-rw-r--r--. 1 oracle docker  69842 12月  9  2013 tail.c
-rw-r--r--. 1 oracle docker   5705 12月  4  2013 tee.c
-rw-r--r--. 1 oracle docker  22830 12月  4  2013 test.c
-rw-r--r--. 1 oracle docker  15652 12月  4  2013 timeout.c
-rw-r--r--. 1 oracle docker  13015 12月  4  2013 touch.c
-rw-r--r--. 1 oracle docker  60347 12月  4  2013 tr.c
-rw-r--r--. 1 oracle docker   2233 12月  4  2013 true.c
-rw-r--r--. 1 oracle docker  12173 12月  4  2013 truncate.c
-rw-r--r--. 1 oracle docker  14063 12月  4  2013 tsort.c
-rw-r--r--. 1 oracle docker   3054 12月  4  2013 tty.c
-rw-r--r--. 1 oracle docker     48 12月  4  2013 uname-arch.c
-rw-r--r--. 1 oracle docker     49 12月  4  2013 uname-uname.c
-rw-r--r--. 1 oracle docker   9910 12月  4  2013 uname.c
-rw-r--r--. 1 oracle docker    146 12月  4  2013 uname.h
-rw-r--r--. 1 oracle docker  15221 12月  4  2013 unexpand.c
-rw-r--r--. 1 oracle docker  18932 12月  4  2013 uniq.c
-rw-r--r--. 1 oracle docker   2392 12月  4  2013 unlink.c
-rw-r--r--. 1 oracle docker   6767 12月  4  2013 uptime.c
-rw-r--r--. 1 oracle docker   3610 12月  4  2013 users.c
-rw-r--r--. 1 oracle docker  23793 12月  4  2013 wc.c
-rw-r--r--. 1 oracle docker  22102 12月  4  2013 who.c
-rw-r--r--. 1 oracle docker   2482 12月  4  2013 whoami.c
-rw-r--r--. 1 oracle docker   2312 12月  4  2013 yes.c

kvm上の仮想マシンmacアドレスをkey-value形式のファイルで管理してみようと思った話

まえがき

役に立つと思ったので、作ってみた。なお、rootユーザで作業する前提。sudoでパスワード渡しにくいから。

コマンドファイル作成

エスケープ回避したい。あんまりに気にしたくない。

コード表示

[root@centos vx]# cat get_macaddr_cmd
virsh dumpxml vx_node@ | grep "mac address" | awk 'match($0, /[a-f0-9]{2}(:[a-f0-9]{2}){5}/) {print substr($0, RSTART, RLENGTH)}'

ノードファイル作成

仮想マシンをノードファイルで管理する。

コード表示

[root@centos vx]# seq 3 | xargs -I{} bash -c 'echo node{}' > nodename
[root@centos vx]# cat nodename
node1
node2
node3

3つの仮想マシンを立ち上げる

コード表示

[oracle@centos vx]$ vagrant status
Current machine states:

node1                     running (libvirt)
node2                     running (libvirt)
node3                     running (libvirt)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

実行例

コード表示

[root@centos vx]# seq 3 | xargs -I{} bash -c 'sed -e s/@/{}/ get_macaddr_cmd | bash ' > macaddr
[root@centos vx]# cat macaddr
52:54:00:91:02:58
52:54:00:8d:fd:14
52:54:00:cd:fe:3a
[root@centos vx]# seq 3 | xargs -I{} bash -c 'echo node{}' > nodename
[root@centos vx]# cat nodename
node1
node2
node3
[root@centos vx]# paste -d ' ' nodename macaddr
node1 52:54:00:91:02:58
node2 52:54:00:8d:fd:14
node3 52:54:00:cd:fe:3a
[root@centos vx]# virsh dumpxml vx_node1 | awk '/<interface/,/interface>/'
    <interface type='network'>
      <mac address='52:54:00:91:02:58'/>
      <source network='vagrant-libvirt' bridge='virbr0'/>
      <target dev='vnet2'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </interface>
[root@centos vx]# virsh dumpxml vx_node2 | awk '/<interface/,/interface>/'
    <interface type='network'>
      <mac address='52:54:00:8d:fd:14'/>
      <source network='vagrant-libvirt' bridge='virbr0'/>
      <target dev='vnet1'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </interface>
[root@centos vx]# virsh dumpxml vx_node3 | awk '/<interface/,/interface>/'
    <interface type='network'>
      <mac address='52:54:00:cd:fe:3a'/>
      <source network='vagrant-libvirt' bridge='virbr0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </interface>

こういうの全部まとめておきたい

必要なもの

コード表示

[root@centos vx]# cat get_nodename_cmd
echo node@
[root@centos vx]# cat get_macaddr_cmd
virsh dumpxml vx_node@ | grep "mac address" | awk 'match($0, /[a-f0-9]{2}(:[a-f0-9]{2}){5}/) {print substr($0, RSTART, RLENGTH)}'
[root@centos vx]# seq 3 | xargs -I{} bash -c 'sed -e s/@/{}/ get_nodename_cmd | bash ' > nodename
[root@centos vx]# cat nodename
node1
node2
node3
[root@centos vx]# seq 3 | xargs -I{} bash -c 'sed -e s/@/{}/ get_macaddr_cmd | bash ' > macaddr
[root@centos vx]# cat macaddr
52:54:00:91:02:58
52:54:00:8d:fd:14
52:54:00:cd:fe:3a
[root@centos vx]# paste -d ' ' nodename macaddr
node1 52:54:00:91:02:58
node2 52:54:00:8d:fd:14
node3 52:54:00:cd:fe:3a
[root@centos vx]# cat cmd_list
get_nodename_cmd
get_macaddr_cmd
[root@centos vx]# cat script_run.sh
#!/bin/bash
RPT="$1"

while read line; do
  rm -rf $(echo ${line} | sed -e s/\_/\\t/g | awk '{print $2}');
  seq ${RPT} | while read rpt; do
    cat ${line} | sed -e s/@/${rpt}/ | bash;
  done
done < <(cat cmd_list)

実行例

いいんじゃないかな。

コード表示

[root@centos vx]# ./script_run.sh 3 && paste -d ' ' nodename macaddr
node1 52:54:00:91:02:58
node2 52:54:00:8d:fd:14
node3 52:54:00:cd:fe:3a

macアドレス取得する話

参考文献

grepで正規表現を用いてIPアドレス・MACアドレスを抽出する

実行例

16進数表現らしいので、A-F0-9。awkエスケープあんましなくていいからよいな。

コード表示

[oracle@centos vx]$ sudo virsh dumpxml vx_node1 | grep "mac address" | awk 'match($0, /[A-F0-9]{2}(:[A-F0-9]{2}){5}/) {print substr($0, RSTART, RLENGTH)}'
[sudo] oracle のパスワード:
52:54:00:91:63:57

linuxのnetnsについての話

参考文献

LXCで学ぶコンテナ入門軽量仮想化環境を実現する技術  

vethケーブル作成

コード表示

[oracle@centos ~]$ ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:d8:61:2c:f1:5b brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.109/24 brd 192.168.1.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::ccc0:20d4:3aed:ca75/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[oracle@centos ~]$ sudo ip link add name veth0-hst type veth peer name veth0-cot
[oracle@centos ~]$ ip a | grep veth
10: veth0-cot@veth0-hst:  mtu 1500 qdisc noop state DOWN group default qlen 1000
11: veth0-hst@veth0-cot:  mtu 1500 qdisc noop state DOWN group default qlen 1000

両端にIP振ってみる

コード表示

[oracle@centos ~]$ sudo ip addr add 192.168.1.2/24 dev veth0-hst
[oracle@centos ~]$ ip a | grep veth
10: veth0-cot@veth0-hst:  mtu 1500 qdisc noop state DOWN group default qlen 1000
11: veth0-hst@veth0-cot:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    inet 192.168.1.2/24 scope global veth0-hst
[oracle@centos ~]$ sudo ip addr add 192.168.1.3/24 dev veth0-cot
[oracle@centos ~]$ ip a | grep veth
10: veth0-cot@veth0-hst:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    inet 192.168.1.3/24 scope global veth0-cot
11: veth0-hst@veth0-cot:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    inet 192.168.1.2/24 scope global veth0-hst
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.65 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.659/5.659/5.659/0.000 ms

ケーブル活性化

コード表示

[oracle@centos ~]$ sudo ip link set up veth0-hst
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.79 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.796/5.796/5.796/0.000 ms
[oracle@centos ~]$ ip a | grep veth
10: veth0-cot@veth0-hst:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    inet 192.168.1.3/24 scope global veth0-cot
11: veth0-hst@veth0-cot:  mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    inet 192.168.1.2/24 scope global veth0-hst
[oracle@centos ~]$ sudo ip link set up veth0-cot
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

[oracle@centos ~]$ ip a | grep veth
10: veth0-cot@veth0-hst:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.1.3/24 scope global veth0-cot
11: veth0-hst@veth0-cot:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.1.2/24 scope global veth0-hst

host側からコンテナへ向けPingうつ

コード表示

[oracle@centos ~]$ ping -c 1 -I veth0-hst 192.168.1.3
PING 192.168.1.3 (192.168.1.3) from 192.168.1.2 veth0-hst: 56(84) bytes of data.

--- 192.168.1.3 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

ネットワーク名前空間の追加

コード表示

[oracle@centos ~]$ sudo ip netns add netns01
[oracle@centos ~]$ sudo ip netns list
netns01

コンテナの方のケーブルを作成したネットワーク空間に移動させる

コード表示

[oracle@centos ~]$ sudo ip link set veth0-cot netns netns01
[oracle@centos ~]$ ip a | grep veth
11: veth0-hst@if10:  mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    inet 192.168.1.2/24 scope global veth0-hst

作成したネットワーク空間にはいり、ip振って確認

コード表示

[oracle@centos ~]$ sudo ip netns exec netns01 ip addr show
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
10: veth0-cot@if11:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 6a:aa:62:c3:03:61 brd ff:ff:ff:ff:ff:ff link-netnsid 0
[oracle@centos ~]$ sudo ip netns exec netns01 ip addr add 192.168.1.3/24 dev veth0-cot
[oracle@centos ~]$ sudo ip netns exec netns01 ip addr show
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
10: veth0-cot@if11:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 6a:aa:62:c3:03:61 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.3/24 scope global veth0-cot
       valid_lft forever preferred_lft forever
[oracle@centos ~]$ sudo ip netns exec netns01 ip link set veth0-cot up
[oracle@centos ~]$ sudo ip netns exec netns01 ip addr show
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
10: veth0-cot@if11:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 6a:aa:62:c3:03:61 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.3/24 scope global veth0-cot
       valid_lft forever preferred_lft forever
    inet6 fe80::68aa:62ff:fec3:361/64 scope link 
       valid_lft forever preferred_lft forever

host側からコンテナへ向けPingうつもう一度

外でれないよなー

コード表示

[oracle@centos ~]$ ping -c 1 -I veth0-hst 192.168.1.3
PING 192.168.1.3 (192.168.1.3) from 192.168.1.2 veth0-hst: 56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.040 ms

--- 192.168.1.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

コンテナ側からhost側へ向けPINGうつ

コンテナからも外でれないよなー

コード表示

[oracle@centos ~]$ sudo ip netns exec netns01 ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.039 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.083 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.070 ms
^C
--- 192.168.1.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.039/0.064/0.083/0.018 ms
[oracle@centos ~]$ sudo ip netns exec netns01 ping -c 1 8.8.8.8
connect: ネットワークに届きません

あとかたづけ

コード表示

[oracle@centos ~]$ sudo ip link set down veth0-hst
[oracle@centos ~]$ sudo ip netns exec netns01 ip link set veth0-cot down
[oracle@centos ~]$ sudo ip netns del netns01
[oracle@centos ~]$ ip a | grep veth

第3おくてっとを100に変えたやつでやってみる

ホスト側のセグメント切り分けて置いた方がホスト側からそとにでていけるんだよな。セグメントかぶっているとつながらない。コンテナからはマスカレード機能がないので、NATできず、外と通信できない。Dockerとかはこういう機能を実装しているんだろうな。スクリプトで設定ファイル自動で作成しているんだろうな。

vethケーブル作成

コード表示

[oracle@centos ~]$ sudo ip link add name veth0-hst type veth peer name veth0-cot
[sudo] oracle のパスワード:
[oracle@centos ~]$ ip a | grep veth
12: veth0-cot@veth0-hst:  mtu 1500 qdisc noop state DOWN group default qlen 1000
13: veth0-hst@veth0-cot:  mtu 1500 qdisc noop state DOWN group default qlen 1000

両端にIP振ってみる

コード表示

[oracle@centos ~]$ sudo ip addr add 192.168.100.2/24 dev veth0-hst
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.86 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.868/5.868/5.868/0.000 ms
[oracle@centos ~]$ ip a | grep veth
12: veth0-cot@veth0-hst:  mtu 1500 qdisc noop state DOWN group default qlen 1000
13: veth0-hst@veth0-cot:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    inet 192.168.100.2/24 scope global veth0-hst
[oracle@centos ~]$ sudo ip addr add 192.168.100.3/24 dev veth0-cot
[oracle@centos ~]$ ip a | grep veth
12: veth0-cot@veth0-hst:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    inet 192.168.100.3/24 scope global veth0-cot
13: veth0-hst@veth0-cot:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    inet 192.168.100.2/24 scope global veth0-hst
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.76 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.767/5.767/5.767/0.000 ms


ケーブル活性化

コード表示

[oracle@centos ~]$ sudo ip link set up veth0-hst
[oracle@centos ~]$ ip a | grep veth
12: veth0-cot@veth0-hst:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    inet 192.168.100.3/24 scope global veth0-cot
13: veth0-hst@veth0-cot:  mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    inet 192.168.100.2/24 scope global veth0-hst
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.51 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.514/5.514/5.514/0.000 ms
[oracle@centos ~]$ sudo ip link set up veth0-cot
[oracle@centos ~]$ ip a | grep veth
12: veth0-cot@veth0-hst:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.100.3/24 scope global veth0-cot
13: veth0-hst@veth0-cot:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.100.2/24 scope global veth0-hst
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.54 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.542/5.542/5.542/0.000 ms



host側からコンテナへ向けPingうつ

コード表示

[oracle@centos ~]$ ping -c 1 -I veth0-hst 192.168.100.3
PING 192.168.100.3 (192.168.100.3) from 192.168.100.2 veth0-hst: 56(84) bytes of data.

--- 192.168.100.3 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

ネットワーク名前空間の追加

コード表示

[oracle@centos ~]$ sudo ip netns add netns01
[oracle@centos ~]$ sudo ip netns list
netns01


コンテナの方のケーブルを作成したネットワーク空間に移動させる

コード表示

[oracle@centos ~]$ sudo ip link set veth0-cot netns netns01
[oracle@centos ~]$ ip a | grep veth
13: veth0-hst@if12:  mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    inet 192.168.100.2/24 scope global veth0-hst
[oracle@centos ~]$ sudo ip netns exec netns01 ip addr show
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
12: veth0-cot@if13:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 3a:78:6c:28:9e:76 brd ff:ff:ff:ff:ff:ff link-netnsid 0

作成したネットワーク空間にはいり、ip振って確認

コード表示

[oracle@centos ~]$ sudo ip netns exec netns01 ip addr add 192.168.100.3/24 dev veth0-cot
[oracle@centos ~]$ sudo ip netns exec netns01 ip addr show
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
12: veth0-cot@if13:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 3a:78:6c:28:9e:76 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.100.3/24 scope global veth0-cot
       valid_lft forever preferred_lft forever
[oracle@centos ~]$ sudo ip netns exec netns01 ip link set veth0-cot up
[oracle@centos ~]$ sudo ip netns exec netns01 ip addr show
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
12: veth0-cot@if13:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 3a:78:6c:28:9e:76 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.100.3/24 scope global veth0-cot
       valid_lft forever preferred_lft forever
    inet6 fe80::3878:6cff:fe28:9e76/64 scope link 
       valid_lft forever preferred_lft forever

host側からコンテナへ向けPingうつもう一度

コード表示

[oracle@centos ~]$ ping -c 1 -I veth0-hst 192.168.100.3
PING 192.168.100.3 (192.168.100.3) from 192.168.100.2 veth0-hst: 56(84) bytes of data.
64 bytes from 192.168.100.3: icmp_seq=1 ttl=64 time=0.054 ms

--- 192.168.100.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.054/0.054/0.054/0.000 ms
[oracle@centos ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=5.82 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.821/5.821/5.821/0.000 ms

コンテナ側からhost側へ向けPINGうつ

コード表示

[oracle@centos ~]$ sudo ip netns exec netns01 ping 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from 192.168.100.2: icmp_seq=2 ttl=64 time=0.085 ms
64 bytes from 192.168.100.2: icmp_seq=3 ttl=64 time=0.076 ms
64 bytes from 192.168.100.2: icmp_seq=4 ttl=64 time=0.075 ms
^C
--- 192.168.100.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.038/0.068/0.085/0.019 ms
[oracle@centos ~]$ sudo ip netns exec netns01 ping -c 1 8.8.8.8
connect: ネットワークに届きません

あとかたづけ

コード表示

[oracle@centos ~]$ sudo ip link set down veth0-hst
[oracle@centos ~]$ sudo ip netns exec netns01 ip link set veth0-cot down
[oracle@centos ~]$ sudo ip netns del netns01
[oracle@centos ~]$ ip a | grep veth