web_archzfs: Rewrite

pull/7/head
Jesus Alvarez 12 years ago
parent 0f66de6fc6
commit b544ef442b
  1. 685
      web_archzfs.rst

@ -1,78 +1,60 @@
======================================
Arch ZFS - ZFS On Linux Kernel Modules
======================================
:Modified: Thu Dec 13 20:24:33 PST 2012
:status: hidden
:slug: archzfs
This is the official web page of the Arch ZFS kernel modules for ZFS on Linux.
Here you can find makepkg sources for building Arch ZFS yourself, or pre-built
x86_64 packages. You can also add the unofficial repository to your
makepkg.conf and receive automatic updates. For the source to the build script
used to generate these packages, see archzfs-github_.
This is the official web page of the Arch ZFS kernel module packages for native
ZFS on Linux. Here you can find pacman package sources and pre-built x86_64
packages. For effortless package installation and updates, it is possible to
add the unofficial repository to your pacman.conf. There is also a special
repository for using ZFS with the archiso install media for installing arch
onto a ZFS root filesystem, or doing emergency maintenance. To see the package
sources and repository development history, see archzfs-github_.
**Please note**, if you install these binaries, you will not be able to update
to the next kernel versions without first having available the latest compiled
ZFS package for that update. The current version of Arch ZFS, 0.6.0-rc12, can
only be used with kernel version 3.6.6. Once 3.6.7 is released, ZFS on Linux
will have to be recompiled to target 3.6.7.
.. note:: The ZFS and SPL packages are depend on a specific kernel
version. You will not be able to perform kernel updates until updated
ZFS packages are pushed to the archzfs repository for the new kernel
version. If you installing ZFS manually using the AUR packages, you
would be required to first un-install ZFS, perform the kernel update,
restart the host, and then build and install the updated AUR ZFS
packages.
For more information about the packager, Jesus Alvarez, see demizerone.com_. My
packages and database are signed by my PGP key, but my key is not signed by any
of the Arch Linux master keys, so you will have to locally sign my key and add
it to your trust, see below for more info.
32bit support for ZFS on Linux is unstable due to inconsistencies in memory
management between the Solaris kernel and the Linux kernel. For this reason,
**the ZFS packages for Arch Linux do not yet support i686**. However, 32bit
support will be added in the future for those brave enough to face the
consequences. See `ZFS on Linux FAQ - 64bit`_
My arch linux contributions
---------------------------
* `AUR - Packages`_
* `ArchWiki - Edits`_
* `bbs.archlinux.org - Posts`_ (Search for demizer)
* github_
My Unofficial Arch Linux Repository
-----------------------------------
If you are adding my repository to pacman, you will first need to un-install all
versions of zfs.
Stop any services accessing your drives, like nfs,
.. code-block:: console
# systemctl stop nfsd.service
The archzfs repository and packages are signed, but the key is not trusted by
any of the Arch Linux master keys. You will have to locally sign the key and
add it to your trust. See below for more info.
Then umount your ZFS filesystem,
For more information about the packager, Jesus Alvarez, see demizerone.com_.
.. code-block:: console
# umount /mnt/data
Remove the old version of zfs,
------------------------------------
The archzfs un-official repositories
------------------------------------
.. code-block:: console
# pacman -Rs zfs
This repository is updated on every kernel release. This allows for effortless
installation and updates.
Next, add the following to `/etc/pacman.conf`:
To start, add the server information to `/etc/pacman.conf`,
.. code-block:: bash
[archzfs]
SigLevel = Required DatabaseOptional TrustedOnly
Server = http://demizerone.com/$repo/$arch
Both the database and the packages are signed, so you will have to add my key
to pacman's trusted key list.
Both the database and the packages are signed, so you will have to add the
signing key to pacman's trusted key list:
.. code-block:: console
# pacman-key -r 0EE7A126
verify it using the info below and then sign it with the local master key:
verify it using the info below and then sign it with the local master key
.. code-block:: console
@ -84,27 +66,36 @@ next, update your pacman database
# pacman -Syy
and install the package group,
and finally, install the package group
.. code-block:: console
# pacman -S zfs
# pacman -S archzfs
Notes
-----
.. note:: To read about key management in Arch, see pacman-key_ and
pacman.conf_
* My key is not signed by any of the master keys, so you will have to self sign
it with your local master key. This page is hopefully an attempt to persuade
you that it is legit and I mean no harm. Look below on how to verify my key.
ZFS support for archiso
=======================
If emergency maintenance is ever required on a ZFS file system from an archiso
live environment, you will need to use the archzfs repository that tracks the
current archiso release. To use it, follow the steps above for accessing the
archzfs repository, but instead use the special server line below when adding
the server information to pacman.conf:
.. code-block:: bash
* To read about key management in Arch, see
`pacman-key <https://wiki.archlinux.org/index.php/Pacman-key>`_ and
`pacman.conf <https://www.archlinux.org/pacman/pacman.conf.5.html#_package_and_database_signature_checking>`_.
[archzfs]
Server = http://demizerone.com/$repo/archiso/$arch
My PGP Key
----------
-----------------------
Signing key for archzfs
-----------------------
All of my packages and package databases are signed with the following key,
The ZFS packages and database are signed with the package maintainer's key. The
current maintainer is Jesus Alvarez and his key can be verified at
demizerone.com_ This key is not trusted by any of the Arch Linux Master Keys.
0EE7A126_
~~~~~~~~~
@ -146,22 +137,336 @@ and the long version::
=TUqo
-----END PGP PUBLIC KEY BLOCK-----
---------------------
Insalling ZFS on ROOT
---------------------
https://github.com/dajhorn/pkg-zfs/wiki/HOWTO-install-Ubuntu-to-a-Native-ZFS-Root-Filesystem
ZFS Cheatsheet: http://lildude.co.uk/zfs-cheatsheet
1. Create live usb for UEFI: https://wiki.archlinux.org/index.php/UEFI#Create_UEFI_bootable_USB_from_ISO
#. Boot from live usb.
#. Use cgdisk and create a GPT partition table
=============================
Part Size Type
==== ===== =============
1 512M EFI (ef00)
2 512M Ext4 (8200)
2 117G Solaris Root (bf00)
=============================
Note the EFI partion will contain the kernel images
#. Format the EFI partion fat32
mkfs.vfat -F 32 /dev/sda1 -n EFIBOOT
#. Format the Ext4 boot partition
mkfs.ext4 /dev/sda2 -L BOOT
#. Check /etc/pacman.d/mirrorlist and make sure the mirrors are agreeable.
#. Add the archzfs repo to pacman.conf
[archzfs]
SigLevel = Required DatabaseOptional TrustedOnly
Server = http://demizerone.com/$repo/$arch
#. Connect to the internet
wifi-menu
#. Install archzfs key
pacman-key -r 0EE7A126
pacman-key --lsign-key 0EE7A126
#. Update pacman
pacman -Syy
#. Install zfs
pacman -S archzfs
#. Load the modules
modprobe zfs
#. Create zfs pool
# zpool create rpool /dev/disk/by-id/<id>
Always use id names when working with zfs, otherwise import errors will
occur.
#. Create zfs file systems
Create the root filesystem
# zfs create rpool/ROOT
create the decendent file system that will hold the installation:
# zfs create rpool/ROOT/arch
We will set the mountpoints after we have created the filesystems so that
they are not mounted automatically to occupied directories causing errors.
Note: If you like you can create sub-filesystem mount points here such as
/home and /root by doing the following:
# zfs create rpool/HOME
# zfs create rpool/HOME/root
#. Umount all zfs filesystems
# zfs umount -a
#. Set the mount point for the decendent root filesystem
# zfs set mountpoint=/ rpool/ROOT/arch
optionally,
# zfs set mountpoint=/home rpool/HOME
# zfs set mountpoint=/root rpool/HOME/root
#. Set the bootfs property on the decendent root filesystem so the bootloader
knows where to find the operating system.
# zpool set bootfs=rpool/ROOT/arch rpool
#. Export the pool
# zpool export rpool
Don't skip this, otherwise you will be required to use -f when importing
your pools. This unloads the imported pool.
Note: Ubuntu help says if this command isn't used, the system will be in an
incossistant state. The docs say that this allows the pools to be shared
accross systems. Is this why I had to use -f when creating the pools the
last time?
#. Re-import the pool
# zpool import -d /dev/disk/by-id -R /mnt rpool
Note: -d is not the actual device id, but the by-id directory containing
the symlinks.
If there is an error in this step, you can export the pool to redo the
command:
# zpool export rpool
#. Mount the EFI and boot partition
mkdir /mnt/boot
mount /dev/sda2 /mnt/boot
mkdir /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
#. Install base packages
pacstrap -i /mnt base base-devel archzfs
#. Generate the fstab
# genfstab -U -p /mnt >> /mnt/etc/fstab
#. Open fstab to edit contents
# nano /mnt/etc/fstab
Delete all the lines except for the boot partion. ZFS auto mounts it's own
partitions.
#. Load the efivars module
modprobe efivars
#. Chroot into the installation
arch-chroot /mnt /bin/bash
# Install a real text editor
# pacman -S vim
#. Follow https://wiki.archlinux.org/index.php/Beginners%27_Guide from the
Locale section to the Configure Pacman Section
#. Edit pacman.conf and add the archzfs repository. If on arch64, uncomment the
multilib repo.
#. Update the pacman database
pacman -Syy
#. Create the initramfs, edit mkinitcpio.conf and add zfs before filesystems.
Remove fsck and then regen the initramfs:
mkinitcpio -p linux
#. Set root passwd and add a regular user.
#. Install UEFI boot loader
Continuing from the EFISTUB section at
https://wiki.archlinux.org/index.php/Beginners'_Guide#Chroot_and_configure_the_base_system
# mkdir /boot/efi
# modprobe efivars
# arch-chroot /mnt /bin/bash
# mkdir -p /boot/efi/EFI/arch
# cp /boot/vmlinuz-linux /boot/efi/EFI/arch/vmlinuz-arch.efi
# cp /boot/initramfs-linux.img /boot/efi/EFI/arch/initramfs-arch.img
# cp /boot/initramfs-linux-fallback.img /boot/efi/EFI/arch/initramfs-arch-fallback.img
The images will need to be recopied everytime there is an update, see
https://wiki.archlinux.org/index.php/Beginners'_Guide#EFISTUB for more
information.
#. Install rEFInd
# pacman -S refind-efi efibootmgr
# mkdir -p /boot/efi/EFI/refind
# cp /usr/lib/refind/refindx64.efi /boot/efi/EFI/refind/refindx64.efi
# cp /usr/lib/refind/config/refind.conf /boot/efi/EFI/refind/refind.conf
# cp -r /usr/share/refind/icons /boot/efi/EFI/refind/icons
# nano /boot/efi/EFI/arch/refind_linux.conf
"Boot to X" "root=PARTUUID=<id> zfs=bootfs ro rootfstype=ext4 systemd.unit=graphical.target"
"Boot to Console" "root=PARTUUID=<id> zfs=bootfs ro rootfstype=ext4 systemd.unit=multi-user.target"
#. Add rEFInd to the UEFI boot menu
# efibootmgr -c -g -d /dev/sdX -p Y -w -L "rEFInd" -l '\EFI\refind\refindx64.efi'
Note: In the above command, X and Y denote the drive and partition of the
UEFISYS partition. For example, in /dev/sdc5, X is "c" and Y is "5".
To delete an existing boot menu item,
# efibootmgr
Lists the menu items and
# efibootmgr -b D -B
deletes.
#. Unmount and restart
# exit
# umount /mnt/boot
# zfs umount -a
# zpool export rpool
# reboot
Emergency chroot repair with archzfs
====================================
Here is how to use the archiso to get into your ZFS filesystem.
1. Boot the latest archiso.
#. Bring up your network
wifi-menu
or
ip link set eth0 up
#. Test network
ping google.com
#. Sync pacman package database
pacman -Syy
#. (optional) Install a better text editor:
pacman -S vim
#. Add archzfs archiso repository to pacman.conf
[archzfs]
SigLevel = Required DatabaseOptional TrustedOnly
Server = http://demizerone.com/$repo/archiso/$arch/
#. Sync the pacman package database
pacman -Syy
#. Install archzfs
pacman -S archzfs
#. Load the kernel modules
modprobe zfs
#. Import your pool
zpool import -a -R /mnt
#. Mount your boot partitions (if you have them)
mount /dev/sda2 /mnt/boot
mount /dev/sda1 /mnt/boot/efi
#. Chroot into your zfs filesystem
arch-chroot /mnt /bin/bash
#. Check your kernel version
pacman -Qi linux
uname -r
uname will show the kernel version of the archiso. If they are different,
you will need to run depmod (in the chroot) with the correct kernel version
of your chroot installation:
depmod -a 3.6.9-1-ARCH (version gathered from pacman -Qi linux)
This will load the correct kernel modules for the kernel version installed
in your chroot installation.
#. Regenerate your ramdisk
mkinitcpio -p linux
There should be no errors.
--------------------
ZFS update procedure
====================
--------------------
This is the procedure used to update the zfs package versions. This could be
caused by a new zfs release version or a kernel update.
This is the procedure the ZFS package maintainer should use to update the ZFS
package versions on the development host. This could be provoked by a new ZFS
release version or a kernel update.
1. Unmount all zfs pools
Unmount all zfs pools
=====================
.. code-block:: console
.. code-block:: console
# systemctl stop zfs
If there is a problem unmounting the drive, such as "target is busy", you
can see what process is using the mount by using fuser.
If there is a problem unmounting the drive, such as "target is busy", you can
see what process is using the mount by using fuser.
.. code-block:: console
.. code-block:: console
# fuser /mnt/data
# sudo fuser -v /mnt/data
@ -169,204 +474,232 @@ caused by a new zfs release version or a kernel update.
USER PID ACCESS COMMAND
/mnt/data: root kernel mount /mnt/data
This directory is exported by nfs, so we'll have to stop the nfs server
before unmounting.
This directory is exported by nfs, so we'll have to stop the nfs server before
unmounting.
.. code-block:: console
.. code-block:: console
# systemctl stop nfsd
#. Remove the old zfs version:
Remove the old ZFS version
==========================
.. code-block:: console
.. code-block:: console
# pacman -R archzfs
#. Update all packages and restart:
Perform pacman update and restart
=================================
.. code-block:: console
.. code-block:: console
# pacman -Syu
# systemctl restart
#. Update PKGBUILD.py
Create a new branch in git
==========================
* Change ``PACKAGE_REL``
The new git branch should be name for the current version of the ZFS on Linux
project and the Linux Kernel version it will target.
* Change ``SOURCE_VER``
.. code-block:: console
* Update ``MD5SUMS`` with ``./build.py -m``
$ git checkout -b zfs-0.6.0-rc12_linux-3.7
#. Build the new packages and repo:
Update the ZFS PKGBUILDs
========================
.. code-block:: console
1. Change ``pkgrel``.
./build.py -bxs split
#. Change the kernel versions to the targeted kernel version.
#. Add PKGBUILD.py and archzfs/ to the index
#. Update ``md5sums`` with ``makepkg -g``.
#. Commit the changes with
This step is only necessary if the upstream ZFS version has changed. If this
is the case, the ``pkgrel`` should also be changed to ``1``.
.. code-block:: console
Building archzfs
================
gc -m "Update to 0.6.0-rc12\_6-linux-3.6.9"
Go into each package directory in order: spl-utils, spl, zfs-utils, zfs and use
makepkg to build the packages:
Note: "\_6" is the pkgrel version.
.. code-block:: console
#. Tag the commit on the master branch
$ makepkg -sfi
.. code-block:: console
.. note:: If either SPL or ZFS do not build due to kernel incompatibilities,
patches will be needed to allow building to continue. See `Patching
ZFS`_.
git tag 0.6.0-rc12\_6-linux-3.6.9 -as -m "Support for zfs-0.6.0-rc12\_6 and Kernel 3.6.9"
Load the ZFS kernel modules
---------------------------
#. Go to the demizerone.com repo and "make publish"
.. code-block:: console
#. Push the changes:
# modprobe zfs
.. code-block:: console
Import and mount your ZFS pools
-------------------------------
git push web
.. code-block:: console
#. Testing
# zpool import -a
# zfs mount -a
* Uninstall the built packages:
Inspect package files
---------------------
.. code-block:: console
.. code-block:: console
# pacman -Rs zfs
$ pacman -Qnp <package>
* Install the repo packages to test the repo:
Add packages to repository
--------------------------
.. code-block:: console
This is done using the ``repo_add.py`` python script for efficiency. It can be
found `here <https://github.com/demizer/binfiles>`_.
# pacman -Syy
# pacman -S zfs
#. The entire process went very smoothly.
.. code-block:: console
#. AUR COMMENT:
$ repo_add.py -r archzfs -d
The packages have been updated for kernel 3.6.7.
Testing
-------
If you installed the packages from AUR, you will need to first remove the zfs
and spl packages:
Reboot to make sure the ZFS packages are used after a system boot and the
systemd file is in working order. Also sync the updates to other local systems
to make sure the updated packages are picked up by pacman and install properly.
# pacman -Rsc spl-utils
Commit changes to git
---------------------
and then update the kernel:
Add PKGBUILD.py and archzfs/ to the index and commit the changes with
# pacman -S linux linux-headers
.. code-block:: console
You will now have to restart your system.
git commit -m "Update to ZFS version 0.6.0-rc12-8 and linux-3.7"
Once your system is back up, you can proceed with building and installing zfs
and spl, in the following order: spl-utils, spl, zfs-utils, and zfs. Then
restart, or:
.. note:: "-8" at the end of the ZFS version is the pkgrel.
# modprobe zfs spl
Now tag the commit on the master branch
You could also use the prebuilt signed repository available at
http://demizerone.com/archzfs and you will not have to remove the packages,
update the kernel, and restart before performing the update.
.. code-block:: console
Also, these new packages now have a group, 'arch-zfs'. So next time you could
remove the packages with just:
git tag 0.6.0-rc12\_6-linux-3.6.9 -as -m "Support for zfs-0.6.0-rc12\_6 and Kernel 3.6.9"
# pacman -R arch-zfs
Update the webpage
==================
If usig the signed repository, you can now install all the packages with:
Open the command terminal and cd to the webpage repository powered by Pelican.
Use make to generate the updated website:
# pacman -S arch-zfs
.. code-block:: console
Git merge Arch ZFS repo_support to master and tag
=================================================
:Added: Thu Nov 15 12:52:21 PST 2012
:Tags: git, merge, tag
make publish
1. git co master
then push the changes with rsync,
#. git tag -s 0.6.0-rc11
.. code-block:: console
#. git merge --no-ff repo_support
./push_archzfs.sh -n
#. I messed up and want to undo the merge
'-n' is used to verify the files being pushed are correct. Once that is done,
re-use the command without the dry-run argument.
git reset --hard 6f764ef
Anoucement template
===================
#. git co repo_support
AUR
---
#. Undo merge
The packages have been updated for kernel 3.6.7.
git reset --hard 3115cb5
If you installed the packages from AUR, you will need to first remove the zfs
and spl packages:
#. git merge --no-ff 0.6.0-rc12
# pacman -Rsc spl-utils
#. git br -d 0.6.0-rc12
and then update the kernel:
#. git br -m develop repo_support
# pacman -S linux linux-headers
#. git co master
You will now have to restart your system.
#. git merge --no-ff develop
Once your system is back up, you can proceed with building and installing zfs
and spl, in the following order: spl-utils, spl, zfs-utils, and zfs. Then
restart, or:
#. I need to rename the old 0.6.0-rc11 tag
# modprobe zfs spl
git co 0.6.0-rc11
git tag 0.6.0-rc11 0.6.0-rc11-linux-3.5.6
git tag -d 0.6.0-rc11
You could also use the prebuilt signed repository available at
http://demizerone.com/archzfs and you will not have to remove the packages,
update the kernel, and restart before performing the update.
#. Switch back to previous development
Also, these new packages now have a group, 'arch-zfs'. So next time you could
remove the packages with just:
git co logging_support
git rebase develop
git stash pop
git reset HEAD
# pacman -R arch-zfs
If usig the signed repository, you can now install all the packages with:
# pacman -S arch-zfs
Building arch-zfs
=================
.. _Patching ZFS:
.. code-block:: console
Creating a patch for ZFS
========================
$ ./build.py -bnxs split
On some occasions, a new kernel version is pushed to the [core] repository
that the latest ZFS on Linux release does not build against. The biggest
problem with this is that the master branch of the ZFS on Linux repository
already contains the required build fixes, but the next release could be weeks
away, causing the packages in AUR to be flagged out of date for that period of
time.
1. Use namcap.
The goal of this section is to document the procedure for creating a patch to
bring the release version up-to-date with the latest kernel so that the AUR
packages do not remain out of date. Otherwise, the user would have to
un-install the current AUR packages and install special 'zfs-git' packages
until the next ZFS on Linux release is made and then switch back to the
standard ZFS AUR packages.
#. Inspect package files
.. note:: The ZFS and SPL projects track each other. If either package requires
a patch, then both projects should be patched. Each project is split
into two packages for Arch Linux so the patch must be applied to both
packages for each project.
.. code-block:: console
$ pacman -Qnp <package>
$ git clone https://github.com/zfsonlinux/zfs.git
#. Add packages to repository
Once the repository is cloned, create a branch.
.. code-block:: console
$ ./build.py -Rx
$ git checkout -b archzfs_patch
Revert the head to the last release.
#. Remove install packages, reboot, reinstall from repository, and reboot to
make sure they are excepted.
.. code-block:: console
#. Make sure the kernel modules are loaded
$ git reset --hard <commit>
Merge the master branch into the archzfs_patch branch.
.. code-block:: console
$ lsmod | grep spl
$ lsmod | grep zfs
$ git merge --squash master
Updating the repository
=======================
Finally, generate the new patch.
.. code-block:: console
$ cd ~/projects/html/demizerone.com
$ make publish
$ git diff --cached > ../linux-3.7.patch
.. _archzfs-github: https://github.com/demizer/archzfs
.. _demizerone.com: http://demizerone.com
.. _0EE7A126: http://pgp.mit.edu:11371/pks/lookup?op=vindex&search=0x5E1ABF240EE7A126
.. _ArchWiki - Edits: https://wiki.archlinux.org/index.php/Special:Contributions/Demizer
.. _bbs.archlinux.org - Posts: https://bbs.archlinux.org/search.php
.. _AUR - Packages: https://aur.archlinux.org/packages/?O=0&C=0&SeB=m&K=demizer&outdated=&SB=n&SO=a&PP=50&do_Search=Go
.. _github: http://www.github.com/demizer
.. _pacman-key: https://wiki.archlinux.org/index.php/Pacman-key
.. _pacman.conf: https://www.archlinux.org/pacman/pacman.conf.5.html#_package_and_database_signature_checking
.. _ZFS on Linux FAQ - 64bit: http://zfsonlinux.org/faq.html#WhyShouldIUseA64BitSystem

Loading…
Cancel
Save