diff --git a/centos7-ppc64-common.yaml b/centos7-ppc64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8487b84df49ff9c1cd7f346abd7bddb37f3e2648
--- /dev/null
+++ b/centos7-ppc64-common.yaml
@@ -0,0 +1,55 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos7 ppc64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/ppc64le/centos-7.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 kadeploy environment parameters
+  # Grid'5000 environment arch
+  g5k_image_arch: ppc64
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_postinst_compression: "gzip"
+  g5k_kernel_params: "biosdevname=0 crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/centos7-ppc64-min.yaml b/centos7-ppc64-min.yaml
index 6af40f5d8169c30c738575c9abf4b6640b3d5028..656e6b7f1152ec752e13b44ed1f75f46bc67bb23 100644
--- a/centos7-ppc64-min.yaml
+++ b/centos7-ppc64-min.yaml
@@ -6,50 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/ppc64le/centos-7.yaml
+extend: centos7-ppc64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 kadeploy environment parameters
-  # Grid'5000 environment arch
-  g5k_image_arch: ppc64
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_postinst_compression: "gzip"
-  g5k_kernel_params: "biosdevname=0 crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/centos7-ppc64-nfs.yaml b/centos7-ppc64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fcb4784c6475e36530cf476bc0a2ec3ea6fb4221
--- /dev/null
+++ b/centos7-ppc64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos7 ppc64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: centos7-ppc64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/centos7-x64-common.yaml b/centos7-x64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a546e4bd4f5303430a451d153a16e5a23fa4e147
--- /dev/null
+++ b/centos7-x64-common.yaml
@@ -0,0 +1,55 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos7 x64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/centos-7.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 kadeploy environment parameters
+  # Grid'5000 environment arch
+  g5k_image_arch: x64
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_postinst_compression: "gzip"
+  g5k_kernel_params: "biosdevname=0 crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/centos7-x64-min.yaml b/centos7-x64-min.yaml
index 64a8d9863df24e603b807f4cf50e0f2add54af24..6dca7bcba200c0bdb3a16b5dc986abfeb25b0325 100644
--- a/centos7-x64-min.yaml
+++ b/centos7-x64-min.yaml
@@ -6,50 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/centos-7.yaml
+extend: centos7-x64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 kadeploy environment parameters
-  # Grid'5000 environment arch
-  g5k_image_arch: x64
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_postinst_compression: "gzip"
-  g5k_kernel_params: "biosdevname=0 crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/centos7-x64-nfs.yaml b/centos7-x64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..73d10b13c865d9408ca34c17068da200044dcd08
--- /dev/null
+++ b/centos7-x64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos7 x64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: centos7-x64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/centos8-arm64-common.yaml b/centos8-arm64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..338686010ef8e0f6b35a1fc61b26d0b3d4cbea48
--- /dev/null
+++ b/centos8-arm64-common.yaml
@@ -0,0 +1,56 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos8 ARM64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/aarch64/centos-8.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: arm64
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/centos8-arm64-min.yaml b/centos8-arm64-min.yaml
index 3c10805daa31f67dce567bf0a4bd3a3fb57567aa..ed021c97f2d6501c8c47114d2ae6bf54ef9a8026 100644
--- a/centos8-arm64-min.yaml
+++ b/centos8-arm64-min.yaml
@@ -6,51 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/aarch64/centos-8.yaml
+extend: centos8-arm64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: arm64
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_kernel_params: "crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  g5k_no_chroot_for_grub: "true"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/centos8-arm64-nfs.yaml b/centos8-arm64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..012fba7aeeaebeba9549719e88a0cdb5d22c96ca
--- /dev/null
+++ b/centos8-arm64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos8 arm64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: centos8-arm64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/centos8-ppc64-common.yaml b/centos8-ppc64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3b56e4ccb75b2bceb2a12ff52694eb73b677f0be
--- /dev/null
+++ b/centos8-ppc64-common.yaml
@@ -0,0 +1,56 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos7 ppc64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/ppc64le/centos-8.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: ppc64
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/centos8-ppc64-min.yaml b/centos8-ppc64-min.yaml
index 6af21062abb9904525b712db2cd6ede6bca184d5..f53035cf8ff42096c912ad0a02b6152488c42ce5 100644
--- a/centos8-ppc64-min.yaml
+++ b/centos8-ppc64-min.yaml
@@ -6,51 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/ppc64le/centos-8.yaml
+extend: centos8-ppc64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: ppc64
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_kernel_params: "crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  g5k_no_chroot_for_grub: "true"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/centos8-ppc64-nfs.yaml b/centos8-ppc64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8a6b3ce9a8714513d0bfeb567110d309c44dfb92
--- /dev/null
+++ b/centos8-ppc64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos8 ppc64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: centos8-ppc64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/centos8-x64-common.yaml b/centos8-x64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..482ba21608c219270e2660c0db48d20f476b5b36
--- /dev/null
+++ b/centos8-x64-common.yaml
@@ -0,0 +1,56 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos8 x64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/centos-8.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: x64
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/centos8-x64-min.yaml b/centos8-x64-min.yaml
index 129a0355f02cc92161f7b51ef8f859e0b1317706..2d2a88cd9d122b79ed7291e755c8551317fbb530 100644
--- a/centos8-x64-min.yaml
+++ b/centos8-x64-min.yaml
@@ -6,51 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/centos-8.yaml
+extend: centos8-x64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: x64
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_kernel_params: "crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  g5k_no_chroot_for_grub: "true"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/centos8-x64-nfs.yaml b/centos8-x64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..373a38dd0ecd881728b3eafbe4b27456c707dd75
--- /dev/null
+++ b/centos8-x64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos8 x64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: centos8-x64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/centosstream8-x64-common.yaml b/centosstream8-x64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4df59abff78550acf7beeabc89ca8b943b9760ec
--- /dev/null
+++ b/centosstream8-x64-common.yaml
@@ -0,0 +1,63 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos Stream 8 x64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/centos-stream-8.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: x64
+  g5k_distrib: centosstream
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+  include_steps:
+    - $${distrib}/$${release}
+    - $${distrib}
+    - centos/$${release}
+    - centos
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/centosstream8-x64-min.yaml b/centosstream8-x64-min.yaml
index 8785b9246d860e065229596696304ccdd825e46d..394c00d15972d6cabb98908e9d33b81396e59a5b 100644
--- a/centosstream8-x64-min.yaml
+++ b/centosstream8-x64-min.yaml
@@ -6,58 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/centos-stream-8.yaml
+extend: centosstream8-x64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: x64
-  g5k_distrib: centosstream
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_kernel_params: "crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  g5k_no_chroot_for_grub: "true"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
-
-  include_steps:
-    - $${distrib}/$${release}
-    - $${distrib}
-    - centos/$${release}
-    - centos
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/centosstream8-x64-nfs.yaml b/centosstream8-x64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1ebc689e7a115c6d676a84440a6b997437bc0f10
--- /dev/null
+++ b/centosstream8-x64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos Stream 9 x64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ./centosstream8-x64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/centosstream9-x64-common.yaml b/centosstream9-x64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..99e09426af08f186d2da276b05c435632a37fbc6
--- /dev/null
+++ b/centosstream9-x64-common.yaml
@@ -0,0 +1,63 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos Stream 9 x64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/centos-stream-9.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: x64
+  g5k_distrib: centosstream
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+  include_steps:
+    - $${distrib}/$${release}
+    - $${distrib}
+    - centos/$${release}
+    - centos
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/centosstream9-x64-min.yaml b/centosstream9-x64-min.yaml
index 0d2ecd4d067189328782a3de4f48e702b4d02072..7030adb917398446a8d8de4767087c9036fae15f 100644
--- a/centosstream9-x64-min.yaml
+++ b/centosstream9-x64-min.yaml
@@ -6,58 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/centos-stream-9.yaml
+extend: ./centosstream9-x64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: x64
-  g5k_distrib: centosstream
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_kernel_params: "crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  g5k_no_chroot_for_grub: "true"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
-
-  include_steps:
-    - $${distrib}/$${release}
-    - $${distrib}
-    - centos/$${release}
-    - centos
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/centosstream9-x64-nfs.dsc b/centosstream9-x64-nfs.dsc
new file mode 100644
index 0000000000000000000000000000000000000000..8e9f7a555933dc0bba76eea3a3d82d016b10c209
--- /dev/null
+++ b/centosstream9-x64-nfs.dsc
@@ -0,0 +1,27 @@
+---
+name: centosstream9-nfs
+alias: centosstream9-x64-nfs
+arch: x86_64
+version: 1111111111
+description: centos-stream 9 (9) for x86_64 - nfs
+author: support-staff@lists.grid5000.fr
+visibility: shared
+destructive: false
+os: linux
+image:
+  file: /home/apetit/environments-recipes/build/centosstream9-x64-nfs/centosstream9-x64-nfs.tar.zst
+  kind: tar
+  compression: zstd
+postinstalls:
+- archive: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  compression: gzip
+  script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+boot:
+  kernel_params: "crashkernel=no"
+  kernel: /vmlinuz
+  initrd: /initramfs.img
+filesystem: ext4
+partition_type: 131
+multipart: false
+custom_variables:
+  BOOTLOADER_NO_GRUB_FROM_DEST: '1'
diff --git a/centosstream9-x64-nfs.yaml b/centosstream9-x64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e06f08f98dcc84c0ab8de6e378acba83913a726c
--- /dev/null
+++ b/centosstream9-x64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos Stream 9 x64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ./centosstream9-x64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/debiantesting-arm64-common.yaml b/debiantesting-arm64-common.yaml
index d222cb8a0f4d00bc6dea27d56c11c9eef2fc3cd5..8107bf77ffb1e338eb7c1689344559febcc673e2 100644
--- a/debiantesting-arm64-common.yaml
+++ b/debiantesting-arm64-common.yaml
@@ -21,7 +21,7 @@ global:
   g5k_image_arch: arm64
   g5k_release_number: testing
   # Grid'5000 environment description
