--- admin/PlamoBuild.template.common.without_comment 2016-06-15 20:51:13.000000000 +0900 +++ plamo/00_base/old/glibc-20160314/PlamoBuild.glibc-2.20 2016-03-14 16:38:54.000000000 +0900 @@ -1,15 +1,24 @@ #!/bin/sh ###################################################################### -url="" -pkgbase= -vers= +url="http://ftp.gnu.org/gnu/glibc/glibc-2.20.tar.xz + http://www.linuxfromscratch.org/patches/downloads/glibc/glibc-2.19-fhs-1.patch + http://ftp.su.se/pub/mirrors/lunar-linux.org/lunar/patches/glibc-2.20-do_ftell_wide-memleak.patch + http://ftp.su.se/pub/mirrors/lunar-linux.org/lunar/patches/glibc-2.20-getifaddrs_internal-segfault.patch + http://ftp.su.se/pub/mirrors/lunar-linux.org/lunar/patches/glibc-2.20-linux-3.16-additions.patch + http://slackware.cs.utah.edu/pub/slackware/slackware-current/source/l/glibc/glibc-c-utf8-locale.patch.gz + https://github.com/plamolinux/Plamo-src/raw/master/plamo/00_base/glibc/CVE-2015-7547.patch + https://github.com/plamolinux/Plamo-src/raw/master/plamo/00_base/glibc/CVE-2015-8776.patch + https://github.com/plamolinux/Plamo-src/raw/master/plamo/00_base/glibc/CVE-2015-8778.patch + https://github.com/plamolinux/Plamo-src/raw/master/plamo/00_base/glibc/CVE-2015-8779.patch" +pkgbase=glibc +vers=2.20 arch=`uname -m` -build=P1 +build=P3 src=$pkgbase-$vers -patchfiles="" -OPT_CONFIG="" -DOCS="README" +OPT_CONFIG="--enable-kernel=2.6.32 --enable-obsolete-rpc" +DOCS="BUGS CONFORMANCE COPYING* ChangeLog* INSTALL LICENSES NEWS + PROJECTS README" ###################################################################### fscheck() { @@ -163,6 +172,7 @@ W=`pwd` for i in `seq 0 $((${#src[@]} - 1))` ; do S[$i]=$W/${src[$i]} ; B[$i]=$W/build`test ${#src[@]} -eq 1 || echo $i` + S2[$i]=$W/source`test ${#src[@]} -eq 1 || echo $i` done P=$W/work ; C=$W/pivot infodir=$P/usr/share/info @@ -186,65 +196,67 @@ fi if [ $opt_download -eq 1 ] ; then for i in $url ; do - if [ ! -f ${i##*/} ] ; then - wget $i ; j=${i%.*} - for sig in asc sig{,n} {sha{256,1},md5}{,sum} ; do - if wget --spider $i.$sig ; then wget $i.$sig ; break ; fi - if wget --spider $j.$sig ; then - case ${i##*.} in - gz) gunzip -c ${i##*/} > ${j##*/} ;; - bz2) bunzip2 -c ${i##*/} > ${j##*/} ;; - xz) unxz -c ${i##*/} > ${j##*/} ;; - esac - touch -r ${i##*/} ${j##*/} ; i=$j ; wget $i.$sig ; break - fi - done - if [ -f ${i##*/}.$sig ] ; then - case $sig in - asc|sig|sign) gpg2 --verify ${i##*/}.$sig ;; - sha256|sha1|md5) ${sig}sum -c ${i##*/}.$sig ;; - *) $sig -c ${i##*/}.$sig ;; - esac - if [ $? -ne 0 ] ; then echo "archive verify failed" ; exit ; fi - fi - fi + if [ ! -f ${i##*/} ] ; then wget $i ; fi done for i in $url ; do case ${i##*.} in tar) tar xvpf ${i##*/} ;; - gz|tgz) tar xvpzf ${i##*/} ;; - bz2|tbz) tar xvpjf ${i##*/} ;; - xz|txz) tar xvpJf ${i##*/} ;; + gz) tar xvpzf ${i##*/} ;; + bz2) tar xvpjf ${i##*/} ;; + xz) tar xvpJf ${i##*/} ;; esac done fi if [ $opt_config -eq 1 ] ; then for i in `seq 0 $((${#B[@]} - 1))` ; do - if [ -d ${B[$i]} ] ; then rm -rf ${B[$i]} ; fi ; cp -a ${S[$i]} ${B[$i]} - done - for i in `seq 0 $((${#B[@]} - 1))` ; do - cd ${B[$i]} - for j in ${patchfiles[$i]} ; do - case ${j##*.} in - gz) gunzip -c $W/$j | patch -Np1 -i - ;; - bz2) bunzip2 -c $W/j | patch -Np1 -i - ;; - xz) unxz -c $W/$j | patch -Np1 -i - ;; - *) patch -Np1 -i $W/$j ;; - esac - done + if [ -d ${S2[$i]} ] ; then rm -rf ${S2[$i]} ; fi ; cp -a ${S[$i]} ${S2[$i]} + if [ -d ${B[$i]} ] ; then rm -rf ${B[$i]} ; fi ; mkdir ${B[$i]} done + cd $S2 + patch -Np1 -i $W/glibc-2.19-fhs-1.patch + patch -Np1 -i $W/glibc-2.20-do_ftell_wide-memleak.patch + patch -Np1 -i $W/glibc-2.20-getifaddrs_internal-segfault.patch + patch -Np1 -i $W/glibc-2.20-linux-3.16-additions.patch + gunzip -c $W/glibc-c-utf8-locale.patch.gz | patch -Np1 -i - + patch -Np1 -i $W/CVE-2015-7547.patch + patch -Np1 -i $W/CVE-2015-8776.patch + patch -Np1 -i $W/CVE-2015-8778.patch + patch -Np1 -i $W/CVE-2015-8779.patch + cp -p localedata/Makefile{,.orig} + cat <<- "EOF" | patch localedata/Makefile + 235a236 + > --no-archive \ + EOF for i in `seq 0 $((${#B[@]} - 1))` ; do - cd ${B[$i]} + cd ${S2[$i]} if [ -f Makefile ] ; then make clean fi if [ -f config.log ] ; then rm -rf config.cache config.log fi - if [ -x configure ] ; then - ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ - --libdir='${exec_prefix}'/$libdir --infodir='${prefix}'/share/info \ - --mandir='${prefix}'/share/man ${OPT_CONFIG[$i]} + cd ${B[$i]} + case $arch in + i686) + cat <<- "EOF" > configparms ;; + CFLAGS += -march=i486 -mtune=native -O3 -pipe + EOF + x86_64) + cat <<- "EOF" > configparms ;; + slibdir=/lib64 + CFLAGS += -march=x86-64 -mtune=generic -O3 -pipe + EOF + armv7l) + cat <<- "EOF" > configparms ;; + CFLAGS += -march=armv7-a -mtune=native -O3 -pipe + EOF + esac + if [ -x ${S2[$i]}/configure ] ; then + ${S2[$i]}/configure --prefix=/usr --libdir='${exec_prefix}'/$libdir \ + --infodir='${prefix}'/share/info \ + --mandir='${prefix}'/share/man ${OPT_CONFIG[$i]} \ + --libexecdir=/usr/$libdir/glibc \ + --build=$arch-pc-linux --target=$arch-pc-linux fi done fi @@ -270,13 +282,66 @@ cd ${B[$i]} if [ -f Makefile ] ; then make install DESTDIR=$P + ln -s $P/usr/share/locale $P/usr/$libdir + make localedata/install-locales DESTDIR=$P fi done + find $P/usr/$libdir -maxdepth 1 ! -type d -exec rm {} \; + mv $P/usr/$libdir/{gconv,glibc,audit} $C + mv $C/{gconv,glibc,audit} $P/usr/$libdir + ln -sf /usr/share/locale $P/usr/$libdir + ln -s ja_JP.eucJP $P/usr/share/locale/ja_JP + mv $P/usr/share/locale/{ja,ja_JP.eucJP} + ln -s ja_JP.eucJP $P/usr/share/locale/ja + gunzip $P/usr/share/i18n/charmaps/EUC-JP.gz + localedef -f $P/usr/share/i18n/charmaps/EUC-JP \ + -i $P/usr/share/i18n/locales/ja_JP \ + $P/usr/share/locale/ja_JP.eucJP + gzip $P/usr/share/i18n/charmaps/EUC-JP + install -d $P/usr/share/locale/ja_JP.UTF-8 + gunzip $P/usr/share/i18n/charmaps/UTF-8.gz + localedef -f $P/usr/share/i18n/charmaps/UTF-8 \ + -i $P/usr/share/i18n/locales/ja_JP \ + $P/usr/share/locale/ja_JP.UTF-8 + gzip $P/usr/share/i18n/charmaps/UTF-8 + cat <<- EOF > $P/etc/ld.so.conf.new + /usr/local/$libdir + /opt/kde/$libdir + /usr/$libdir/sasl2 + /usr/$libdir/pstoedit + /usr/heimdal/$libdir + /usr/$libdir/xulrunner + /opt/mysql/$libdir + /opt/pgsql/$libdir + EOF + cat <<- "EOF" > $P/etc/nsswitch.conf.new + # /etc/nsswitch.conf + # + # Name Service Switch configuration file. + # + + passwd: files db nis + shadow: files + group: files db nis + + hosts: files nisplus nis dns + networks: files nisplus + + ethers: files db nisplus + protocols: files db nisplus + rpc: files db nisplus + services: files db nisplus + autofs: files + EOF touch $W/i.et cd $W find $P ! -type l -newer i.st ! -newer i.et \ -exec touch -t `date '+%m%d0900'` {} \; compress + strip_libdir $P/usr/$libdir/gconv + strip_bindir $P/usr/$libdir/glibc/getconf + strip_libdir $P/usr/$libdir/audit + touch -t `date '+%m%d0900'` $P/usr/$libdir/{gconv,glibc/getconf,audit} for i in `seq 0 $((${#DOCS[@]} - 1))` ; do for j in ${DOCS[$i]} ; do for k in ${S[$i]}/$j ; do @@ -295,9 +360,55 @@ ( cd $docdir ; find ${src[$i]} -type d -exec touch -r $W/{} {} \; ) done convert - tar cvpf $pkg.tar -C $P `cd $P ; find usr/bin | tail -n+2` - tar rvpf $pkg.tar -C $P `cd $P ; find usr/share/man/man1 | tail -n+2` + prune_symlink $P/usr/share/locale + touch -t `date '+%m%d0900'` $P/usr/share/locale + cat <<- EOF >> $P/install/doinst.sh + #%% begin initialize $pkg + EOF + cat <<- "EOF" >> $P/install/doinst.sh + glibc_config() { + if [ -f /etc/$1.conf ] ; then + rm /etc/$1.conf.new + else + mv /etc/$1.conf.new /tmp + mv /tmp/$1.conf.new /etc/$1.conf + fi + } + + echo "glibc パッケージの初期化中" + # 既存の ld.so.conf が無ければ,新しく ld.so.conf.new を + # ld.so.conf とするが,あればそのままにしておく. + glibc_config ld.so + ldconfig + + # 既存の nsswitch.conf が無ければ,新しく nsswitch.conf.new を + # nsswitch.conf とするが,あればそのままにしておく. + glibc_config nsswitch + + echo "glibc タイムゾーン設定中" + # 既存の localtime があればそのまま,無ければ JST で作る. + if [ ! -f /etc/localtime ] ; then + TIMEZONE="Japan" + ln -sf posix/$TIMEZONE /usr/share/zoneinfo/localtime + cp -p /usr/share/zoneinfo/localtime /etc/localtime + fi + + echo "glibc パッケージの初期化完了" + #%% end + EOF + touch -t `date '+%m%d0900'` $P/install/doinst.sh + tar cvpf $pkg.tar -C $P `cd $P ; find sbin | tail -n+2` + tar rvpf $pkg.tar -C $P `cd $P ; find usr/sbin | tail -n+2` + tar rvpf $pkg.tar -C $P `cd $P ; find usr/bin | tail -n+2` + tar rvpf $pkg.tar -C $P `cd $P ; find $libdir | tail -n+2` + tar rvpf $pkg.tar -C $P `cd $P ; find usr/$libdir -maxdepth 1 | tail -n+2` +# tar rvpf $pkg.tar -C $P `cd $P ; find usr/include -maxdepth 1 | tail -n+2` + tar rvpf $pkg.tar -C $P usr/share/{i18n,locale} +# tar rvpf $pkg.tar -C $P `cd $P ; find usr/share/info | tail -n+2` + tar rvpf $pkg.tar -C $P `cd $P ; find etc | tail -n+2` + tar rvpf $pkg.tar -C $P var/lib/nss_db tar rvpf $pkg.tar -C $P usr/share/doc/$src + tar rvpf $pkg.tar -C $P install/doinst.sh touch -t `date '+%m%d0900'` $pkg.tar ; xz $pkg.tar ; touch $pkg.tar.xz mv $pkg.tar.xz $pkg.txz read -p "Do you want to keep work files? [y/N] " ans