mirror of https://github.com/archzfs/archzfs
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
476 lines
16 KiB
476 lines
16 KiB
======================================
|
|
Arch ZFS - ZFS On Linux Kernel Modules
|
|
======================================
|
|
:Modified: Tue Feb 12 18:05:02 PST 2013
|
|
:status: hidden
|
|
:slug: archzfs
|
|
|
|
.. important:: The database path for the archzfs repository has moved. It is now
|
|
located at "http://demizerone.com/$repo/core/$arch"! Please
|
|
update the server lines in your pacman.conf as necessary. This
|
|
change was necessary to add support for a testing repository.
|
|
|
|
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 and
|
|
i686 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_.
|
|
|
|
.. 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.
|
|
|
|
32bit support for ZFS on Linux is unstable due to inconsistencies in memory
|
|
management between the Solaris kernel and the Linux kernel. See `ZFS on Linux
|
|
FAQ - 64bit`_ However, users have reported on the AUR ZFS page of running ZFS
|
|
with compiled 32bit packages without any problems. For this reason, ZFS on Arch
|
|
Linux does support i686.
|
|
|
|
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.
|
|
|
|
For more information about the packager, Jesus Alvarez, see demizerone.com_.
|
|
|
|
------------------------------------
|
|
The archzfs un-official repositories
|
|
------------------------------------
|
|
|
|
This repository is updated on every kernel release. This allows for effortless
|
|
installation and updates.
|
|
|
|
To start, add the server information to `/etc/pacman.conf`,
|
|
|
|
.. code-block:: bash
|
|
|
|
[archzfs]
|
|
Server = http://demizerone.com/$repo/core/$arch
|
|
|
|
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
|
|
|
|
.. code-block:: console
|
|
|
|
# pacman-key --lsign-key 0EE7A126
|
|
|
|
next, update your pacman database
|
|
|
|
.. code-block:: console
|
|
|
|
# pacman -Syy
|
|
|
|
and finally, install the package group
|
|
|
|
.. code-block:: console
|
|
|
|
# pacman -S archzfs
|
|
|
|
.. note:: To read about key management in Arch, see pacman-key_ and
|
|
pacman.conf_
|
|
|
|
ZFS support for testing
|
|
=======================
|
|
|
|
It is possible to use ZFS with the official Arch Linux testing repository.
|
|
|
|
.. code-block:: bash
|
|
|
|
[archzfs]
|
|
Server = http://demizerone.com/$nepo/core/$arch
|
|
Server = http://demizerone.com/$repo/testing/$arch
|
|
|
|
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
|
|
|
|
[archzfs]
|
|
Server = http://demizerone.com/$repo/archiso/$arch
|
|
|
|
-----------------------
|
|
Signing key for archzfs
|
|
-----------------------
|
|
|
|
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_
|
|
=========
|
|
|
|
The short version::
|
|
|
|
pub 2048R/0EE7A126 2012-10-24
|
|
Key fingerprint = B18A 9C9F 1E4E EAFF 072D AB9E 5E1A BF24 0EE7 A126
|
|
uid Jesus Alvarez <jeezusjr@gmail.com>
|
|
sub 2048R/DAB97A2B 2012-10-24
|
|
|
|
and the long version::
|
|
|
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
Version: SKS 1.1.0
|
|
|
|
mQENBFCHi6oBCADbqiZasgwE//HtfGvyOynXapEP67tNFsKUgFR/XIVi8Io5ehCD88wOpN0O
|
|
02u73OjDssTNh+yEN8ItixhxbZQClE7X4AG2/I49PBsPnY2G3zGPa2TB6vt5GStyVOFJjxsX
|
|
F3sWcxfaBXSGonc9Qc8MSKmwwyvG5ASjCYYjK60UKoEqRF09DI/fMaOWcGoosNzNUntzuyAw
|
|
9anRPZc/Chtmpd0DyQ4MhkGV18BWSsoGJsTeASo+jq98FcTKhUOfzpPccwmrQ+ViX+RIXIc/
|
|
6WtnFs1rE0peWio3sgy+JvywT+8z2yrKZ+ovE1BQYgm2hZ4z6t55gdjfpw4uWtV4BsGzABEB
|
|
AAG0Ikplc3VzIEFsdmFyZXogPGplZXp1c2pyQGdtYWlsLmNvbT6JATgEEwECACIFAlCHi6oC
|
|
GwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEF4avyQO56EmiKoH/iPqzt2+OycQ+tXX
|
|
Gv2f/21dSEihGzvyXaC+yOwVrtvMamgxTeChnGi8H3gSabmTGyTJT60WsMmVtgUKZ7rqKh6b
|
|
KbV1mIU8m/ZrzGJVrDc8JI+MrDmeaCaqTqZby+NeM5QNZ+FQiHX0dogpO3nvr3EvuipeSGu/
|
|
KKsCfR9UxK0SwowBbfn6/3t7obO1il+eq6fHOB0+SuM6a9CssTOtPXim43VaDusaDJ13d5+3
|
|
Ey/Mxbif5N+RzMgVavkAL5w0Cf4PElqNWA4aGfDxfhUvZ+WUOC+AFGZ/uGHwxdJLaCSx4aEI
|
|
8CDj3trZnPit2umi64JHBb3KYLKey0duz/ztgtS5AQ0EUIeLqgEIALZx/agW3opcodJvUF7K
|
|
4L1H9xnqw+bVBXIFyDvSCfWxLgS2MDTl/q38o62u4Htngwix8RsLEWqrtFfAi90VAxJ57pQZ
|
|
xYZBAyEOoEOOBYJWbNxneHUSCp6+yGQiiyB0kMoCG9JMlcEmv8fwGqqardBR4+ZM2Acf+aLg
|
|
xxi+7B3Ey7Vo/2MnzIu5GeUolDSmyDkUA91WdQByEoUWRVcRvQ+gQz/HGInHxPmqRIKFWSbg
|
|
k1oBpCD7yJV+MfJAFaXvrEXn6jLKdIzWixIzhbVpt5RA+2wLzuTA/V5OGglNKOCWshkkjQBw
|
|
SCOKPnYez/081Quw+1TIY8FuJY/fEv1Z1ZEAEQEAAYkBHwQYAQIACQUCUIeLqgIbDAAKCRBe
|
|
Gr8kDuehJh47B/4myliSn3064a+a77wmvxNphuxKkUPU1gYu0aKF5bmT6nD3iOt3WA8pEcXL
|
|
aVkA++nquTu2K8vGqZT4qBvcxP5W8s7mjVhP0h9N7VpikiAouRjEFYCVTjdwJbn0junCTjm4
|
|
Ixr4fX5L7EgqCrToKbuQhlocwNPy1aJglm2MwDFzOFxK8R8Dx5O7xD/2b0pBdX/KHPqn2ENC
|
|
yiKh/uUuykKpwEXVPPijL6nuA7BBacseXTn8ldAHStrhPEKnZ7mPV9j3VjlRHbYblvLGBBQi
|
|
R6y3yNGqe7NjgJQW4e0ibvsbkG6PyUP4BLVUY6CGQFPt1p7dX4xioErHqdqPkjLzMvpi
|
|
=TUqo
|
|
-----END PGP PUBLIC KEY BLOCK-----
|
|
|
|
--------------------
|
|
ZFS update procedure
|
|
--------------------
|
|
|
|
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.
|
|
|
|
Unmount all zfs pools
|
|
=====================
|
|
|
|
.. 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.
|
|
|
|
.. code-block:: console
|
|
|
|
# fuser /mnt/data
|
|
# sudo fuser -v /mnt/data
|
|
|
|
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.
|
|
|
|
.. code-block:: console
|
|
|
|
# systemctl stop nfsd
|
|
|
|
Remove the old ZFS version
|
|
==========================
|
|
|
|
.. code-block:: console
|
|
|
|
# pacman -R archzfs
|
|
|
|
Perform pacman update and restart
|
|
=================================
|
|
|
|
.. code-block:: console
|
|
|
|
# pacman -Syu
|
|
# systemctl restart
|
|
|
|
Create a new branch in git (optional)
|
|
=====================================
|
|
|
|
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.
|
|
|
|
.. code-block:: console
|
|
|
|
$ git checkout -b zfs-0.6.0-rc13-linux-3.7.X
|
|
|
|
This branch has 'X' as the last revision number because when a minor point
|
|
release kernel is released, such as 3.7, it can take a while for it to move
|
|
into the [core] repository. The 3.7 kernel can remain in testing for multiple
|
|
revisions.
|
|
|
|
Update the ZFS PKGBUILDs
|
|
========================
|
|
|
|
1. Update ``pkgrel``.
|
|
|
|
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``.
|
|
|
|
#. Change the kernel versions to the targeted kernel version.
|
|
|
|
DON'T forget to update the version information for depmod in the spl.install
|
|
and zfs.install files! If forgotten, this will report errors after
|
|
installation and lead to the kernel modules not loading properly.
|
|
|
|
#. It is not necessary to update the packages sums as the pbldr build tool does
|
|
that automatically.
|
|
|
|
Building the packages
|
|
=====================
|
|
|
|
Building the packages requires that the devtools_ package be installed. This
|
|
section assumes the host system is of x86_64 architecture.
|
|
|
|
The pbldr tool builds i686 and x86_64 packages in a clean chroot environment.
|
|
This method requires 5-10GB of space and some setup time in order to work
|
|
properly. The size is largely determined by the number of chroots you have. On
|
|
my system I have four copies and two root copies, totaling 13GB.
|
|
|
|
Creating the chroot environment
|
|
-------------------------------
|
|
|
|
The steps below outline the creation of the of the chroot root copy that a
|
|
clean chroot is made from using rsync. This root environment is only used as a
|
|
pristine copy, no packages are installed or built inside the root copy.
|
|
|
|
You can adjust the variables used by pbldr when working with chroot
|
|
environments with the config.json configuration file in the project root
|
|
directory, or you can pass them as arguments to the script.
|
|
|
|
32bit chroot environment
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
See `Buldinig 32-bit packages on a 64-bit system`_ for more information. While
|
|
this wiki article can be used as a reference, the pbldr tool expects the
|
|
directory structure defined in the following code block.
|
|
|
|
.. code-block:: console
|
|
|
|
# mkdir -p /opt/chroot/{i686,x86_64}
|
|
# setarch i686 mkarchroot -C "/usr/share/devtools/pacman-extra.conf" \
|
|
-M "/usr/share/devtools/makepkg-i686.conf" /opt/chroot/i686 base base-devel sudo
|
|
|
|
Edit pacman.conf and makepkg.conf and adjust to your desire. Specifically, the
|
|
packager and host fields.
|
|
|
|
.. code-block:: console
|
|
|
|
# vim /opt/chroot/i686/root/etc/makepkg.conf \
|
|
/opt/chroot/i686/root/etc/pacman.conf
|
|
|
|
It is necessary to periodically perform updates to the chroot root copy, to do
|
|
this, you will have to chroot into the root copy and perform the update. This
|
|
same method is used to install new packages in the root copy.
|
|
|
|
.. code-block:: console
|
|
|
|
# linux32 arch-chroot /opt/chroot/i686/root /bin/bash
|
|
# pacman -Syu
|
|
# pacman -S <package>
|
|
# exit
|
|
|
|
64bit chroot environment
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
The procedure for creating the 64bit chroot root environment is nearly
|
|
identical to the commands used to create the 32bit chroot environment.
|
|
|
|
.. code-block:: console
|
|
|
|
# mkarchroot -C "/usr/share/devtools/pacman-multilib.conf" \
|
|
-M "/usr/share/devtools/makepkg-x86_64.conf" /opt/chroot/x86_64 base \
|
|
multilib-devel sudo
|
|
|
|
Edit pacman.conf and makepkg.conf and adjust to your desire. Specifically, the
|
|
packager and host fields.
|
|
|
|
.. code-block:: console
|
|
|
|
# vim /opt/chroot/x86_64/root/etc/makepkg.conf /opt/chroot/x86_64/root/etc/pacman.conf
|
|
|
|
Periodically it is necessary to perform updates to the chroot root copy, to do
|
|
this, you will have to chroot into the root copy and perform the update. This
|
|
is the same method used to install new packages in the root copy.
|
|
|
|
.. code-block:: console
|
|
|
|
# arch-chroot /opt/chroot/x86_64/root /bin/bash
|
|
# pacman -Syu
|
|
# pacman -S <package>
|
|
# exit
|
|
|
|
Build the packages
|
|
------------------
|
|
|
|
To build all the packages in devsrc, simply use,
|
|
|
|
.. code-block:: console
|
|
|
|
# pbldr build -c
|
|
|
|
To only build spl and spl-utils, use
|
|
|
|
.. code-block:: console
|
|
|
|
# pbldr -p spl build -p spl-utils -c
|
|
|
|
This command will build i686 and x86_64 packages in a clean chroot copy. In
|
|
this case /opt/chroot/i686/zfs32 for 32bit.
|
|
|
|
The built packages are output to ./stage/spl-<version>/\*. Inspect them in the
|
|
usual manner, namcap, pacman -Qi/-Ql, and so on. Once it is determined they are
|
|
ready to be added to the repository, use the following command:
|
|
|
|
.. code-block:: console
|
|
|
|
$ pbldr repo
|
|
|
|
Or, in the case of building packages for the archiso, you can use,
|
|
|
|
.. code-block:: console
|
|
|
|
$ pbldr repo -t archiso
|
|
|
|
The packages are added to the repository and now the entire project directory
|
|
can be rsync'd to a web host for hosting.
|
|
|
|
|
|
Start the ZFS service
|
|
---------------------
|
|
|
|
This step is not necessary if you are using ZFS as root.
|
|
|
|
.. code-block:: console
|
|
|
|
# systemctl daemon-reload
|
|
# zpool import -a
|
|
# systemctl start zfs
|
|
|
|
Commit changes to git
|
|
---------------------
|
|
|
|
Add PKGBUILD.py and archzfs/ to the index and commit the changes with
|
|
|
|
.. code-block:: console
|
|
|
|
$ git commit -m "Update to ZFS version 0.6.0-rc13-1 and linux-3.7.2"
|
|
|
|
.. note:: "-1" at the end of the ZFS version is the pkgrel.
|
|
|
|
Update the webpage
|
|
==================
|
|
|
|
Open the command terminal and cd to the webpage repository powered by Pelican.
|
|
Use make to generate the updated website:
|
|
|
|
.. code-block:: console
|
|
|
|
$ make publish
|
|
|
|
then push the changes with rsync,
|
|
|
|
.. code-block:: console
|
|
|
|
$ ./push_archzfs.sh -n
|
|
|
|
'-n' is used to verify the files being pushed are correct. Once that is done,
|
|
re-use the command without the dry-run argument.
|
|
|
|
.. _Patching ZFS:
|
|
|
|
Creating a patch for ZFS
|
|
========================
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
.. 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
|
|
|
|
$ git clone https://github.com/zfsonlinux/zfs.git
|
|
|
|
Once the repository is cloned, create a branch.
|
|
|
|
.. code-block:: console
|
|
|
|
$ git checkout -b archzfs_patch
|
|
|
|
Revert the head to the last release.
|
|
|
|
.. code-block:: console
|
|
|
|
$ git reset --hard <commit>
|
|
|
|
Merge the master branch into the archzfs_patch branch.
|
|
|
|
.. code-block:: console
|
|
|
|
$ git merge --squash master
|
|
|
|
Finally, generate the new patch.
|
|
|
|
.. code-block:: console
|
|
|
|
$ git diff --cached > ../linux-3.7.patch
|
|
|
|
-------------------
|
|
Anouncment template
|
|
-------------------
|
|
|
|
ZFS core update
|
|
===============
|
|
|
|
Pre-compiled packages are available for those that are using ZFS as root, want to do maintenance from an Archiso, or just don't want to deal with doing their own update management. They are available at http://demizerone.com/archzfs
|
|
|
|
ZFS testing update
|
|
==================
|
|
|
|
Information about using the archzfs testing repository can be found at http://demizerone.com/archzfs, or you can use the following server line in your pacman.conf:
|
|
|
|
[archzfs]
|
|
Server=http://demizerone.com/$repo/core/$arch
|
|
Server=http://demizerone.com/$repo/testing/$arch
|
|
|
|
If you want want the PKGBUILDs, download them from here: http://demizerone.com/archzfs/testing/sources/
|
|
|
|
.. _archzfs-github: https://github.com/demizer/archzfs
|
|
.. _demizerone.com: http://demizerone.com
|
|
.. _0EE7A126: http://pgp.mit.edu:11371/pks/lookup?op=vindex&search=0x5E1ABF240EE7A126
|
|
.. _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
|
|
.. _devtools: https://www.archlinux.org/packages/extra/any/devtools
|
|
.. _Buldinig 32-bit packages on a 64-bit system: https://wiki.archlinux.org/index.php/Building_32-bit_packages_on_a_64-bit_system
|
|
|