-  g5k_description: "debian testing (future debian 12 bookworm) for arm64 - min"
+  g5k_description: "debian testing (future debian 12 bookworm) for arm64 - $${g5k_variant}"
   # Grid'5000 kadeploy environment parameters
   g5k_tar_path: server:///path/to/your/image
   g5k_tar_compression: "zstd"
diff --git a/debiantesting-ppc64-common.yaml b/debiantesting-ppc64-common.yaml
index 26ac297664bb2a9aff2fee654f0f57bc1adaf176..fd9de75c71e4990f43c81c253d039399ad256bb1 100644
--- a/debiantesting-ppc64-common.yaml
+++ b/debiantesting-ppc64-common.yaml
@@ -21,7 +21,7 @@ global:
   g5k_image_arch: ppc64
   g5k_release_number: testing
   # Grid'5000 environment description
-  g5k_description: "debian testing (future debian 12 bookworm) for ppc64 - min"
+  g5k_description: "debian testing (future debian 12 bookworm) for ppc64 - $${g5k_variant}"
   # Grid'5000 kadeploy environment parameters
   g5k_tar_path: server:///path/to/your/image
   g5k_tar_compression: "zstd"
diff --git a/debiantesting-x64-common.yaml b/debiantesting-x64-common.yaml
index a72d0213b945382044eb9b1d8e5df344266b4e28..0900597620d6691ec16949af91fc7f4795f7f26b 100644
--- a/debiantesting-x64-common.yaml
+++ b/debiantesting-x64-common.yaml
@@ -21,7 +21,7 @@ global:
   g5k_image_arch: x86_64
   g5k_release_number: testing
   # Grid'5000 environment description
