# % Options Settings: https://orgmode.org/manual/Export-Settings.html
#+OPTIONS: timestamp:nil ^:nil <:nil p:t prop:t tags:t tasks:t todo:t
#+LATEX_CLASS: article
#+LaTeX_CLASS_OPTIONS: [a4paper,12pt]
#+LATEX_HEADER: \usepackage{booktabs}
# % to include pdf/eps/png files
#+LATEX_HEADER: \usepackage{indentfirst}
#+LATEX_HEADER: \usepackage{graphicx}
# % useful to add 'todo' markers
#+LaTeX_HEADER: \usepackage{todonotes}
#+LaTeX_HEADER: \setlength{\marginparwidth}{2cm} % fix todonotes warning
# % hyperrefs
#+LaTeX_HEADER: \usepackage{hyperref}
# % ----------------- Code blocks ----------------
# % Dependencies: pip install pygments
# % nice source code formatting
#+LaTeX_HEADER: \usepackage{xcolor}
#+LaTeX_HEADER: \definecolor{bg}{rgb}{0.98,0.98,0.98}
#+LaTeX_HEADER: \usepackage[cache=false]{minted}
#+LaTeX_HEADER: \setminted{
#+LaTeX_HEADER:   fontsize=\small,
#+LaTeX_HEADER:   baselinestretch=1,
#+LaTeX_HEADER:   xleftmargin=4em,
#+LaTeX_HEADER:   breaklines,
#+LaTeX_HEADER:   mathescape,
#+LaTeX_HEADER:   linenos,
#+LaTeX_HEADER:   numbersep=5pt,
#+LaTeX_HEADER:   frame=leftline,
#+LaTeX_HEADER:   framesep=2mm,
#+LaTeX_HEADER:   autogobble,
#+LaTeX_HEADER:   style=tango,
#+LaTeX_HEADER:   bgcolor=bg
#+LaTeX_HEADER: }
# % change style of section headings
#+LaTeX_HEADER: \usepackage{sectsty}
#+LaTeX_HEADER: \allsectionsfont{\sffamily}
# % only required for orgmode ticked TODO items, can remove
#+LaTeX_HEADER: \usepackage{amssymb}
# % only required for underlining text
#+LaTeX_HEADER: \usepackage[normalem]{ulem}
# % often use this in differential operators:
#+LaTeX_HEADER: \renewcommand{\d}{\ensuremath{\mathrm{d}}}
# % allow more reasonable text width for most documents than LaTeX default
#+LaTeX_HEADER: \setlength{\textheight}{21cm}
#+LaTeX_HEADER: \setlength{\textwidth}{16cm}
# % reduce left and right margins accordingly
#+LaTeX_HEADER: \setlength{\evensidemargin}{-0cm}
#+LaTeX_HEADER: \setlength{\oddsidemargin}{-0cm}
# % reduce top margin
#+LaTeX_HEADER: \setlength{\topmargin}{0cm}
# % references formats
#+LaTeX_HEADER: \usepackage[round]{natbib}
# % Chinese supported
#+LATEX_HEADER: \usepackage{ctex}
# % Increase default line spacing a little
#+LATEX_HEADER: \usepackage{setspace}
#+LATEX_HEADER: \renewcommand{\baselinestretch}{1.5}
#+LATEX_HEADER: \setlength{\parskip}{0.8em}
# % Line & paragraph space end
# % item list margin
#+LATEX_HEADER: \usepackage{enumitem}
# % Breaking Page Between Title and Toc
#+LATEX_HEADER: \makeatletter \def\@maketitle{\null \begin{center} {\vskip 5em \Huge \@title} \vskip 30em {\LARGE \@author} \vskip 3em {\LARGE \@date} \end{center} \newpage} \makeatother
# % End of Breaking Page Between Title and Toc
#+LATEX_HEADER: \renewcommand\contentsname{目录}
# Generate Tex File: C-c C-e l l; then replace verbatim with minted, and must special the code language
#+LATEX_HEADER: % Generate PDF: xelatex -shell-escape <tex file>
#+AUTHOR: jouyouyun
#+EMAIL: yanbowen717@gmail.com
#+TITLE: 安装器初始化 Repo

#+latex: \newpage
** 分区要求
=v23= 中去掉了 =AB= 分区，另外将数据分区的挂载点由 =/data= 变更为 =/persistent= ，安装器需要适配这些改动。

全盘安装时，应存在以下分区：
+ ESP

  EFI 引导时必需存在。
+ 交换分区

  也可使用交换文件替代，推荐使用交换文件。
+ 系统分区

  =/= 挂载点对应的分区。
+ 数据分区

  =/persistent= 挂载点对应的分区。

** 目录组织要求

系统目录组织方式应满足下述要求：
+ ESP

  挂载于  =/boot/efi= 。
+ 数据分区

  挂载于 =/persistent= ，其下存在下述目录：
  - /persistent/vendor
  - /persistent/ostree
  - /persistent/opt
  - /persistent/var
  - /persistent/roothome
  - /persistent/home
+ 系统分区

  挂载于 =/= ，其下存在以下目录：
  - /boot
  - /etc
  - /usr
  - /media
  - /mnt
  - /srv
  - /bin : 是 =/usr/bin= 的软链接；
  - /sbin : 是 =/usr/sbin= 的软链接；
  - /lib : 是 =/usr/lib= 的软链接；
  - /lib<qual> : 是 =/usr/lib<qual>= 的软链接；
  - /vendor : =mount bind= 于 =/persistent/vendor= ；
  - /opt : =mount bind= 于 =/persistent/opt= ；
  - /var : =mount bind= 于 =/persistent/var= ；
  - /root : =mount bind= 于 =/persistent/roothome= ；
  - /home : =mount bind= 于 =/persistent/home= ；

*这些目录组织应该安装之前创建完成。*

** Repo Init
安装器在安装完成后， *分区卸载前* ，应执行原子更新程序完成本地 =Repo= 初始化。调用原子更新程序时应指定配置文件、系统分区挂载点和 =action= 。

配置文件应根据分区方式生成，存储于 =osroot= 目录下。

初始化操作依赖 =ostree= 。

*** 示例
这里以全盘安装为例，目标系统相关信息如下：
+ 系统分区挂载点为 =/target= ；
+ 数据分区挂载点为 =/target/persistent= ；
+ 配置文件路径为 =/target/persistent/osroot/config.json= ；

应执行初始化命令为： ~deepin-upgrade-manager --action=init --config=/target/persistent/osroot/config.json --root=/target~ 。

其中配置文件的内容应为：
#+begin_src json
{
  "version": "1.0.0",
  "distribution": "v23",
  "active_version": "",
  "cache_dir": "/.osrepo-cache",
  "max_repo_retention": 3,
  "repo_list": [
    {
      "repo": "/persistent/osroot/repo",
      "stage_dir": "/persistent/osroot/cache",
      "snapshot_dir": "/persistent/osroot/snapshot",
      "subscribe_list": [
        "/boot",
        "/etc",
        "/usr",
        "/var/lib/apt",
        "/var/lib/dkms",
        "/var/lib/dpkg",
        "/var/lib/man-db",
        "/var/lib/initramfs-tools"
      ]
    }
  ]
}
#+end_src
