Skip to content

Kernel packaging

Andreas Schröder edited this page May 17, 2026 · 40 revisions

Steps

  1. Find Ubuntu kernel with the same base version in https://code.launchpad.net/~ubuntu-kernel
  2. Rebase all the Asahi changes on top of that
  3. Copy debian.asahi-arm directory from old ubuntu asahi kernel to this newly merged one
  4. Update config as described in https://discourse.ubuntu.com/t/kernel-configuration-in-ubuntu/35857
  5. Update debian/debian.env to point to debian.asahi-arm
  6. Build, see https://discourse.ubuntu.com/t/how-to-build-your-own-ubuntu-concept-x-elite-kernel/49941 for some discussion on building kernels and config management

Kernel package for tag asahi-6.18.15-1

  1. Find Ubuntu kernel with version 6.18.x in https://code.launchpad.net/~ubuntu-kernel
    There is the "bridge-next" branch for resolute, which is based on 6.18.5:
    git clone --single-branch -b bridge-next https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/resolute linux-ubuntu-resolute-bridge-next
    
  2. Rebase all the Asahi changes on top of that:
    cd linux-ubuntu-resolute-bridge-next
    git remote add asahi https://github.com/AsahiLinux/linux.git
    git fetch asahi
    git checkout -b ubuntu-asahi-6.18.15-1 asahi-6.18.15-1
    git rebase -X ours bridge-next
    
  3. Fix security/apparmor/lsm.c:
    diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
    index 8d2ba2beaa62..fc4e4a3ca7c6 100644
    --- a/security/apparmor/lsm.c
    +++ b/security/apparmor/lsm.c
    @@ -697,6 +697,7 @@ static int common_file_perm(const char *op, struct file *file, u32 mask)
     {
            struct aa_label *label;
            int error = 0;
    +       bool needput;
    
            label = __begin_current_label_crit_section(&needput);
            error = aa_file_perm(op, current_cred(), label, file, mask, false);
    @@ -712,7 +713,7 @@ static int apparmor_file_receive(struct file *file)
    
     static int apparmor_file_permission(struct file *file, int mask)
     {
    -       return common_file_perm(OP_FPERM, file, mask, true);
    +       return common_file_perm(OP_FPERM, file, mask);
     }
    
     static int apparmor_file_lock(struct file *file, unsigned int cmd)
    
  4. Copy debian.asahi-arm directory from old Ubuntu Asahi kernel to this newly merged one:
    # restore from backup
    
    cd ..
    pull-ppa-source --ppa vpeixoto/asahi linux-asahi-arm noble
    cd ../linux-ubuntu-resolute-bridge-next-6.18
    cp -av ../linux-asahi-arm-6.17.0/debian.asahi-arm .
    
  5. Update debian/debian.env to point to debian.asahi-arm:
    DEBIAN=debian.asahi-arm
    
  6. Update kernel major version in debian/debian.asahi-arm/variants:
    -6.18
    
  7. (noble) Set Rust build tool paths in debian/debian.asahi-arm/rules.d/arm64.mk:
    rustc = /usr/lib/rust-1.89/bin/rustc
    rustfmt = /usr/lib/rust-1.89/bin/rustfmt
    bindgen = /lib/bindgen-0.71/bin/bindgen
    
  8. (questing) Set Rust build tool paths in debian/debian.asahi-arm/rules.d/arm64.mk:
    rustc = /usr/lib/rust-1.89/bin/rustc
    rustfmt = /usr/lib/rust-1.89/bin/rustfmt
    
  9. Update debian/debian.asahi-arm/dkms-versions:
    zfs-linux 2.4.1-1ubuntu1 modulename=zfs debpath=pool/universe/z/%package%/zfs-dkms_%version%_all.deb arch=amd64 arch=arm64 arch=ppc64el arch=s390x rprovides=spl-modules rprovides=spl-dkms rprovides=zfs-modules rprovides=zfs-dkms
    v4l2loopback 0.15.3-1ubuntu1 modulename=v4l2loopback debpath=pool/universe/v/%package%/v4l2loopback-dkms_%version%_all.deb arch=amd64 rprovides=v4l2loopback-modules rprovides=v4l2loopback-dkms
    
  10. Add changelog entry in debian.asahi-arm/changelog:
    linux-asahi-arm (6.18.0-1001.1) noble; urgency=medium
    
      * Bump to asahi-6.18.15-1
      * Build for noble
    
     -- Andreas Schröder <andreas@kernelpanik.net>  Wed, 12 Mar 2026 00:18:00 +0100
    
  11. Build, see https://discourse.ubuntu.com/t/how-to-build-your-own-ubuntu-concept-x-elite-kernel/49941 for some discussion on building kernels and config management
    sudo apt install libtraceevent-dev libtracefs-dev libbpf-dev libpci-dev libaudit-dev libcap-dev libdebuginfod-dev libiberty-dev libnewt-dev libnuma-dev libunwind8-dev pahole bindgen-0.71 rust-1.89-all rust-1.89-src
    export PATH=/lib/bindgen-0.71/bin:/usr/lib/rust-1.89/bin:$PATH
    fakeroot make rustavailable
    fakeroot ./debian/rules clean
    ./debian/rules updateconfigs
    
  12. (noble) Remove options from debian.asahi-arm/config/annotations:
    CONFIG_DRM_MSM_VALIDATE_XML
    
  13. (questing) Remove options from debian.asahi-arm/config/annotations:
    CONFIG_DRM_MSM_VALIDATE_XML
    CONFIG_CC_HAS_COUNTED_BY
    CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT
    CONFIG_CC_HAS_MULTIDIMENSIONAL_NONSTRING
    CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT
    CONFIG_RELR
    CONFIG_RUSTC_LLVM_VERSION
    CONFIG_TOOLS_SUPPORT_RELR
    
  14. Build binary packages:
    dpkg-buildpackage -b -nc
    
  15. Install packages and test booting the new kernel:
    sudo apt install ../linux-*6.18.0*.deb
    
  16. Build source package:
    dpkg-buildpackage -S
    
  17. Upload source package to PPA:
    dput ppa:kaazoo/ubuntu-asahi-kernel-updates ../linux-asahi-arm_6.18.0-1001.1_source.changes
    

Kernel meta package

  1. Download source package from older release:
    pull-ppa-source --ppa vpeixoto/asahi linux-meta-asahi-arm noble
    
  2. Copy directory:
    cp -av linux-meta-asahi-arm-6.17.0.1001.1 linux-meta-asahi-arm-6.18.0.1001.1
    cd linux-meta-asahi-arm-6.18.0.1001.1
    
  3. Edit debian/control and replace version:
    $ diff -urN linux-meta-asahi-arm-6.17.0.1001.1/debian/control linux-meta-asahi-arm-6.18.0.1001.1/debian/control
    --- linux-meta-asahi-arm-6.17.0.1001.1/debian/control	2026-03-11 23:52:16.978074975 +0100
    +++ linux-meta-asahi-arm-6.18.0.1001.1/debian/control	2026-03-18 21:10:07.275970638 +0100
    @@ -5,8 +5,8 @@
     Standards-Version: 3.9.8
     Build-Depends: dpkg (>= 1.13.19), debhelper (>= 9), gawk
     Build-Depends-Arch:
    - linux-asahi-arm-headers-6.17.0-1001,
    - linux-headers-6.17.0-1001-asahi-arm,
    + linux-asahi-arm-headers-6.18.0-1001,
    + linux-headers-6.18.0-1001-asahi-arm,
     Vcs-Git: git://git.launchpad.net/~ubuntu-asahi/+git/linux-meta-asahi-arm -b asahi-arm-6.12
    
     Package: linux-headers-apple-arm
    @@ -40,7 +40,7 @@
     Description: Complete Asahi ARM Linux kernel and headers (dummy transitional packages)
      Transitional package for upgrades from linux-apple-arm to linux-asahi-arm.
    
    -Package: linux-headers-asahi-arm-6.17
    +Package: linux-headers-asahi-arm-6.18
     Architecture: arm64
     Section: kernel
     Depends: ${misc:Depends}, linux-headers-${kernel-abi-version}-asahi-arm
    @@ -48,7 +48,7 @@
      This package will always depend on the latest Asahi ARM kernel headers
      available.
    
    -Package: linux-image-asahi-arm-6.17
    +Package: linux-image-asahi-arm-6.18
     Architecture: arm64
     Section: kernel
     Provides: ${dkms:v4l2loopback-modules} ${dkms:zfs-modules} ${dkms:virtualbox-guest-modules} ${dkms:wireguard-linux-compat-modules}
    @@ -57,7 +57,7 @@
      This package will always depend on the latest Asahi ARM kernel image
      available.
    
    -Package: linux-tools-asahi-arm-6.17
    +Package: linux-tools-asahi-arm-6.18
     Architecture: arm64
     Section: kernel
     Provides: linux-tools
    @@ -66,11 +66,11 @@
      This package will always depend on the latest Asahi ARM kernel tools
      available.
    
    -Package: linux-asahi-arm-6.17
    +Package: linux-asahi-arm-6.18
     Architecture: arm64
     Section: kernel
     Provides: kernel-testing--linux-asahi-arm--full--asahi-arm,
    -Depends: ${misc:Depends}, linux-image-asahi-arm-6.17 (= ${binary:Version}), linux-headers-asahi-arm-6.17 (= ${binary:Version})
    +Depends: ${misc:Depends}, linux-image-asahi-arm-6.18 (= ${binary:Version}), linux-headers-asahi-arm-6.18 (= ${binary:Version})
     Description: Complete Asahi ARM Linux kernel and headers
      This package will always depend on the latest complete Asahi ARM Linux kernel
      and headers.
    
  4. Update debian/dkms-versions:
    zfs-linux 2.4.1-1ubuntu1 modulename=zfs debpath=pool/universe/z/%package%/zfs-dkms_%version%_all.deb arch=amd64 arch=arm64 arch=ppc64el arch=s390x rprovides=spl-modules rprovides=spl-dkms rprovides=zfs-modules rprovides=zfs-dkms
    v4l2loopback 0.15.3-1ubuntu1 modulename=v4l2loopback debpath=pool/universe/v/%package%/v4l2loopback-dkms_%version%_all.deb arch=amd64 rprovides=v4l2loopback-modules rprovides=v4l2loopback-dkms
    
  5. Update kernel major version in debian/debian.asahi-arm/variants:
    -6.18
    
  6. Update debian/changelog:
    linux-meta-asahi-arm (6.18.0.1001.1) noble; urgency=medium
    
      * Bump ABI 6.18.0-1001
    
     -- Andreas Schröder <andreas@kernelpanik.net>  Tue, 17 Mar 2026 07:54:00 +0100
    
  7. Build source package:
    dpkg-buildpackage -S
    
  8. Upload source package to PPA:
    dput ppa:kaazoo/ubuntu-asahi-kernel-updates ../linux-meta-asahi-arm_6.18.0.1001.1_source.changes
    

Kernel package for tag asahi-6.19.9-2

  1. Find Ubuntu kernel with version 6.19.x in https://code.launchpad.net/~ubuntu-kernel
    There is the "bridge-next" branch for resolute, which is based on 6.19.8:
    cd linux-ubuntu-resolute-bridge-next
    cp -av debian.asahi-arm debian.asahi-arm_backup
    git checkout bridge-next
    git fetch
    git reset --hard origin/bridge-next
    
  2. Rebase all the Asahi changes on top of that:
    git fetch asahi
    git checkout -b ubuntu-asahi-6.19.9-2 asahi-6.19.9-2
    git rebase -X ours bridge-next
    
  3. Copy debian.asahi-arm directory from old Ubuntu Asahi kernel to this newly merged one:
    mv debian.asahi-arm_backup debian.asahi-arm
    
  4. Update debian/debian.env to point to debian.asahi-arm:
    DEBIAN=debian.asahi-arm
    
  5. Update kernel major version in debian/debian.asahi-arm/variants:
    -6.19
    
  6. Fix security/apparmor/include/policy_unpack.h:
    diff --git a/security/apparmor/include/policy_unpack.h b/security/apparmor/include/policy_unpack.h
    index c24fd23486db..f48c96b7356e 100644
    --- a/security/apparmor/include/policy_unpack.h
    +++ b/security/apparmor/include/policy_unpack.h
    @@ -181,12 +181,6 @@ static inline void aa_put_profile_loaddata(struct aa_loaddata *data)
                    kref_put(&data->pcount, aa_ploaddata_kref);
     }
    
    -static inline void aa_put_profile_loaddata(struct aa_loaddata *data)
    -{
    -       if (data)
    -               kref_put(&data->pcount, aa_ploaddata_kref);
    -}
    -
     #if IS_ENABLED(CONFIG_KUNIT)
     bool aa_inbounds(struct aa_ext *e, size_t size);
     size_t aa_unpack_u16_chunk(struct aa_ext *e, char **chunk);
    
  7. Fix security/apparmor/policy_unpack.c:
    diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c
    index 012619b17884..195bfa2cd186 100644
    index 012619b17884..195bfa2cd186 100644
    --- a/security/apparmor/policy_unpack.c
    +++ b/security/apparmor/policy_unpack.c
    @@ -145,33 +145,6 @@ static void do_ploaddata_rmfs(struct work_struct *work)
            aa_put_i_loaddata(d);
     }
    
    -void aa_ploaddata_kref(struct kref *kref)
    -{
    -       struct aa_loaddata *d = container_of(kref, struct aa_loaddata, pcount);
    -
    -       do_loaddata_free(d);
    -}
    -
    -/*
    - * need to take the ns mutex lock which is NOT safe most places that
    - * put_loaddata is called, so we have to delay freeing it
    - */
    -static void do_ploaddata_rmfs(struct work_struct *work)
    -{
    -       struct aa_loaddata *d = container_of(work, struct aa_loaddata, work);
    -       struct aa_ns *ns = aa_get_ns(d->ns);
    -
    -       if (ns) {
    -               mutex_lock_nested(&ns->lock, ns->level);
    -               /* remove fs ref to loaddata */
    -               __aa_fs_remove_rawdata(d);
    -               mutex_unlock(&ns->lock);
    -               aa_put_ns(ns);
    -       }
    -       /* called by dropping last pcount, so drop its associated icount */
    -       aa_put_i_loaddata(d);
    -}
    -
     void aa_ploaddata_kref(struct kref *kref)
     {
            struct aa_loaddata *d = container_of(kref, struct aa_loaddata, pcount);
    
  8. (noble) Set Rust build tool paths in debian/debian.asahi-arm/rules.d/arm64.mk:
    rustc = /usr/lib/rust-1.89/bin/rustc
    rustfmt = /usr/lib/rust-1.89/bin/rustfmt
    bindgen = /lib/bindgen-0.71/bin/bindgen
    
  9. (questing) Set Rust build tool paths in debian/debian.asahi-arm/rules.d/arm64.mk:
    rustc = /usr/lib/rust-1.89/bin/rustc
    rustfmt = /usr/lib/rust-1.89/bin/rustfmt
    
  10. Add changelog entry in debian.asahi-arm/changelog:
    linux-asahi-arm (6.19.0-1001.1) noble; urgency=medium
    
      * Bump to asahi-6.19.9-2
      * Build for noble
    
     -- Andreas Schröder <andreas@kernelpanik.net>  Wed, 25 Mar 2026 07:57:00 +0100
    
    
  11. Build, see https://discourse.ubuntu.com/t/how-to-build-your-own-ubuntu-concept-x-elite-kernel/49941 for some discussion on building kernels and config management
    export PATH=/lib/bindgen-0.71/bin:/usr/lib/rust-1.89/bin:$PATH
    fakeroot make rustavailable
    fakeroot ./debian/rules clean
    ./debian/rules updateconfigs
    
  12. (noble) Remove options from debian.asahi-arm/config/annotations:
    CONFIG_DRM_MSM_VALIDATE_XML
    
  13. (questing) Remove options from debian.asahi-arm/config/annotations:
    CONFIG_DRM_MSM_VALIDATE_XML
    CONFIG_CC_HAS_COUNTED_BY
    CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT
    CONFIG_CC_HAS_MULTIDIMENSIONAL_NONSTRING
    CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT
    CONFIG_RELR
    CONFIG_RUSTC_LLVM_VERSION
    CONFIG_TOOLS_SUPPORT_RELR
    
  14. Build binary packages:
    dpkg-buildpackage -b -nc
    
  15. Install packages and test booting the new kernel:
    sudo apt install ../linux-*6.19.0*.deb
    
  16. Build source package:
    dpkg-buildpackage -S
    
  17. Upload source package to PPA:
    dput ppa:kaazoo/ubuntu-asahi-kernel-updates ../linux-asahi-arm_6.19.0-1001.1_source.changes
    

Kernel meta package

  1. Copy directory:
    cp -av linux-meta-asahi-arm-6.18.0.1001.1 linux-meta-asahi-arm-6.19.0.1001.1
    cd linux-meta-asahi-arm-6.19.0.1001.1
    
  2. Edit debian/control and replace version:
    $ diff -urN linux-meta-asahi-arm-6.18.0.1001.1/debian/control linux-meta-asahi-arm-6.19.0.1001.1/debian/control
    --- linux-meta-asahi-arm-6.18.0.1001.1/debian/control	2026-03-11 23:52:16.978074975 +0100
    +++ linux-meta-asahi-arm-6.19.0.1001.1/debian/control	2026-03-18 21:10:07.275970638 +0100
    @@ -5,8 +5,8 @@
     Standards-Version: 3.9.8
     Build-Depends: dpkg (>= 1.13.19), debhelper (>= 9), gawk
     Build-Depends-Arch:
    - linux-asahi-arm-headers-6.18.0-1001,
    - linux-headers-6.18.0-1001-asahi-arm,
    + linux-asahi-arm-headers-6.19.0-1001,
    + linux-headers-6.19.0-1001-asahi-arm,
     Vcs-Git: git://git.launchpad.net/~ubuntu-asahi/+git/linux-meta-asahi-arm -b asahi-arm-6.12
    
     Package: linux-headers-apple-arm
    @@ -40,7 +40,7 @@
     Description: Complete Asahi ARM Linux kernel and headers (dummy transitional packages)
      Transitional package for upgrades from linux-apple-arm to linux-asahi-arm.
    
    -Package: linux-headers-asahi-arm-6.18
    +Package: linux-headers-asahi-arm-6.19
     Architecture: arm64
     Section: kernel
     Depends: ${misc:Depends}, linux-headers-${kernel-abi-version}-asahi-arm
    @@ -48,7 +48,7 @@
      This package will always depend on the latest Asahi ARM kernel headers
      available.
    
    -Package: linux-image-asahi-arm-6.18
    +Package: linux-image-asahi-arm-6.19
     Architecture: arm64
     Section: kernel
     Provides: ${dkms:v4l2loopback-modules} ${dkms:zfs-modules} ${dkms:virtualbox-guest-modules} ${dkms:wireguard-linux-compat-modules}
    @@ -57,7 +57,7 @@
      This package will always depend on the latest Asahi ARM kernel image
      available.
    
    -Package: linux-tools-asahi-arm-6.18
    +Package: linux-tools-asahi-arm-6.19
     Architecture: arm64
     Section: kernel
     Provides: linux-tools
    @@ -66,11 +66,11 @@
      This package will always depend on the latest Asahi ARM kernel tools
      available.
    
    -Package: linux-asahi-arm-6.18
    +Package: linux-asahi-arm-6.19
     Architecture: arm64
     Section: kernel
     Provides: kernel-testing--linux-asahi-arm--full--asahi-arm,
    -Depends: ${misc:Depends}, linux-image-asahi-arm-6.18 (= ${binary:Version}), linux-headers-asahi-arm-6.17 (= ${binary:Version})
    +Depends: ${misc:Depends}, linux-image-asahi-arm-6.19 (= ${binary:Version}), linux-headers-asahi-arm-6.18 (= ${binary:Version})
     Description: Complete Asahi ARM Linux kernel and headers
      This package will always depend on the latest complete Asahi ARM Linux kernel
      and headers.
    
  3. Update kernel major version in debian/debian.asahi-arm/variants:
    -6.19
    
  4. Update debian/changelog:
    linux-meta-asahi-arm (6.19.0.1001.1) noble; urgency=medium
    
      * Bump ABI 6.19.0-1001
    
     -- Andreas Schröder <andreas@kernelpanik.net>  Wed, 25 Mar 2026 21:24:00 +0100
    
  5. Build source package:
    dpkg-buildpackage -S
    
  6. Upload source package to PPA:
    dput ppa:kaazoo/ubuntu-asahi-kernel-updates ../linux-meta-asahi-arm_6.19.0.1001.1_source.changes
    

Kernel package for tag asahi-6.19.14-2

  • Basically same approach as before, but with additional fix required:
diff --git a/fs/overlayfs/params.c b/fs/overlayfs/params.c
index 32a6e2d5ec4b..3eb5c2f2eb7c 100644
--- a/fs/overlayfs/params.c
+++ b/fs/overlayfs/params.c
@@ -827,6 +827,7 @@ int ovl_init_fs_context(struct fs_context *fc)
        ofs->config.nfs_export          = ovl_nfs_export_def;
        ofs->config.xino                = ovl_xino_def();
        ofs->config.metacopy            = ovl_metacopy_def;
+       ofs->config.fsync_mode          = ovl_fsync_mode_def();
        if (fc->user_ns != &init_user_ns)
                ofs->config.userxattr = true;

Kernel package for tag asahi-7.0.8-1

  1. Find Ubuntu kernel with version 7.0.x in https://code.launchpad.net/~ubuntu-kernel
    There is the "master-next" branch for resolute, which is based on 7.0.x:
    cd linux-ubuntu-resolute-bridge-next
    cp -av debian.asahi-arm debian.asahi-arm_backup
    git fetch --all
    git fetch origin refs/heads/master-next:refs/remotes/origin/master-next
    git checkout -b master-next origin/master-next
    
  2. Rebase all the Asahi changes on top of that:
    git checkout -b ubuntu-asahi-7.0.8-1 asahi-7.0.8-1
    git rebase -X ours master-next
    
  3. Copy debian.asahi-arm directory from old Ubuntu Asahi kernel to this newly merged one:
    mv debian.asahi-arm_backup debian.asahi-arm
    
  4. Update debian/debian.env to point to debian.asahi-arm:
    DEBIAN=debian.asahi-arm
    
  5. Update kernel major version in debian/debian.asahi-arm/variants:
    -7.0
    
  6. (noble) Set Rust build tool paths in debian/debian.asahi-arm/rules.d/arm64.mk:
    rustc = /usr/lib/rust-1.89/bin/rustc
    rustfmt = /usr/lib/rust-1.89/bin/rustfmt
    bindgen = /lib/bindgen-0.71/bin/bindgen
    
  7. (questing) Set Rust build tool paths in debian/debian.asahi-arm/rules.d/arm64.mk:
    rustc = /usr/lib/rust-1.89/bin/rustc
    rustfmt = /usr/lib/rust-1.89/bin/rustfmt
    
  8. Add changelog entry in debian.asahi-arm/changelog:
    linux-asahi-arm (7.0.0-1001.1) noble; urgency=medium
    
      * Bump to asahi-7.0.8-1
      * Build for noble
    
     -- Andreas Schröder <andreas@kernelpanik.net>  Sun, 17 May 2026 10:26:00 +0200
    
    
  9. Build, see https://discourse.ubuntu.com/t/how-to-build-your-own-ubuntu-concept-x-elite-kernel/49941 for some discussion on building kernels and config management
    export PATH=/lib/bindgen-0.71/bin:/usr/lib/rust-1.89/bin:$PATH
    fakeroot make rustavailable
    fakeroot ./debian/rules clean
    ./debian/rules updateconfigs
    
  10. (noble) Remove options from debian.asahi-arm/config/annotations:
    CONFIG_DRM_MSM_VALIDATE_XML
    
  11. (questing) Remove options from debian.asahi-arm/config/annotations:
    CONFIG_DRM_MSM_VALIDATE_XML
    CONFIG_CC_HAS_COUNTED_BY
    CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT
    CONFIG_CC_HAS_MULTIDIMENSIONAL_NONSTRING
    CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT
    CONFIG_RELR
    CONFIG_RUSTC_LLVM_VERSION
    CONFIG_TOOLS_SUPPORT_RELR
    
  12. Build binary packages:
    dpkg-buildpackage -b -nc
    
  13. Install packages and test booting the new kernel:
    sudo apt install ../linux-*7.0.0*.deb
    
  14. Build source package:
    dpkg-buildpackage -S
    
  15. Upload source package to PPA:
    dput ppa:kaazoo/ubuntu-asahi-kernel-updates ../linux-asahi-arm_7.0.0-1001.1_source.changes
    

Kernel meta package

  1. Copy directory:
    cp -av linux-meta-asahi-arm-6.19.0.1003.1 linux-meta-asahi-arm-7.0.0.1001.1
    cd linux-meta-asahi-arm-7.0.0.1001.1
    
  2. Edit debian/control and replace version:
    diff -urN linux-meta-asahi-arm-6.19.0.1003.1/debian/control linux-meta-asahi-arm-7.0.0.1001.1/debian/control
    --- linux-meta-asahi-arm-6.19.0.1003.1/debian/control	2026-05-11 13:34:09.985566150 +0200
    +++ linux-meta-asahi-arm-7.0.0.1001.1/debian/control	2026-05-17 15:33:09.226944262 +0200
    @@ -5,8 +5,8 @@
     Standards-Version: 3.9.8
     Build-Depends: dpkg (>= 1.13.19), debhelper (>= 9), gawk
     Build-Depends-Arch:
    - linux-asahi-arm-headers-6.19.0-1003,
    - linux-headers-6.19.0-1003-asahi-arm,
    + linux-asahi-arm-headers-7.0.0-1001,
    + linux-headers-7.0.0-1001-asahi-arm,
     Vcs-Git: git://git.launchpad.net/~ubuntu-asahi/+git/linux-meta-asahi-arm -b asahi-arm-6.12
    
     Package: linux-headers-apple-arm
    @@ -40,7 +40,7 @@
     Description: Complete Asahi ARM Linux kernel and headers (dummy transitional packages)
      Transitional package for upgrades from linux-apple-arm to linux-asahi-arm.
    
    -Package: linux-headers-asahi-arm-6.19
    +Package: linux-headers-asahi-arm-7.0
     Architecture: arm64
     Section: kernel
     Depends: ${misc:Depends}, linux-headers-${kernel-abi-version}-asahi-arm
    @@ -48,7 +48,7 @@
      This package will always depend on the latest Asahi ARM kernel headers
      available.
    
    -Package: linux-image-asahi-arm-6.19
    +Package: linux-image-asahi-arm-7.0
     Architecture: arm64
     Section: kernel
     Provides: ${dkms:v4l2loopback-modules} ${dkms:zfs-modules} ${dkms:virtualbox-guest-modules} ${dkms:wireguard-linux-compat-modules}
    @@ -57,7 +57,7 @@
      This package will always depend on the latest Asahi ARM kernel image
      available.
    
    -Package: linux-tools-asahi-arm-6.19
    +Package: linux-tools-asahi-arm-7.0
     Architecture: arm64
     Section: kernel
     Provides: linux-tools
    @@ -66,11 +66,11 @@
      This package will always depend on the latest Asahi ARM kernel tools
      available.
    
    -Package: linux-asahi-arm-6.19
    +Package: linux-asahi-arm-7.0
     Architecture: arm64
     Section: kernel
     Provides: kernel-testing--linux-asahi-arm--full--asahi-arm,
    -Depends: ${misc:Depends}, linux-image-asahi-arm-6.19 (= ${binary:Version}), linux-headers-asahi-arm-6.19 (= ${binary:Version})
    +Depends: ${misc:Depends}, linux-image-asahi-arm-7.0 (= ${binary:Version}), linux-headers-asahi-arm-7.0 (= ${binary:Version})
     Description: Complete Asahi ARM Linux kernel and headers
      This package will always depend on the latest complete Asahi ARM Linux kernel
      and headers.
    
  3. Update kernel major version in debian/debian.asahi-arm/variants:
    -7.0
    
  4. Update debian/changelog:
    linux-meta-asahi-arm (7.0.0.1001.1) noble; urgency=medium
    
      * Bump ABI 7.0.0.1001.1
    
     -- Andreas Schröder <andreas@kernelpanik.net>  Sun, 17 May 2026 13:39:00 +0200
    
  5. Build source package:
    dpkg-buildpackage -S
    
  6. Upload source package to PPA:
    dput ppa:kaazoo/ubuntu-asahi-kernel-updates ../linux-meta-asahi-arm_7.0.0.1001.1_source.changes