-  g5k_description: "debian testing (future debian 12 bookworm) for x64 - min"
+  g5k_description: "debian testing (future debian 12 bookworm) for x64 - $${g5k_variant}"
   # Grid'5000 kadeploy environment parameters
   g5k_tar_path: server:///path/to/your/image
   g5k_tar_compression: "zstd"
diff --git a/rocky8-arm64-common.yaml b/rocky8-arm64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..93ac8617d5a9ecd8c026e8f8d9c701cb6b155593
--- /dev/null
+++ b/rocky8-arm64-common.yaml
@@ -0,0 +1,56 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Rocky Linux 8 arm64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/aarch64/rocky-8.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common 
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: arm64
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/rocky8-arm64-min.yaml b/rocky8-arm64-min.yaml
index 16f9a857747e4409b22c872c017784e2f22ab8d8..6151a4b1a0d18d8ba1e10b5ace3299d91bdeb3cb 100644
--- a/rocky8-arm64-min.yaml
+++ b/rocky8-arm64-min.yaml
@@ -6,51 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/aarch64/rocky-8.yaml
+extend: rocky8-arm64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: arm64
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_kernel_params: "crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  g5k_no_chroot_for_grub: "true"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/rocky8-arm64-nfs.yaml b/rocky8-arm64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d82f02ff78447f914140d7588d76658aefae8173
--- /dev/null
+++ b/rocky8-arm64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Rocky Linux 8 arm64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ./rocky8-arm64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/rocky8-x64-common.yaml b/rocky8-x64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6c2dcaa94c596fd86bf45e8169490ae0dd3efe22
--- /dev/null
+++ b/rocky8-x64-common.yaml
@@ -0,0 +1,56 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Rocky Linux 8 x64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/rocky-8.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: x64
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/rocky8-x64-min.yaml b/rocky8-x64-min.yaml
index 40f6a4ef809d52f47f6de979f7d187b4f7a76b65..2b9402523723701ad68f4d64f18e4705a8bb39df 100644
--- a/rocky8-x64-min.yaml
+++ b/rocky8-x64-min.yaml
@@ -6,51 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/rocky-8.yaml
+extend: rocky8-x64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: x64
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_kernel_params: "crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  g5k_no_chroot_for_grub: "true"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/rocky8-x64-nfs.yaml b/rocky8-x64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0a752a4838a1d07dde787434819e2aaace249dc3
--- /dev/null
+++ b/rocky8-x64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Rocky Linux 8 x64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ./rocky8-x64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/rocky9-x64-common.yaml b/rocky9-x64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..54e28d5a58de5c3a8a159b2575d914c3e04bf16f
--- /dev/null
+++ b/rocky9-x64-common.yaml
@@ -0,0 +1,56 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Rocky Linux 9 x64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/rocky-9.yaml
+
+global:
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common 
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: x64
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # password
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - create_kernel_symlinks
+  - "@base"
+  - configure_system
+  - install_packages
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - clean_dhcp_leases
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/rocky9-x64-min.yaml b/rocky9-x64-min.yaml
index cb9e836b8fa00bd4ee5729764f2116731ba05710..dd00ead7201f0cce3167a38160e006dabafac7e3 100644
--- a/rocky9-x64-min.yaml
+++ b/rocky9-x64-min.yaml
@@ -6,51 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/rocky-9.yaml
+extend: rocky9-x64-common.yaml
 
 global:
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: x64
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
-  g5k_kernel_params: "crashkernel=no"
-  g5k_kernel_path: "/vmlinuz"
-  g5k_initrd_path: "/initramfs.img"
-  g5k_no_chroot_for_grub: "true"
-  # Packages to install
-  packages: "zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # password
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
-  - create_kernel_symlinks
   - "@base"
