トップ > 最小システムの構築 >
ディレクトリとファイルの準備

  

ディレクトリとシンボリックリンクの作成

ディレクトリとシンボリックリンクの作成を行います。 まずは、ディレクトリを作成します。


mkdir -vp $MYLINUX/sources
mkdir -vp $MYLINUX/tools
mkdir -vp $MYLINUX/logs
mkdir -vp $MYLINUX/backups

 

作成した各ディレクトリの用途は以下の通りです。

ディレクトリ 用途
$MYLINUX/sources

ソースファイルの置き場所です。 ソースファイルの展開およびビルドもこのディレクトリ以下で行います。

$MYLINUX/tools

一時的な開発ツールをインストールするためのディレクトリです。 新システムの構築を終えた時点で不要となります。

$MYLINUX/logs

configureの結果およびテストの結果を保存します。 テストとは、ビルドする各ソフトウェアの一部が持っている自己テスト機能のことです。

$MYLINUX/backups

1CD Linux用のパーティションのバックアップの保存先となるディレクトリです。

バックアップは、作業漏れや作業ミスに備えてのことです。 作業漏れや作業ミスがあった場合でも最初からやり直すことにはならないよう、バックアップを取りながら作業していきます。

次に、シンボリックリンクの作成を行います。


ln -vsf $MYLINUX/tools /tools

 

このシンボリックリンクによって、$MYLINUX/tools つまり /mylinux/tools を /tools として参照できるようになります。

そうすることの目的は、チェンジルートしていない状態・チェンジルートしている状態のどちらでも、同じパスで一時的な開発ツールを利用できるようにすることです

一時的な開発ツールは $MYLINUX/tools つまり /mylinux/tools を基準ディレクトリとしてインストールします。 つまり、実行ファイルは /mylinux/tools/bin ディレクトリに置かれます。

その実行ファイルを /mylinux/tools/bin ディレクトリにあるものとして利用してしまうと、チェンジルート中は参照できなくなってしまいます。 なぜなら、チェンジルート中は $MYLINUX つまり /mylinux がルートディレクトリとなり、実行ファイルは /tools/bin に存在することになるからです。

しかし、シンボリックリンクによって、$MYLINUX/tools つまり /mylinux/tools を /tools として参照できるようになれば、チェンジルートしていない状態・チェンジルートしている状態のどちらでも、/tools/bin というパスで実行ファイルを参照することができます。

ソースファイルとパッチファイルの入手

続いて、ソースファイルとパッチファイルを入手します。 まずは、ソースファイルを入手します。


