¾÷µ¥ÀÌÆ®¸¦ ¹Ý¿µÇÏ·Á¸é Á¦´ë·Î ÀÛµ¿ÇÏ´Â rpm ÀÌ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÏ°í ¸®´ª½º ¸Ó½Å¿¡¼ ¹èÆ÷ÆÇ µð·ºÅ丮¿¡ ¾²±â ±ÇÇÑÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ¾Æ·¡¿Í °°Àº ¼¼ ´Ü°è¸¦ °ÅÃÄ¾ß ÇÑ´Ù.
¸¸¾à updates
µð·ºÅ丮ÀÇ ¹Ì·¯¸µÀ» À¯ÁöÇϰí ÀÖ´Ù¸é ÀÌ·¯ÇÑ ´Ü°è¸¦
°ÅÃļ ¾ðÁ¦µçÁö ÇöÀçÀÇ ¾÷µ¥ÀÌÆ®¸¦ Æ÷ÇÔÇÏ´Â CD¸¦ ¸¸µé ¼ö ÀÖ´Ù.
¼³Ä¡°úÁ¤ Áß¿¡ ¾î¶² ÇÁ·Î±×·¥µéÀº CD·ÎºÎÅÍ Á÷Á¢ ½ÇÇàµÈ´Ù. ºÒÇàÇϰԵµ FTP
ÇÁ·Î±×·¥Àº º¹»çµÇ´Â ÆÄÀϰú µð·ºÅ丮ÀÇ º¸È£ ¸ðµå¸¦ ¾ðÁ¦³ª º¸Á¸ÇÏÁö´Â ¾Ê´Â´Ù.
µû¶ó¼ µð·ºÅ丮¸¦ CD¿¡ ±Á±â Àü¿¡ ÇÁ·Î±×·¥, ½© ½ºÅ©¸³Æ®, °øÀ¯ ¶óÀ̺귯¸®¿¡
½ÇÇà ÆÛ¹Ì¼ÇÀÌ ÁÖ¾îÁ® ÀÖ´ÂÁö¸¦ È®ÀÎÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù. ±×·¸°Ô ÇÏ·Á¸é
¾Æ·¡ÀÇ updatePerm
½ºÅ©¸³Æ®¸¦ ¹èÆ÷ÆÇÀÇ ·ÎÄà º¹»çº»¿¡ ½ÇÇà½ÃŰ¸é µÈ´Ù.
#!/bin/bash RHVERSION=5.1 LIST=/tmp/er3hd3w25 CDDIR=/jaz/redhat-${RHVERSION} # Find all directories, and make sure they have +x permission find $CDDIR -type d -exec chmod -c 755 {} \; # Find all files that are executables, shell or perl scripts find $CDDIR -type f | file -f - | grep -v RPM \ | egrep -i 'executable|perl|bourne|shell' | cut -f1 -d: > $LIST # Find shared libraries find $CDDIR -name \*.so >> $LIST # Make them executable while read file do if [ ! -x $file ] ; then chmod -c 755 $file fi done < $LIST /bin/rm $LIST exit 0
updateCD
¶ó°í ºÒ¸®´Â ¾Æ·¡ÀǽºÅ©¸³Æ®´Â updates µð·ºÅ丮·ÎºÎÅÍ ¸ðµç ÆÄÀÏÀ»
RPMS µð·ºÅ丮·Î ¿Å±ä´Ù. ÀÌ ½ºÅ©¸³Æ®´Â updates µð·ºÅ丮¿¡¼ ¾î¶² ÆÄÀÏÀÌ ´õ
ÃÖ±ÙÀÇ °ÍÀÎÁö¸¦ ÆÇº°Çϱâ À§ÇØ ¸î °³ÀÇ ÀçÄ¡ÀÖ´Â rpm Æ®¸¯À» »ç¿ëÇÑ´Ù. ¿À·¡ µÈ
ÆÐŰÁöµéÀº ${OLD}
µð·ºÅ丮·Î ¿Å°ÜÁø´Ù.
#! /bin/bash # This script updates rpms in a RedHat distribution found in $RPMDIR. # The old rpms will be placed in $OLDDIR. # The new rpms should be located in $UPDDIR. # The architechture is $ARCH. RHVERSION=5.1 ARCH=i386 CDDIR=/jaz/redhat-${RHVERSION} RPMDIR=${CDDIR}/${ARCH}/RedHat/RPMS UPDDIR=${CDDIR}/updates/${ARCH} OLDDIR=${CDDIR}/old if [ ! -d $OLDDIR ] ; then echo making directory $OLDDIR mkdir $OLDDIR fi allow_null_glob_expansion=1 for rpm in ${UPDDIR}/*.rpm ; do NAME=`rpm --queryformat "%{NAME}" -qp $rpm` unset OLDNAME for oldrpm in ${RPMDIR}/${NAME}*.rpm ; do if [ `rpm --queryformat "%{NAME}" -qp $oldrpm` = "$NAME" ]; then OLDNAME=$oldrpm; break fi done if [ -z "$OLDNAME" ]; then echo $NAME is new cp -pv $rpm $RPMDIR else if [ `basename $rpm` != `basename $OLDNAME` ]; then mv $OLDNAME $OLDDIR cp -pv $rpm $RPMDIR fi fi done # Copy new boot image files to the right place... for newfile in ${UPDDIR}/images/* ; do file=${CDDIR}$/${ARCH}/images/$(basename ${newfile}) if [ $newfile -nt $file ] ; then cp -pv $newfile $file fi done exit 0
CD·ÎºÎÅÍ ¼³Ä¡ÇÒ ¶§ CD¿¡ ÀÖ´Â ¼³Ä¡ ÇÁ·Î±×·¥Àº ¾î¶² RPM ÆÐŰÁöµéÀÌ
»ç¿ë°¡´ÉÇÑÁö¸¦ ±â¼úÇÏ´Â RedHat/base/hdlist
ÆÄÀÏ¿¡
ÀÇÁ¸ÇÑ´Ù. hdlist
ÆÄÀÏÀº misc/src/install/genhdlist
·Î »ý¼ºÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ÇϳªÀÇ Àμö·Î ¹èÆ÷ÆÇÀÇ ·çÆ® µð·ºÅ丮ÀÇ
À̸§¸¸À» ³Ñ°ÜÁÖ¸é¼ ½ÇÇàÇØ¾ß ÇÑ´Ù. À̰ÍÀÌ ±× ÇÁ·Î±×·¥À» È£ÃâÇÏ´Â
updateHdlist
½ºÅ©¸³Æ®ÀÌ´Ù.
#!/bin/bash RHVERSION=5.1 ARCH=i386 echo generating hdlist... CDDIR=/jaz/redhat-${RHVERSION} GENHDDIR=${CDDIR}/${ARCH}/misc/src/install chmod u+x ${GENHDDIR}/genhdlist chmod 644 ${CDDIR}/${ARCH}/RedHat/base/hdlist ${GENHDDIR}/genhdlist ${CDDIR}/${ARCH} || echo "*** GENHDLIST FAILED ***" exit 0
NOTE: RedHat/RPMS
µð·ºÅ丮¿¡ ¾÷µ¥ÀÌÆ®¸¦ ¹Ý¿µÇÑ ÈÄ¿¡´Â ´ç½ÅÀÇ
¹èÆ÷ÆÇ º¹»çº»Àº ´õ ÀÌ»ó ·¹µåÇÞ ¹èÆ÷ÆÇ »çÀÌÆ®ÀÇ ¹Ì·¯°¡ ¾Æ´Ï´Ù. »ç½Ç, ±×°ÍÀº
´õ¿í ÃÖ½ÅÀÇ °ÍÀÌ´Ù! µû¶ó¼ ¹èÆ÷ÆÇÀ» ¹Ì·¯ÇÏ·Á°í ½ÃµµÇÑ´Ù¸é ¾÷µ¥ÀÌÆ®µÈ RPMµéÀÇ
ÀÌÀü ¹öÀüµéÀÌ ´Ù½Ã ´Ù¿î·Îµå µÉ °ÍÀ̸ç, ¾÷µ¥ÀÌÆ®µéÀº Áö¿öÁú °ÍÀÌ´Ù.
·¹µåÇÞ 5.2 ÀÌÀüºÎÅÍ ¹èÆ÷µÈ genhdlist
´Â RedHat/RPMS
µð·ºÅ丮¿¡ RPM ÆÄÀÏÀÌ ¾Æ´Ñ ÆÄÀÏÀÌ ÀÖÀ¸¸é Ãæµ¹À» ÀÏÀ¸Å²´Ù. 5.2 ¹èÆ÷ÆÇ¿¡´Â
ls-lR
°ú ls-lR.gz
¶ó´Â RPM ÀÌ ¾Æ´Ñ ÆÄÀÏÀÌ Àֱ⠶§¹®¿¡ ¹®Á¦¸¦
ÀÏÀ¸Å°°Ô µÈ´Ù. µû¶ó¼ RPM ÀÌ ¾Æ´Ñ ÆÄÀÏÀ» ¸ðµÎ ±× µð·ºÅ丮·ÎºÎÅÍ Á¦°ÅÇØ¾ß
ÇÑ´Ù. ±× ´ë½Å¿¡ ´ÙÀ½ÀÇ ÆÐÄ¡¸¦ misc/src/install/genhdlist.c
¿¡ Àû¿ëÇÏ°í »õ·Î ÄÄÆÄÀÏÇØµµ µÈ´Ù. ¾Æ·¡ÀÇ ÆÐÄ¡´Â genhdlist
°¡ RPMÀÌ
¾Æ´Ñ ÆÄÀÏÀ» ¹«½ÃÇϵµ·Ï ¸¸µç´Ù.
*** genhdlist.c.orig Fri Nov 27 12:08:13 1998 --- genhdlist.c Fri Nov 27 12:08:20 1998 *************** *** 12,23 **** --- 12,26 ---- #define FILENAME_TAG 1000000 + /* Not used apparently... + int tags[] = { RPMTAG_NAME, RPMTAG_VERSION, RPMTAG_RELEASE, RPMTAG_SERIAL, RPMTAG_FILENAMES, RPMTAG_FILESIZES, RPMTAG_GROUP, RPMTAG_REQUIREFLAGS, RPMTAG_REQUIRENAME, RPMTAG_REQUIREVERSION, RPMTAG_DESCRIPTION, RPMTAG_SUMMARY, RPMTAG_PROVIDES, RPMTAG_SIZE, RPMTAG_OBSOLETES }; int numTags = sizeof(tags) / sizeof(int); + */ int main(int argc, char ** argv) { char buf[300]; *************** *** 26,34 **** --- 29,39 ---- struct dirent * ent; int fd, rc, isSource; Header h; + /* not used int count, type; int i; void * ptr; + */ if (argc != 2) { fprintf(stderr, "usage: genhdlist <dir>\n"); *************** *** 74,79 **** --- 79,85 ---- rc = rpmReadPackageHeader(fd, , , NULL, NULL); + if (!rc) { headerRemoveEntry(h, RPMTAG_POSTIN); headerRemoveEntry(h, RPMTAG_POSTUN); headerRemoveEntry(h, RPMTAG_PREIN); *************** *** 110,115 **** --- 116,122 ---- headerWrite(outfd, h, HEADER_MAGIC_YES); headerFree(h); close(fd); + } } errno = 0;