-  - configure_system
-  - install_packages
-  - disable_kdump
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
-  - clean_dhcp_leases
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/rocky9-x64-nfs.yaml b/rocky9-x64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..afde82b0f7b9e78fe793b54d084a770d4cf92124
--- /dev/null
+++ b/rocky9-x64-nfs.yaml
@@ -0,0 +1,28 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Rocky Linux 9 x64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ./rocky9-x64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-utils autofs openldap-clients nss-pam-ldapd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net redhat --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+
+export:
+  - "@base"
diff --git a/steps/setup/centos/setup_g5k_ca_certificate.yaml b/steps/setup/centos/setup_g5k_ca_certificate.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..443e32f0d17b0d3e4f9c06bdee13000835bbd379
--- /dev/null
+++ b/steps/setup/centos/setup_g5k_ca_certificate.yaml
@@ -0,0 +1,5 @@
+- setup_g5k_ca_certificate:
+  - local2in:
+    - ../../steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
+    - /usr/share/pki/ca-trust-source/anchors/ca2019.grid5000.fr.crt
+  - exec_in: update-ca-trust
diff --git a/steps/setup/centos/setup_ldap.yaml b/steps/setup/centos/setup_ldap.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..84ef25fd85e9bcf695133407025dedd81e03a051
--- /dev/null
+++ b/steps/setup/centos/setup_ldap.yaml
@@ -0,0 +1,30 @@
+- setup_ldap:
+  - local2in:
+    - ../../steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
+    - /etc/openldap/certs/ca2019.grid5000.fr.cert
+  - local2in:
+    - ../../steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
+    - /etc/openldap/ldap.conf
+  - exec_in: |
+      sed -i 's|/etc/ldap/certificates/ca2019.grid5000.fr.cert|/etc/openldap/certs/ca2019.grid5000.fr.cert|' /etc/openldap/ldap.conf
+  - local2in:
+    - ../../steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
+    - /etc/nsswitch.conf
+  - local2in:
+    - ../../steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
+    - /etc/nslcd.conf
+  - exec_in: |
+      sed -i 's/^gid nslcd/gid ldap/' /etc/nslcd.conf
+      sed -i 's|/etc/ldap/certificates/ca2019.grid5000.fr.cert|/etc/openldap/certs/ca2019.grid5000.fr.cert|' /etc/nslcd.conf
+      systemctl enable nslcd
+  - local2in:
+    - ../../steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
+    - /etc/pam_ldap.conf
+  - local2in:
+    - ../../steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
+    - /etc/pam.d/common-auth
+  - local2in:
+    - ../../steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
+    - /etc/pam.d/common-password
+  - exec_in: |
+      systemctl enable autofs
diff --git a/ubuntu1804-arm64-common.yaml b/ubuntu1804-arm64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..95c97e7c9c49365030e619fa636deecf0fcad562
--- /dev/null
+++ b/ubuntu1804-arm64-common.yaml
@@ -0,0 +1,57 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 18.04 arm64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/aarch64/ubuntu-18.04.yaml
+
+global:
+  # Export format to generate
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common 
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: arm64
+  g5k_release_number: 1804
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
+  g5k_kernel_params: ""
+  g5k_kernel_path: "/boot/vmlinuz"
+  g5k_initrd_path: "/boot/initrd.img"
+  # packages to install
+  packages: "policykit-1 grub-efi-arm64-bin zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # passwords
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - configure_system
+  - fix_networkd
+  - configure_apt
+  - configure_g5k_apt_sources
+  - install_packages
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/ubuntu1804-arm64-min.yaml b/ubuntu1804-arm64-min.yaml
index 6405e416e4d79f27438a51be01b7bc06ced8ee0e..6562e12586434e22b35ec1f947d77ef9732c3304 100644
--- a/ubuntu1804-arm64-min.yaml
+++ b/ubuntu1804-arm64-min.yaml
@@ -6,52 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/aarch64/ubuntu-18.04.yaml
+extend: ubuntu1804-arm64-common.yaml
 
 global:
