from wiki
This commit is contained in:
parent
665b9ab05e
commit
29faf472a2
1 changed files with 175 additions and 0 deletions
175
pages/FreeBSD9to10.md
Normal file
175
pages/FreeBSD9to10.md
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
# Moving a FreeBSD 9.3-STABLE System to 10.1.0-RELEASE
|
||||
|
||||
In order to move from maintaining a FreeBSD system using source updates and manual builds, one needs to get it on a release track. One way to do this is to upgrade it to the next release by doing a final source build. Unfortunately, there is no FreeBSD 9 release after FreeBSD 9.3. So one has to jump to 10.x. At the time of writing 10.1.0-RELEASE was the most current.
|
||||
|
||||
## Getting the Source for 10.1-RELEASE
|
||||
|
||||
### The Plan for Fetching Source
|
||||
|
||||
I wanted to save the old source tree just in case, before getting the new one. So I moved /usr/src out of the way and grabbed the release via svn.
|
||||
|
||||
```
|
||||
mv /usr/src /usr/src.old
|
||||
rm -rf /usr/obj
|
||||
mkdir /usr/src
|
||||
cd /usr/src
|
||||
svn checkout https://svn0.us-west.freebsd.org/base/releng/10.1/ /usr/src
|
||||
```
|
||||
|
||||
### The Reality
|
||||
|
||||
Unfortunately this failed
|
||||
|
||||
```
|
||||
# svn checkout https://svn0.us-west.freebsd.org/base/release/10.1.0/ /usr/src
|
||||
svn: E000064: Unable to connect to a repository at URL 'https://svn0.us-west.freebsd.org/base/release/10.1.0'
|
||||
svn: E000064: Error running context: Host is down
|
||||
```
|
||||
|
||||
After 20 minutes of wasted debugging, it turned out that there was a DNS entry for an AAAA, but the server was not reachable via IPv6
|
||||
|
||||
```
|
||||
# ping6 svn0.us-west.freebsd.org
|
||||
PING6(56=40+8+8 bytes) 2001:418:1::27 --> 2001:1900:2254:206a::e6a:0
|
||||
^C
|
||||
--- svnmir.ysv.freebsd.org ping6 statistics ---
|
||||
5 packets transmitted, 0 packets received, 100.0% packet loss
|
||||
```
|
||||
|
||||
So I turned off IPv6 and the svn ran successfully. <sad face>
|
||||
|
||||
## Building the 10.1 release
|
||||
|
||||
### The Instructions
|
||||
|
||||
The classic instructions from /usr/src/UPDATING are
|
||||
|
||||
```
|
||||
To upgrade in-place from stable to current
|
||||
----------------------------------------------
|
||||
<make sure you have good level 0 dumps>
|
||||
make buildworld [9]
|
||||
make kernel KERNCONF=YOUR_KERNEL_HERE [8]
|
||||
[1]
|
||||
<reboot in single user> [3]
|
||||
mergemaster -p [5]
|
||||
make installworld
|
||||
mergemaster -i [4]
|
||||
make delete-old [6]
|
||||
<reboot>
|
||||
```
|
||||
|
||||
### What I Actually Did
|
||||
|
||||
My habits were slightly different. So I did the following
|
||||
|
||||
#### Build World and Kernel
|
||||
|
||||
Note that one first builds the new world but does not install it, so that the kernel will be built with the new compiler and library.
|
||||
|
||||
```
|
||||
time make buildworld 2>&1 | tee buildworld.log
|
||||
time make kernel 2>&1 | tee kernel.log
|
||||
```
|
||||
|
||||
Note that this last has installed the new kernel, so you are committed.
|
||||
|
||||
If you turned IPv6 off in /etc/rc.conf you may want to re-enable it.
|
||||
|
||||
### Finish Installation of the New World
|
||||
|
||||
At or before this point, it is wise to test that you have serial (or VGA) console. You're gonna need it.
|
||||
|
||||
Now boot the new kernel in single user mode.
|
||||
|
||||
```
|
||||
shutdown now
|
||||
```
|
||||
|
||||
Then install the world as built in the previous steps. From the serial (or VGA) console,
|
||||
|
||||
```
|
||||
export TERM=vt100
|
||||
mergemaster -p
|
||||
cd /usr/src
|
||||
time make installworld 2>&1 > installworld.log
|
||||
# check installworld.log to be sure it's ok
|
||||
tail installworld.log
|
||||
mergemaster -cviFU
|
||||
```
|
||||
|
||||
In once case, after installworld, mergemaster got a jillion
|
||||
|
||||
```
|
||||
<jemalloc>: Conf string ends with key
|
||||
```
|
||||
|
||||
The hack is to
|
||||
|
||||
```
|
||||
rm /etc/malloc.conf
|
||||
```
|
||||
|
||||
and rerun installworld.
|
||||
|
||||
## Finally, Boot into the New System
|
||||
|
||||
One should now be able to boot multi-user. Careful inspection of the boot console output would be wise.
|
||||
|
||||
```
|
||||
reboot
|
||||
```
|
||||
|
||||
One should get to the current security patch level.
|
||||
|
||||
```
|
||||
freebsd-update fetch
|
||||
freebsd-update install
|
||||
```
|
||||
|
||||
And a reboot would probably be wise, as there was likely a kernel or other critical component update.
|
||||
|
||||
### Oopsie!
|
||||
|
||||
The reboot gave me
|
||||
|
||||
```
|
||||
Configuring syscons: keymap keyrate blanktime.
|
||||
Performing sanity check on sshd configuration.
|
||||
Shared object "libkrb5.so.11" not found, required by "sshd"
|
||||
/etc/rc: WARNING: failed precmd routine for sshd
|
||||
```
|
||||
|
||||
I had to go in over serial console and
|
||||
|
||||
```
|
||||
cd /usr/src/secure/lib/libssh
|
||||
make
|
||||
make install
|
||||
cd /usr/src/secure/usr.sbin/sshd
|
||||
make
|
||||
make install
|
||||
cd /usr/src/lib/libgssapi
|
||||
make
|
||||
make install
|
||||
service sshd restart
|
||||
```
|
||||
|
||||
to get going again. I never debugged this, just hacked.
|
||||
|
||||
## And Rebuild Ports
|
||||
|
||||
It is recommend that one rebuild all installed ports.
|
||||
|
||||
```
|
||||
pkg-static install -f pkg
|
||||
portmaster -af
|
||||
```
|
||||
|
||||
If portmaster has a bad day, fix whatever caused it to barf and
|
||||
|
||||
```
|
||||
portmaster -af -R
|
||||
```
|
||||
|
||||
to resume without rebuilding what it already rebuilt.
|
||||
Loading…
Add table
Add a link
Reference in a new issue