From owner-freebsd-questions Fri Jan 5 3:41:42 2001 From owner-freebsd-questions@FreeBSD.ORG Fri Jan 5 03:41:33 2001 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from filer.fr.clara.net (filer.fr.clara.net [212.43.194.74]) by hub.freebsd.org (Postfix) with ESMTP id 5A61837B400 for ; Fri, 5 Jan 2001 03:41:32 -0800 (PST) Received: from mail.freesurf.fr (mail.freesurf.fr [212.43.206.50]) by filer.fr.clara.net (Postfix) with ESMTP id 99CB4449A for ; Fri, 5 Jan 2001 12:40:34 +0100 (CET) Received: by mail.freesurf.fr (Postfix, from userid 5000) id 12DF19B02; Fri, 5 Jan 2001 12:40:24 +0100 (CET) From: fpassera@freesurf.fr To: freebsd-questions@FreeBSD.ORG Subject: An upgrade from FreeBSD-4.0-RELEASE to FreeBSD-4.2-RELEASE Date: Fri, 05 Jan 2001 11:40:23 GMT Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Sender: fpassera@freesurf.fr Message-Id: <20010105114024.12DF19B02@mail.freesurf.fr> Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Hello, I have just finished my first upgrade on FreeBSD and wish to share this experience as this is not a trivial task (from my point of view). The procedure used comes from the Handbook but is not applied to upgrade to -STABLE but to -RELEASE. The upgrade takes about 1,5 day : 1/2 day to download the source, 1/2 day to compile the sources and 1/2 day to identify and check manually which files must be overwritten / unmodified / merged. May be there is a faster way to upgrade from one RELEASE to another RELEASE (download time appart). Any comment would be appreciated. Here are the steps : Step 1) Upgrade the source I used CVSup to get the source from Internet. As I did that for the 1st time, I had to download all the files, which lasted about 5 hours on a 64kpbs link. I have never used CVSup client before and it is simple to configure for a basic usage. I have appreciated the test mode. My supfile is : *default host=cvsup.de.FreeBSD.org *default prefix=/usr *default base=/usr/local/etc/cvsup *default release=cvs delete use-rel-suffix compress src-all tag=RELENG_4_2_0_RELEASE doc-all tag=RELENG_4_2_0_RELEASE Step 2) Check /etc/make.conf Step 3) Check /etc/group against /usr/src/etc/group # diff /etc/group /usr/src/etc/group Step 4) Drop to single user mode # shutdown now Step 5) Remove /usr/obj #cd /usr/obj #chflags -R noschg #rm -rf * Step 6) Recompile the source This step lasted almost 3 hours. # cd /usr/scr # script /var/tmp/mw.out # time make buildworld real : 135m user : 90m sys : 38m # exit # script /var/tmp/mw2.out # time make installworld ... install ...install real: 11m20 user: 1m22 sys: 2m14 # exit Ths script command records output in the specified file. This may be useful. Step 7) Update /etc (but actually I check from the /) This is longest and hardest manual task I encountered during the upgrade. You must upgrade your current /etc with the content of /usr/src/etc. The problem is you must not simply overwritte the content of /etc. The complete procedure id described in the handbook but the process is manual : you have to check manually each file and decide what to do : overwrite, keep or merge. Here are the steps (from the handbook) and my comments : step a. backup /etc # cp -Rp /etc ~/etc/old step b. Build a dummy set of directories # mkdir /var/tmp/root # cd /usr/src/etc # make DESTDIR=/var/tmp/root distrib-dirs distribution The make lasts about 1 minute. step c. Delete empty directories # cd /var/tmp/root # find -d . -type d | .... => see in the handbook the end of this long line step d. Identify the differences between your current system and the new one # diff -r --brief / /var/tmp/root | wc -l 1359 1359 files are different from my current system ! As I cannot check manually all of them, it was necessary to find what files are important. By reading the diff, I have identified 3 categories of differences : * the "Only in" * the "differ" * the "while" # diff -r --brief / /var/tmp/root | grep "Only in" | wc -l 471 # diff -r --brief / /var/tmp/root | grep "differ" | wc -l 108 # diff -r --brief / /var/tmp/root | grep "while" | wc -l 780 471 + 108 + 780 = 1359. They are all here. * the "while" (780) From the content of the diff, you see that is concerns only devices. MAKEDEV will recreate that latter so I forget them. * the "Only in" (471) The "Only in" files can be only in /etc (current system) or only in /var/tmp/root/etc (new system). The files that are only in /etc do not harm I guess. I let them. I will only consider the files only in the new system. # diff -r --brief / /var/tmp/root | grep "Only in" | grep "/var/tmp" | wc -l 100 Among the 100 files, 93 are devices and 7 are various files. I do not consider the 93 devices (MAKEDEV will recreate them latter). The 7 new files are : 1. Only in /var/tmp/root/etc/defaults : pccard.conf 2. Only in /var/tmp/root/etc/defaults : periodic.conf 3. Only in /var/tmp/root/etc/mail : aliases 4. Only in /var/tmp/root/etc/mtree : BSD.x11-4.dist 5. Only in /var/tmp/root/etc/periodic/weelkly : 400.status.pkg 6. Only in /var/tmp/root/etc/ : rc-firewall6 7. Only in /var/tmp/root/etc/ssl : openssl.conf # cp -p /var/tmp/root/etc/defaults/pccard.conf /etc/defaults ... repeated for the 6 remaining files Then I checked I did not forgot anyone : # diff -r --brief / /var/tmp/root | grep "Only in" | grep "/var/tmp" | grep -v "/var/tmp/root/dev" => no file. * the "differ" (108) The first thing I checked is how many "differ" files are in / and in /etc : # diff -r --brief / /var/tmp/root | grep "differ" | wc -l 108 # diff -r --brief / /var/tmp/root | grep "differ" | grep "/etc" | wc -l 93 15 files (108 - 93) differ and are not in /etc. These files are : 1. /.cshrc 2. /dev/MAKEDEV 3. /root/.cshrc 4. /root/.login 5. /usr/share/man/whatis 6. /usr/share/perl/man/whatis 7. /var/db/locate.database 8. /var/log/cron 9 -> 14. others various log files in /var/log 15. /var/tmp/utmp I have chosen to overwrite the file # 2, 5 and 6. I did not touch the others. # mv /dev/MAKEDEV /dev/MAKEDEV.old # cp -p /var/tmp/root/dev/MAKEDEV /dev and the same for share/man/whatis and perl/man/whatis. Remains 93 "differ" files concerning /etc : First I created a list : # diff -r --brief / /var/tmp/root | grep "differ" | grep "/etc" | cat -b > ~/diffetc To give an idea, here is the beginning and the end of the file : #cat diffetc 1 Files /etc/aliases and /var/tmp/root/etc/aliases differ 2 Files /etc/crontab and /var/tmp/root/etc/crontab differ 3 Files /etc/csh.login and /var/tmp/root/etc/csh.login differ 4 Files /etc/defaults/make.conf and /var/tmp/root/etc/defaults/make.conf differ 5 Files /etc/defaults/rc.conf and /var/tmp/root/etc/defaults/rc.conf differ 6 Files /etc/gettytab and /var/tmp/root/etc/gettytab differ . . . 90 Files /etc/ssh/sshd_config and /var/tmp/root/etc/ssh/sshd_config differ 91 Files /etc/syslog.conf and /var/tmp/root/etc/syslog.conf differ 92 Files /etc/ttys and /var/tmp/root/etc/ttys differ 93 Files /etc/usbd.conf and /var/tmp/root/etc/usbd.conf differ # Then, for each file, I have checked the differences : # diff /var/tmp/root/etc/crontab /etc/crontab Usually, I overwrite the file : # cp -p /var/tmp/root/etc/crontab /etc/crontab I spent about 2 hours on this job. Some important files that I have overwritten : /etc/rc /etc/rc.firewall /etc/services Here are the files that I did not modified : 1. /etc/group 2. /etc/hosts.equiv 3. /etc/master.passwd 4. /etc/motd 6. /etc/passwd 7. /etc/printcap 8. /etc/pwd.db (what is this file ???) 10. /etc/spwd.db (what is this file ???) 11. /etc/syslog.conf Here are the files that I merged : 5. /etc/namedb/named.conf 9. /etc/shells Then I check that no file where forgotten : #diff -r --brief /etc /var/tmp/root/etc | grep "differ" | cat -b List of the 11 files overwritten or merged # Step 8) Update /dev # cp -p /var/tmp/root /dev/MAKEDEV /dev (but this should have already been done in step 7) # cd /dev # ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > ~/dev.out # sh MAKEDEV all This last about 30 secondes and nothing is printed. # ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > ~/dev2.out # diff ~/dev2.out ~/dev.out ... a lot of things I decided to focus on the most important devices : # cat /etc/fstab /dev/da0s1b none swap /dev/da0s1a / ufs /dev/cd0c /cdrom /proc # I have just checked that those devices were existing in /dev. They were. Step 9) Compile and install new kernel You must recompile your kernel before the reboot (see Handbook). # cd /usr/src/sys/i386/conf # /usr/sbin/config -g MYKERNEL ... # cd ../../compile/MYKERNEL # make depend ... ... ./aicasm: Stopped at file ../../aic7xxx/aic7xxx.seq line 81 - syntax error # That is very frustrating. From the newsgroup, I found 2 answers : Answer #1 : # cd /usr/src # make includes I did that and it changed nothing. This is not a surprise. I expect the 'make includes' has been done during the 'make buildworld' or the 'make buildinstall' Answer #2 : # cd ../../compile # rm * # rm -rf .depend Yes : this has solved the problem (thanks to Todd Backman http://www.freebsd.org/cgi/getmsg.cgi?fetch=9249021+9251943+/usr/local/www/db/text/1999/freebsd-questions/19990607.freebsd-questions) Then the kernel was compiled without error : # cd /usr/src/sys/i386/conf # /usr/sbin/config -g MYKERNEL ... # cd ../../compile/MYKERNEL # make depend ... about 2 minutes # make ... about 30 minutes # make install ... a lot of things that are not printed usually Step 10) Reboot and enjoy the new version # shutdown -r now And everything is working fine, except one device (ttyd4). I'll check that latter. dmesg and all.log give nothing strange. And just to be sure and to enjoy : # uname -a ... 4.2-RELEASE #0 .. # To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message