-  # Export format to generate
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: arm64
-  g5k_release_number: 1804
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
-  g5k_kernel_params: ""
-  g5k_kernel_path: "/boot/vmlinuz"
-  g5k_initrd_path: "/boot/initrd.img"
-  # packages to install
-  packages: "policykit-1 grub-efi-arm64-bin zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # passwords
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
   - "@base"
-  - configure_system
-  - fix_networkd
-  - configure_apt
-  - configure_g5k_apt_sources
-  - install_packages
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/ubuntu1804-arm64-nfs.yaml b/ubuntu1804-arm64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7153daeb2b27257598680312968c4b0ea3359772
--- /dev/null
+++ b/ubuntu1804-arm64-nfs.yaml
@@ -0,0 +1,29 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 18.04 arm64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ubuntu1804-arm64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-common autofs nslcd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net netplan --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+  - disable_nvme_multipath
+
+export:
+  - "@base"
diff --git a/ubuntu1804-ppc64-common.yaml b/ubuntu1804-ppc64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..532fab6096cfee7a919940b9086c4cdc1ca61f23
--- /dev/null
+++ b/ubuntu1804-ppc64-common.yaml
@@ -0,0 +1,57 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 18.04 ppc64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/ppc64le/ubuntu-18.04.yaml
+
+global:
+  # Export format to generate
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: ppc64
+  g5k_release_number: 1804
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
+  g5k_kernel_params: ""
+  g5k_kernel_path: "/boot/vmlinux"
+  g5k_initrd_path: "/boot/initrd.img"
+  # packages to install
+  packages: "policykit-1 zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # passwords
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - configure_system
+  - fix_networkd
+  - configure_apt
+  - configure_g5k_apt_sources
+  - install_packages
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/ubuntu1804-ppc64-min.yaml b/ubuntu1804-ppc64-min.yaml
index 23596c34b223cba5073f5508bb01e60671d16144..047bc5ba9759c2064e6c2e7a4d0e164d0a818aa1 100644
--- a/ubuntu1804-ppc64-min.yaml
+++ b/ubuntu1804-ppc64-min.yaml
@@ -6,52 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/ppc64le/ubuntu-18.04.yaml
+extend: ubuntu1804-ppc64-common.yaml
 
 global:
-  # Export format to generate
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: ppc64
-  g5k_release_number: 1804
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
-  g5k_kernel_params: ""
-  g5k_kernel_path: "/boot/vmlinux"
-  g5k_initrd_path: "/boot/initrd.img"
-  # packages to install
-  packages: "policykit-1 zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # passwords
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
   - "@base"
-  - configure_system
-  - fix_networkd
-  - configure_apt
-  - configure_g5k_apt_sources
-  - install_packages
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/ubuntu1804-ppc64-nfs.yaml b/ubuntu1804-ppc64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..44f4e6667a87aaa3828377103b7d9e53163b9e7e
--- /dev/null
+++ b/ubuntu1804-ppc64-nfs.yaml
@@ -0,0 +1,29 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 18.04 ppc64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ubuntu1804-ppc64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-common autofs nslcd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net netplan --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+  - disable_nvme_multipath
+
+export:
+  - "@base"
diff --git a/ubuntu1804-x64-common.yaml b/ubuntu1804-x64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8b91597afd07fb3e9b8a85f58b76d3a9d638c95f
--- /dev/null
+++ b/ubuntu1804-x64-common.yaml
@@ -0,0 +1,55 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 18.04 x64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/ubuntu-18.04.yaml
+
+global:
+  # Export format to generate
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common 
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: x64
+  g5k_release_number: 1804
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
+  g5k_kernel_params: ""
+  # packages to install
+  packages: "policykit-1 grub-efi-amd64-bin zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # passwords
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - configure_system
+  - fix_networkd
+  - configure_apt
+  - configure_g5k_apt_sources
+  - install_packages
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/ubuntu1804-x64-min.yaml b/ubuntu1804-x64-min.yaml
index 72a6a085ea8a32d44f9e9722d4312edccb321748..42a2377849ab37834ed00419c58a9b2368027da3 100644
--- a/ubuntu1804-x64-min.yaml
+++ b/ubuntu1804-x64-min.yaml
@@ -6,50 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/ubuntu-18.04.yaml
+extend: ubuntu1804-x64-common.yaml
 
 global:
-  # Export format to generate
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: x64
-  g5k_release_number: 1804
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
-  g5k_kernel_params: ""
-  # packages to install
-  packages: "policykit-1 grub-efi-amd64-bin zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # passwords
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
   - "@base"
-  - configure_system
-  - fix_networkd
-  - configure_apt
-  - configure_g5k_apt_sources
-  - install_packages
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/ubuntu1804-x64-nfs.yaml b/ubuntu1804-x64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..dc8ff98478bb01fdee9b751dcfcfd4f58f692f77
--- /dev/null
+++ b/ubuntu1804-x64-nfs.yaml
@@ -0,0 +1,29 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 18.04 x64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ubuntu1804-x64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-common autofs nslcd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net netplan --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+  - disable_nvme_multipath
+
+export:
+  - "@base"
diff --git a/ubuntu2004-arm64-common.yaml b/ubuntu2004-arm64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..51fe80c2ed3b85585a4c7b0714053c19f54783fb
--- /dev/null
+++ b/ubuntu2004-arm64-common.yaml
@@ -0,0 +1,57 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 20.04 arm64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/aarch64/ubuntu-20.04.yaml
+
+global:
+  # Export format to generate
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common 
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: arm64
+  g5k_release_number: 2004
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
+  g5k_kernel_params: ""
+  g5k_kernel_path: "/boot/vmlinuz"
+  g5k_initrd_path: "/boot/initrd.img"
+  # packages to install
+  packages: "policykit-1 grub-efi-arm64-bin zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # passwords
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - configure_system
+  - fix_networkd
+  - configure_apt
+  - configure_g5k_apt_sources
+  - install_packages
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/ubuntu2004-arm64-min.yaml b/ubuntu2004-arm64-min.yaml
index b0fe44a4bac0dba132d46c081b2cc809a19c8d7c..14437e312caef219826d80be6022326d5aea4aed 100644
--- a/ubuntu2004-arm64-min.yaml
+++ b/ubuntu2004-arm64-min.yaml
@@ -2,56 +2,21 @@
 # vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
 #==============================================================================
 #
