diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2418e5e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.config/ai
diff --git a/README.md b/README.md
index 0989daf..e008029 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,60 @@
## ai `os`
+
+
- name : ai os
+- base : [archlinux](https://gitlab.archlinux.org/archlinux)
-- base : [archlinux](https://gitlab.archlinux.org/archlinux/archlinux-docker)
+### docker
+
+```sh
+$ docker run --rm syui/aios ai
+```
+
+### archiso
+
+- [profile.rst](https://gitlab.archlinux.org/archlinux/archiso/-/blob/master/docs/README.profile.rst)
+
+```sh
+$ pacman -S archiso
+```
+
+```sh
+$ git clone https://git.syui.ai/ai/os
+$ cd os
+$ git clone https://gitlab.archlinux.org/archlinux/archlinux-docker
+$ git clone https://gitlab.archlinux.org/archlinux/archiso
+
+$ vim ./archiso/configs/releng/profiledef.sh
+
+$ mkarchiso -v -o ./ ./archiso/configs/releng
+```
+
+### system
+
+> ./archiso/configs/releng/profiledef.sh
+
+```sh
+buildmodes=('bootstrap')
+```
+
+```sh
+$ mkarchiso -v -o ./ ./archiso/configs/releng
+$ tar xf aios-bootstrap*.tar.gz
+$ echo -e 'Server = http://mirrors.cat.net/archlinux/$repo/os/$arch\nServer = https://geo.mirror.pkgbuild.com/$repo/os/$arch' >> ./root.x86_64/etc/pacman.d/mirrorlist
+$ sed -i s/CheckSpace/#CheckeSpace/ root.x86_64/etc/pacman.conf
+$ arch-chroot ./root.x86_64
+---
+$ pacman -S base base-devel linux vim git zsh rust
+$ pacman-key --init
+$ pacman-key --populate archlinux
+$ exit
+---
+$ tar -C root.x86_64 -c . | docker import - syui/aios
+$ docker images
+
+$ docker run --rm syui/aios cargo version
+cargo 1.75.0
+```
diff --git a/archiso b/archiso
new file mode 160000
index 0000000..1f65b69
--- /dev/null
+++ b/archiso
@@ -0,0 +1 @@
+Subproject commit 1f65b695d309d6089bdc2251bb4c9aa00bd11a51
diff --git a/archlinux-docker b/archlinux-docker
new file mode 160000
index 0000000..98cd791
--- /dev/null
+++ b/archlinux-docker
@@ -0,0 +1 @@
+Subproject commit 98cd79111dd530447f491d547d14f3c38e227e46
diff --git a/build.zsh b/build.zsh
new file mode 100755
index 0000000..b6e676d
--- /dev/null
+++ b/build.zsh
@@ -0,0 +1,59 @@
+#!/bin/zsh
+
+d=${0:a:h}
+case $1 in
+ bsae)
+ a=baseline
+ ;;
+ *)
+ a=releng
+ ;;
+esac
+
+
+if ! ls $d/*.tar.gz;then
+ rm -rf $d/*.tar.gz
+fi
+
+if [ -d $d/work ];then
+ rm -rf $d/work
+fi
+
+if [ -d $d/root.x86_64 ];then
+ rm -rf $d/root.x86_64
+fi
+
+if [ -d $d/archiso ];then
+ rm -rf $d/archiso
+fi
+
+git clone https://gitlab.archlinux.org/archlinux/archiso
+
+# rm -rf $d/archlinux-docker
+# git clone https://gitlab.archlinux.org/archlinux/archlinux-docker
+
+cp -rf $d/cfg/profiledef.sh $d/archiso/configs/$a/profiledef.sh
+cp -rf $d/scpt/mkarchiso $d/archiso/archiso/mkarchiso
+
+$d/archiso/archiso/mkarchiso -v -o $d/ $d/archiso/configs/releng
+
+if [ ! -d $d/root.x86_64 ];then
+ tar xf $d/aios-bootstrap*.tar.gz
+fi
+
+echo -e 'Server = http://mirrors.cat.net/archlinux/$repo/os/$arch\nServer = https://geo.mirror.pkgbuild.com/$repo/os/$arch' >> ./root.x86_64/etc/pacman.d/mirrorlist
+sed -i s/CheckSpace/#CheckeSpace/ root.x86_64/etc/pacman.conf
+arch-chroot root.x86_64 /bin/sh -c 'pacman-key --init'
+arch-chroot root.x86_64 /bin/sh -c 'pacman-key --populate archlinux'
+arch-chroot root.x86_64 /bin/sh -c 'pacman -Syu --noconfirm base base-devel linux vim git zsh rust openssh openssl jq'
+arch-chroot root.x86_64 /bin/sh -c 'git clone https://git.syui.ai/ai/bot && cd bot && cargo build && cp -rf ./target/debug/ai /bin/ && ai ai'
+
+# docker image
+systemctl start docker
+tar -C $d/root.x86_64 -c . | docker import - syui/aios
+
+docker images -a
+docker run --rm syui/aios ai
+docker push syui/aios
+
+# docker run -it syui/aios zsh
diff --git a/cfg/hostname b/cfg/hostname
new file mode 100644
index 0000000..5f98dbb
--- /dev/null
+++ b/cfg/hostname
@@ -0,0 +1 @@
+aios
diff --git a/cfg/os-release b/cfg/os-release
new file mode 100644
index 0000000..dd2a110
--- /dev/null
+++ b/cfg/os-release
@@ -0,0 +1,13 @@
+BUILD_ID=rolling
+ANSI_COLOR="38;2;23;147;209"
+IMAGE_ID=aios
+IMAGE_VERSION=2024.02.11
+NAME=ai os
+PRETTY_NAME=ai os
+ID=ai
+HOME_URL=https://git.syui.ai/ai/os
+DOCUMENTATION_URL=https://git.syui.ai/ai/os/wiki
+SUPPORT_URL=https://git.syui.ai/ai/os/issues
+BUG_REPORT_URL=https://git.syui.ai/ai/os/issues
+PRIVACY_POLICY_URL=https://git.syui.ai/ai/os
+LOGO=ai-logo
diff --git a/cfg/profiledef.sh b/cfg/profiledef.sh
new file mode 100644
index 0000000..146fddb
--- /dev/null
+++ b/cfg/profiledef.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+# shellcheck disable=SC2034
+
+iso_name="aios"
+iso_label="AI_$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m)"
+iso_publisher="ai os "
+iso_application="ai os Live/Rescue DVD"
+iso_version="$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y.%m.%d)"
+install_dir="ai"
+#buildmodes=('iso')
+buildmodes=('bootstrap')
+bootmodes=('bios.syslinux.mbr' 'bios.syslinux.eltorito'
+ 'uefi-ia32.grub.esp' 'uefi-x64.grub.esp'
+ 'uefi-ia32.grub.eltorito' 'uefi-x64.grub.eltorito')
+arch="x86_64"
+pacman_conf="pacman.conf"
+airootfs_image_type="squashfs"
+airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M')
+file_permissions=(
+ ["/etc/shadow"]="0:0:400"
+ ["/root"]="0:0:750"
+ ["/root/.automated_script.sh"]="0:0:755"
+ ["/root/.gnupg"]="0:0:700"
+ ["/usr/local/bin/choose-mirror"]="0:0:755"
+ ["/usr/local/bin/Installation_guide"]="0:0:755"
+ ["/usr/local/bin/livecd-sound"]="0:0:755"
+)
diff --git a/icon/ai.png b/icon/ai.png
new file mode 100644
index 0000000..d21dabe
Binary files /dev/null and b/icon/ai.png differ
diff --git a/icon/avatar.png b/icon/avatar.png
new file mode 100644
index 0000000..f091ef1
Binary files /dev/null and b/icon/avatar.png differ
diff --git a/icon/wall.png b/icon/wall.png
new file mode 100644
index 0000000..8717aa8
Binary files /dev/null and b/icon/wall.png differ
diff --git a/scpt/mkarchiso b/scpt/mkarchiso
new file mode 100755
index 0000000..5b08ab0
--- /dev/null
+++ b/scpt/mkarchiso
@@ -0,0 +1,2058 @@
+#!/usr/bin/env bash
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+set -e -u
+shopt -s extglob
+
+# Control the environment
+umask 0022
+export LC_ALL="C.UTF-8"
+if [[ -v LANGUAGE ]]; then
+ # LC_ALL=C.UTF-8, unlike LC_ALL=C, does not override LANGUAGE.
+ # See https://sourceware.org/bugzilla/show_bug.cgi?id=16621 and https://savannah.gnu.org/bugs/?62815
+ unset LANGUAGE
+fi
+[[ -v SOURCE_DATE_EPOCH ]] || printf -v SOURCE_DATE_EPOCH '%(%s)T' -1
+export SOURCE_DATE_EPOCH
+
+# Set application name from the script's file name
+app_name="${0##*/}"
+
+# Define global variables. All of them will be overwritten later
+pkg_list=()
+bootstrap_pkg_list=()
+quiet=""
+work_dir=""
+out_dir=""
+gpg_key=""
+gpg_sender=""
+iso_name=""
+iso_label=""
+iso_uuid=""
+iso_publisher=""
+iso_application=""
+iso_version=""
+install_dir=""
+arch=""
+pacman_conf=""
+packages=""
+bootstrap_packages=""
+pacstrap_dir=""
+declare -i rm_work_dir=0
+buildmodes=()
+bootmodes=()
+airootfs_image_type=""
+airootfs_image_tool_options=()
+cert_list=()
+declare -A file_permissions=()
+efibootimg=""
+efiboot_files=()
+# adapted from GRUB_EARLY_INITRD_LINUX_STOCK in https://git.savannah.gnu.org/cgit/grub.git/tree/util/grub-mkconfig.in
+readonly ucodes=('intel-uc.img' 'intel-ucode.img' 'amd-uc.img' 'amd-ucode.img' 'early_ucode.cpio' 'microcode.cpio')
+
+
+# Show an INFO message
+# $1: message string
+_msg_info() {
+ local _msg="${1}"
+ [[ "${quiet}" == "y" ]] || printf '[%s] INFO: %s\n' "${app_name}" "${_msg}"
+}
+
+# Show a WARNING message
+# $1: message string
+_msg_warning() {
+ local _msg="${1}"
+ printf '[%s] WARNING: %s\n' "${app_name}" "${_msg}" >&2
+}
+
+# Show an ERROR message then exit with status
+# $1: message string
+# $2: exit code number (with 0 does not exit)
+_msg_error() {
+ local _msg="${1}"
+ local _error=${2}
+ printf '[%s] ERROR: %s\n' "${app_name}" "${_msg}" >&2
+ if (( _error > 0 )); then
+ exit "${_error}"
+ fi
+}
+
+# Show help usage, with an exit status.
+# $1: exit status number.
+_usage() {
+ IFS='' read -r -d '' usagetext <
+ options:
+ -A Set an application name for the ISO
+ Default: '${iso_application}'
+ -C pacman configuration file.
+ Default: '${pacman_conf}'
+ -D Set an install_dir. All files will be located here.
+ Default: '${install_dir}'
+ NOTE: Max 8 characters, use only [a-z0-9]
+ -L