cd $MYLINUX/sources
wget 'http://ftp.gnu.org/gnu/binutils/binutils-2.25.tar.bz2'
wget 'http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2'
wget 'http://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.xz'
wget 'http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.2.tar.xz'
wget 'http://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz'
wget 'http://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.4.tar.xz'
wget 'http://ftp.gnu.org/gnu/glibc/glibc-2.21.tar.xz'
wget 'http://downloads.sourceforge.net/project/tcl/Tcl/8.6.4/tcl8.6.4-src.tar.gz'
wget 'http://downloads.sourceforge.net/project/expect/Expect/5.45/expect5.45.tar.gz'
wget 'http://ftp.gnu.org/gnu/dejagnu/dejagnu-1.5.3.tar.gz'
wget 'http://downloads.sourceforge.net/project/check/check/0.9.14/check-0.9.14.tar.gz'
wget 'http://ftp.gnu.org/gnu//ncurses/ncurses-5.9.tar.gz'
wget 'http://ftp.gnu.org/gnu/bash/bash-4.3.30.tar.gz'
wget 'http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz'
wget 'http://ftp.gnu.org/gnu/coreutils/coreutils-8.23.tar.xz'
wget 'http://ftp.gnu.org/gnu/diffutils/diffutils-3.3.tar.xz'
wget 'ftp://ftp.astron.com/pub/file/file-5.22.tar.gz'
wget 'http://ftp.gnu.org/gnu/findutils/findutils-4.4.2.tar.gz'
wget 'http://ftp.gnu.org/gnu/gawk/gawk-4.1.3.tar.xz'
wget 'http://ftp.gnu.org/gnu/gettext/gettext-0.19.4.tar.xz'
wget 'http://ftp.gnu.org/gnu/grep/grep-2.21.tar.xz'
wget 'http://ftp.gnu.org/gnu/gzip/gzip-1.6.tar.xz'
wget 'http://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.xz'
wget 'http://ftp.gnu.org/gnu/make/make-4.1.tar.bz2'
wget 'http://ftp.gnu.org/gnu/patch/patch-2.7.5.tar.xz'
wget 'http://www.cpan.org/src/5.0/perl-5.20.2.tar.bz2'
wget 'http://ftp.gnu.org/gnu/sed/sed-4.2.2.tar.bz2'
wget 'http://ftp.gnu.org/gnu/tar/tar-1.28.tar.xz'
wget 'http://ftp.gnu.org/gnu/texinfo/texinfo-5.2.tar.xz'
wget 'https://www.kernel.org/pub/linux/utils/util-linux/v2.26/util-linux-2.26.2.tar.xz'
wget 'http://tukaani.org/xz/xz-5.2.1.tar.xz'
wget 'http://www.kernel.org/pub/linux/docs/man-pages/man-pages-4.00.tar.xz'
wget 'http://www.iana.org/time-zones/repository/releases/tzdata2015e.tar.gz'
wget 'http://zlib.net/zlib-1.2.8.tar.gz'
wget 'http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz'
wget 'http://download.savannah.gnu.org/releases/attr/attr-2.4.47.src.tar.gz'
wget 'http://public.p-knowledge.co.jp/Savannah-nongnu-mirror//acl/acl-2.2.52.src.tar.gz'
wget 'https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.24.tar.xz'
wget 'http://pkg-shadow.alioth.debian.org/releases/shadow-4.2.1.tar.xz'
wget 'http://downloads.sourceforge.net/project/psmisc/psmisc/psmisc-22.21.tar.gz'
wget 'http://sourceforge.net/projects/procps-ng/files/Production/procps-ng-3.3.10.tar.xz'
wget 'https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.42.13/e2fsprogs-1.42.13.tar.xz'
wget 'http://anduin.linuxfromscratch.org/sources/LFS/lfs-packages/conglomeration/iana-etc/iana-etc-2.30.tar.bz2'
wget 'http://prdownloads.sourceforge.net/flex/flex-2.5.39.tar.xz'
wget 'http://ftp.gnu.org/gnu/bison/bison-3.0.4.tar.xz'
wget 'http://ftp.gnu.org/gnu/readline/readline-6.3.tar.gz'
wget 'http://alpha.gnu.org/gnu/bc/bc-1.06.95.tar.bz2'
wget 'http://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.xz'
wget 'http://ftp.gnu.org/gnu/gdbm/gdbm-1.11.tar.gz'
wget 'http://prdownloads.sourceforge.net/expat/expat-2.1.0.tar.gz'
wget 'http://ftp.gnu.org/gnu/inetutils/inetutils-1.9.2.tar.xz'
wget 'http://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-2.44.tar.gz'
wget 'http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz'
wget 'http://ftp.gnu.org/gnu/automake/automake-1.15.tar.xz'
wget 'http://launchpad.net/intltool/trunk/0.50.2/+download/intltool-0.50.2.tar.gz'
wget 'http://ftp.gnu.org/gnu/gperf/gperf-3.0.4.tar.gz'
wget 'http://ftp.gnu.org/gnu/groff/groff-1.22.3.tar.gz'
wget 'ftp://alpha.gnu.org/gnu/grub/grub-2.02~beta2.tar.xz'
wget 'http://www.greenwoodsoftware.com/less/less-458.tar.gz'
wget 'https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-3.19.0.tar.xz'
wget 'http://roy.marples.name/downloads/dhcpcd/dhcpcd-6.9.3.tar.xz'
wget 'ftp://ftp.isc.org/isc/bind9/9.10.4/bind-9.10.4.tar.gz'
wget 'https://www.kernel.org/pub/linux/utils/kbd/kbd-2.0.2.tar.xz'
wget 'https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-19.tar.xz'
wget 'http://download.savannah.gnu.org/releases/libpipeline/libpipeline-1.4.1.tar.gz'
wget 'http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.1.tar.gz'
wget 'http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.88dsf.tar.bz2'
wget 'http://dev.gentoo.org/~blueness/eudev/eudev-2.1.1.tar.gz'
wget 'http://download.savannah.gnu.org/releases/man-db/man-db-2.7.1.tar.xz'
wget 'ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2'
wget 'http://ftp.gnu.org/pub/gnu/cpio/cpio-2.11.tar.bz2'

 
  
全部で71ファイルあります。

さらに、パッチファイルを入手します。


cd $MYLINUX/sources
wget 'http://www.linuxfromscratch.org/patches/lfs/7.7/bash-4.3.30-upstream_fixes-1.patch'
wget 'http://www.linuxfromscratch.org/patches/lfs/7.7/coreutils-8.23-i18n-1.patch'
wget 'http://www.linuxfromscratch.org/patches/lfs/7.7/readline-6.3-upstream_fixes-3.patch'
wget 'http://www.linuxfromscratch.org/patches/lfs/7.7/bc-1.06.95-memory_leak-1.patch'
wget 'http://www.linuxfromscratch.org/patches/lfs/7.7/kbd-2.0.2-backspace-1.patch'
wget 'http://www.linuxfromscratch.org/patches/lfs/7.7/sysvinit-2.88dsf-consolidated-1.patch'

 
  