-# DESCRIPTION: Ubuntu 20.04 arm64 min Grid'5000 environment
+# DESCRIPTION: Ubuntu 20.04 arm64 common Grid'5000 environment
 #
 #==============================================================================
 ---
-extend: from_scratch/aarch64/ubuntu-20.04.yaml
+extend: ubuntu2004-arm64-common.yaml
 
 global:
-  # Export format to generate
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: arm64
-  g5k_release_number: 2004
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
-  g5k_kernel_params: ""
-  g5k_kernel_path: "/boot/vmlinuz"
-  g5k_initrd_path: "/boot/initrd.img"
-  # packages to install
-  packages: "policykit-1 grub-efi-arm64-bin zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # passwords
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
   - "@base"
-  - configure_system
-  - fix_networkd
-  - configure_apt
-  - configure_g5k_apt_sources
-  - install_packages
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/ubuntu2004-arm64-nfs.yaml b/ubuntu2004-arm64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..29879ad32cce138a24018271ddd77b9106f4f592
--- /dev/null
+++ b/ubuntu2004-arm64-nfs.yaml
@@ -0,0 +1,29 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 20.04 arm64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ubuntu2004-arm64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-common autofs nslcd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net netplan --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+  - disable_nvme_multipath
+
+export:
+  - "@base"
diff --git a/ubuntu2004-ppc64-common.yaml b/ubuntu2004-ppc64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ca44524d31e0d51e1f7803c336b6c09ab27ddd4d
--- /dev/null
+++ b/ubuntu2004-ppc64-common.yaml
@@ -0,0 +1,57 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 20.04 ppc64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/ppc64le/ubuntu-20.04.yaml
+
+global:
+  # Export format to generate
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: ppc64
+  g5k_release_number: 2004
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
+  g5k_kernel_params: ""
+  g5k_kernel_path: "/boot/vmlinux"
+  g5k_initrd_path: "/boot/initrd.img"
+  # packages to install
+  packages: "policykit-1 zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # passwords
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - configure_system
+  - fix_networkd
+  - configure_apt
+  - configure_g5k_apt_sources
+  - install_packages
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/ubuntu2004-ppc64-min.yaml b/ubuntu2004-ppc64-min.yaml
index 5a2a9f14d6e94d167dc13cbda8c4fe2d3f0e6b8b..8c439ae452d2fef93e68877cdec6f23278ef0e54 100644
--- a/ubuntu2004-ppc64-min.yaml
+++ b/ubuntu2004-ppc64-min.yaml
@@ -6,52 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/ppc64le/ubuntu-20.04.yaml
+extend: ubuntu2004-ppc64-common.yaml
 
 global:
-  # Export format to generate
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: ppc64
-  g5k_release_number: 2004
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
-  g5k_kernel_params: ""
-  g5k_kernel_path: "/boot/vmlinux"
-  g5k_initrd_path: "/boot/initrd.img"
-  # packages to install
-  packages: "policykit-1 zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # passwords
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
   - "@base"