全部で6ファイルあります。
  

シェルスクリプトの作成

最後に、開発を補助するための独自のシェルスクリプトを作成します

genprevlist.sh

まずは、genprevlist.shを作成します。 各種ソフトウェアをビルドする前に実行するシェルスクリプトです。


cat > /$MYLINUX/sources/genprevlist.sh << "EOF"
export LANG=C
export LC_ALL=C

find / -type d \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.prev.d

find / -type f \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.prev.f

find / -type l \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.prev.l

find / -type c \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.prev.c

find / -type b \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.prev.b
EOF
chmod 0755 /$MYLINUX/sources/genprevlist.sh

 

このシェルスクリプトは、1CD Linux用のパーティションに含まれるディレクトリ・ファイル・シンボリックリンク・キャラクタデバイス・ブロックデバイスの一覧を作成します。

genpostlist.sh

次に、genpostlist.shを作成します。 ビルドした各種ソフトウェアをインストールした直後に実行するシェルスクリプトです。


cat > /$MYLINUX/sources/genpostlist.sh << "EOF"
export LANG=C
export LC_ALL=C

find / -type d \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.post.d

find / -type f \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.post.f

find / -type l \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.post.l

find / -type c \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.post.c

find / -type b \
  | sed \
    -e '/^\/sources/d' \
    -e '/^\/tools/d' \
    -e '/^\/logs/d' \
    -e '/^\/proc/d' \
    -e '/^\/sys/d' \
    -e '/^\/lost+found/d' \
  | sort \
  > /logs/.list.post.b
EOF
chmod 0755 /$MYLINUX/sources/genpostlist.sh

 

このシェルスクリプトも同じく、1CD Linux用のパーティションに含まれるディレクトリ・ファイル・シンボリックリンク・キャラクタデバイス・ブロックデバイスの一覧を作成します。 ただし、genprevlist.shとは別のファイル名で一覧を出力します

gendifflist.sh

最後に、gendifflist.shを作成します。 genpostlist.shを実行した後に、続けて実行するシェルスクリプトです。


cat > /$MYLINUX/sources/gendifflist.sh << "EOF"
export LANG=C
export LC_ALL=C

rm -vf /logs/list.$1
echo '@d@' >> /logs/list.$1
comm -23 /logs/.list.post.d /logs/.list.prev.d >> /logs/list.$1
echo '@f@' >> /logs/list.$1
comm -23 /logs/.list.post.f /logs/.list.prev.f >> /logs/list.$1
echo '@l@' >> /logs/list.$1
comm -23 /logs/.list.post.l /logs/.list.prev.l >> /logs/list.$1
echo '@c@' >> /logs/list.$1
comm -23 /logs/.list.post.c /logs/.list.prev.c >> /logs/list.$1
echo '@b@' >> /logs/list.$1
comm -23 /logs/.list.post.b /logs/.list.prev.b >> /logs/list.$1

echo ----------------
echo $((`wc -l /logs/list.$1 | awk '{printf "%d", $1}'`-5)) $1
echo ----------------

rm -f .list.prev.d
rm -f .list.prev.f
rm -f .list.prev.l
rm -f .list.prev.c
rm -f .list.prev.b

rm -f .list.post.d
rm -f .list.post.f
rm -f .list.post.l
rm -f .list.post.c
rm -f .list.post.b
EOF
chmod 0755 /$MYLINUX/sources/gendifflist.sh

 

このシェルスクリプトは、ビルドした各種ソフトウェアのインストールによって作成されたディレクトリ・ファイル・シンボリックリンク・キャラクタデバイス・ブロックデバイスの一覧を生成します。

  
genprevlist.shが作成した一覧とgenpostlist.shが作成した一覧を比較することで差分を抽出しています。
  
このシェルスクリプトが生成した一覧は、ファイルとソフトウェアの関連を調べるために使用します。 あるファイルが、どのソフトウェアによってインストールされたのかが簡単にわかります。
  

バックアップ

1CD Linux用のパーティションをバックアップしておきます。


cd $MYLINUX
tar cvfj ./backups/mylinux.backup-01.tar.bz2 . --exclude=backups --exclude=sources --exclude=lost+found

 

現状では、ビルド作業は行っていません。 ビルドを最初からやり直さなければならなくなったら、このバックアップから戻して作業を行います。

メニュー