-  - configure_system
-  - fix_networkd
-  - configure_apt
-  - configure_g5k_apt_sources
-  - install_packages
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/ubuntu2004-ppc64-nfs.yaml b/ubuntu2004-ppc64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..bb08832b2815d06c9e99881de8300ad3f2b1c7e8
--- /dev/null
+++ b/ubuntu2004-ppc64-nfs.yaml
@@ -0,0 +1,29 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 20.04 ppc64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ubuntu2004-ppc64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-common autofs nslcd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net netplan --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+  - disable_nvme_multipath
+
+export:
+  - "@base"
diff --git a/ubuntu2004-x64-common.yaml b/ubuntu2004-x64-common.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6563914f01d9ffeec01deb17c3404033009abb98
--- /dev/null
+++ b/ubuntu2004-x64-common.yaml
@@ -0,0 +1,56 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 20.04 x64 common Grid'5000 environment
+#
+#==============================================================================
+---
+extend: from_scratch/ubuntu-20.04.yaml
+
+global:
+  # Export format to generate
+  appliance_formats: qcow2 tar.zst
+  # Output base filename
+  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
+  # Grid'5000 environment variant
+  g5k_variant: common
+  # Grid'5000 environment version
+  g5k_version: 1111111111
+  # Grid'5000 environment arch
+  g5k_image_arch: x64
+  g5k_release_number: 2004
+  # Grid'5000 kadeploy environment parameters
+  g5k_tar_path: server:///path/to/your/image
+  g5k_tar_compression: "zstd"
+  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  g5k_postinst_compression: "gzip"
+  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
+  g5k_kernel_params: ""
+  g5k_kernel_path: "/boot/vmlinuz"
+  g5k_initrd_path: "/boot/initrd.img"
+  # packages to install
+  packages: "policykit-1 grub-efi-amd64-bin zstd"
+  # locales
+  locales: POSIX C en_US.UTF8
+  lang: en_US.UTF8
+  timezone: Europe/Paris
+  # passwords
+  root_password: grid5000
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - configure_system
+  - configure_apt
+  - configure_g5k_apt_sources
+  - install_packages
+  - set_g5k_release
+  - set_g5k_motd
+
+export:
+  - "@base"
+  - do_qcow2_finish_works
+  - export_g5k
diff --git a/ubuntu2004-x64-min.yaml b/ubuntu2004-x64-min.yaml
index 07a409e593dccbfa3184bd823db1a9dfe0667354..f4e2b83dc0bd84bad5166e484fc40c898b16b9ee 100644
--- a/ubuntu2004-x64-min.yaml
+++ b/ubuntu2004-x64-min.yaml
@@ -6,51 +6,17 @@
 #
 #==============================================================================
 ---
-extend: from_scratch/ubuntu-20.04.yaml
+extend: ubuntu2004-x64-common.yaml
 
 global:
-  # Export format to generate
-  appliance_formats: qcow2 tar.zst
-  # Output base filename
-  output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
   g5k_variant: min
-  # Grid'5000 environment version
-  g5k_version: 1111111111
-  # Grid'5000 environment arch
-  g5k_image_arch: x64
-  g5k_release_number: 2004
-  # Grid'5000 kadeploy environment parameters
-  g5k_tar_path: server:///path/to/your/image
-  g5k_tar_compression: "zstd"
-  g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
-  g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net netplan --disk-aliases
-  g5k_kernel_params: ""
-  g5k_kernel_path: "/boot/vmlinuz"
-  g5k_initrd_path: "/boot/initrd.img"
-  # packages to install
-  packages: "policykit-1 grub-efi-amd64-bin zstd"
-  # locales
-  locales: POSIX C en_US.UTF8
-  lang: en_US.UTF8
-  timezone: Europe/Paris
-  # passwords
-  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
   - "@base"
-  - configure_system
-  - configure_apt
-  - configure_g5k_apt_sources
-  - install_packages
-  - set_g5k_release
-  - set_g5k_motd
 
 export:
   - "@base"
-  - do_qcow2_finish_works
-  - export_g5k
diff --git a/ubuntu2004-x64-nfs.yaml b/ubuntu2004-x64-nfs.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0689a5e316e9b9ab89455bcd83052d93caebf0ae
--- /dev/null
+++ b/ubuntu2004-x64-nfs.yaml
@@ -0,0 +1,29 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Ubuntu 20.04 x64 nfs Grid'5000 environment
+#
+#==============================================================================
+---
+extend: ubuntu2004-x64-common.yaml
+
+global:
+  # Grid'5000 environment variant
+  g5k_variant: nfs
+  # packages to install
+  packages: "$${packages} nfs-common autofs nslcd ruby"
+  # Grid'5000 Kadeploy environment parameters
+  g5k_postinst_script: g5k-postinstall --net netplan --fstab nfs --restrict-user current --disk-aliases
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+  - setup_g5k_ca_certificate
+  - setup_ldap
+  - disable_nvme_multipath
+
+export:
+  - "@base"