Liquid 标签篇

## 流程控制 ### case / when 创建分支语句,用于将变量与其他值比较。`case` 用于初始化分支语句,`when` 用于比较变量。 undefined undefined ### if 当表达式为 `true` 的时候执行代码块中的代码。 undefined undefined ### unless 与 `if` 相反 -- 当条件不满足时执行代码块中的代码。 undefined undefined 上例代码与下面的等效 undefined ### elsif / else 为 `if` 或者 `unless` 语句中添加更多的条件。 undefined undefined ## 循环语句 循环语句可以重复执行代码块中的代码。 ### for 重复执行代码块中的代码。for 语句的所有属性详见 [forloop (object)]() 。 undefined undefined ### break 当遇到 `break` 标签时停止循环。 undefined undefined ### continue 遇到 `continue` 标签时结束本次循环。 undefined undefined ### 带参数的 for 限制循环执行到指定的数。 undefined undefined ### offset 指定循环开始的索引。 undefined undefined ### range 指定循环的范围。范围既可以定义为常量也可以是数字变量。 undefined undefined ### reversed 改变循环的顺序 undefined undefined ### cycle 按照语句中参数列表的顺序输出一组字符串。每执行一次 `cycle`,输出参数列表中的下一个字符串。 undefined undefined `cycle` 的应用场合: - 为表格中的行添加 odd / even (奇数/偶数) 类 - 为列一行中的最后一个产品缩略图应用一个特殊类 ### 带参数的 cycle 当你想在一个模板中使用多个 `cycle` 语句时,`cycle` 可以接受一个叫 `cycle group` 的参数。如果没有为 cycle group 提供名称,那么就会认为含有相同参数的 `cycle` 是一组的。 ### tablerow 生成一个 HTML 的表格。必须包含在开放的的 `` 和闭合的 `
` HTML 标签中。 undefined undefined ### 带参数的 tablerow #### cols 定义表个有多少列。 undefined undefined #### limit 在指定的索引退出 tablerow。 undefined #### offset 在指定的索引开始 tablerow。 undefined #### range 指定循环的范围。范围既可以定义为常量也可以是数字变量。 undefined ## 变量 变量标签用来创建新的变量。 ### assign undefined undefined 将变量值用引号包裹起来声明字符串。 undefined undefined ### capture 捕获在标签中的字符串并将其赋给一个变量。`{% capture %}` 创建的为字符变量。 undefined undefined ### increment 创建新的数字变量,每次被呼叫值增加 1。初始值是 0。 undefined undefined 由 `increment` 标签创建的变量与 `assign` 和 `capture` 创建的是相互独立的。 在以下的例子中,用 `assign` 语句创建了一个名为 "var" 的变量,然后对其多次使用 `increment` 标签。注意 `increment` 标签不会影响 `assign` 标签创建的 `var` 的变量值。 undefined undefined ### decrement 创建新的数字变量,每次被呼叫值减少 1。初始值是 -1。 undefined undefined 跟 [increment]() 类似,用 `decrement` 声明的变量跟用 `assign` 或 `capture` 声明的变量是相互独立的。

kramdown 文档

概述

kramdown 是第一个将 Markdown 的超集转换为 HTML 的库,得益于其模块化的结构,可以为其添加额
外的输入和输出格式。目前支持的输入输出格式如下:

  • 输入:kramdown (一个 Markdown 的超集),Markdown,Github Flavored Markdown,
    HTML
  • 输出:HTML,LaTex,kramdown,RemoveHtmlTags (一个可将 HTML 标签移除的特殊转化器,
    通常配合 LaTex 或者 kramdown 转换器使用)

[kramdown 语法篇][syntax] 描述了 kramdown 的细节以及它与标准 Markdown 的不同之处。

要查看所有支持的参数请参考 [参数篇][options] 或者看一看 「解析器/转换器」 篇。

用法

kramdown 提供了两种使用方式:

作为库使用

kramdown 使用了与 RedCloth,BlueCloth 以及 Maruku 相同的 API:

1
2
3
require 'kramdown'
puts Kramdown::Document.new(text).to_html

作为应用使用

和库文件一起的一个叫 kramdown 二进制文件可用来将任何支持的输入格式转换为支持的格式输出。
输入既可以来自文件也可以是标准输入流。比如:

1
kramdown path/to/kramdown/doc/syntax.page

测试

kramdown 使用几种测试来验证解析器和转换器的正确性。详见 测试

安卓手机安装双系统教程

教你你如何在安卓手机上安装双系统,本教程需要你对刷机有一定的了解。

准备工作

  • 一台已获取 root 权限了的安卓手机,本教程使用的是中兴的 N958st
  • 对应机型 rom 包一个
  • 安卓内核解包工具
  • adb 调试工具
  • linux 环境 (可选),我使用的是 ubuntu16.04

手机分区

连接 adb

手机重启至 Recovery 模式, 连接电脑。 电脑上打开命令行, 输入 sudo adb shell ,此时进入到手机的 shell。

使用 parted 工具对手机重新分区

我们要在手机上安装双系统,那么问题来了,第二个系统装在哪儿呢?

这就得牺牲我们手机的用户储存空间了,利用分区工具将内置储存分一块出来放置我们的第二个系统。如果不想分割手机的内置储存并且你的外置储存足够快的话,也可以将第二系统安装在外置 sd 卡上。

在分区之前,请注意将内置 sd 卡内的文件做好备份,重新分区会导致文件丢失

ok, 我们开始分区,命令行里输入如下命令

1
sudo parted /dev/block/mmcblk0

进入 parted 的交互环境,输入 m,打印出分区表,我们来看看目前的分区状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
GNU Parted 3.2
使用 /dev/block/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: MMC HAG2e (sd/mmc)
Disk /dev/block/mmcblk0: 15.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 17.4kB 67.1MB 67.1MB fat16 modem msftdata
2 67.1MB 67.7MB 524kB sbl1
3 67.7MB 68.2MB 524kB sbl1bak msftdata
4 134MB 134MB 32.8kB DDR
5 201MB 202MB 1049kB aboot
6 202MB 203MB 1049kB abootbak msftdata
7 203MB 204MB 524kB rpm
8 204MB 204MB 524kB rpmbak msftdata
9 204MB 217MB 12.6MB boot
10 217MB 218MB 524kB tz
11 218MB 218MB 524kB tzbak msftdata
12 218MB 219MB 524kB hyp
13 219MB 219MB 524kB hypbak msftdata
14 219MB 219MB 16.4kB sec
15 219MB 220MB 1049kB pad msftdata
16 220MB 222MB 1573kB modemst1
17 222MB 223MB 1573kB modemst2
18 223MB 224MB 1049kB misc
19 224MB 226MB 1573kB fsg
20 226MB 226MB 1024B fsc
21 226MB 226MB 8192B ssd
22 226MB 239MB 12.6MB recovery
23 239MB 247MB 8389kB ext4 persist msftdata
24 247MB 1296MB 1049MB ext4 system msftdata
25 1296MB 1430MB 134MB ext4 cache msftdata
26 1430MB 1456MB 26.2MB customfs msftdata
27 1456MB 1466MB 10.5MB splash
28 1466MB 8634MB 7168MB ext4 userdata msftdata
29 8634MB 10.7GB 2048MB fat32 grow msftres
30 10.7GB 11.7GB 1049MB ext4 system2 msftdata
31 11.7GB 15.8GB 4031MB ext4 data2 msftdata
(parted)

注意这里的第 29 分区,也就是 grow 分区,这就是需要我们操作的分区,它原来的大小是 7128MB,我把它缩小到了 2048MB。把空出来的空间分了两个区,取名为 system2 和 data2。可以根据自己的情况选择合适的大小。由于我平时要安装很多的软件,所以把两个系统的 data 分区都分得很大。

然后将这两个分区都格式化为 ext4 文件系统。

处理第二个 rom 包

分区弄好了,接下来我们要解决的就是如何将第二系统刷入手机。

解包 boot.img

将准备好的 rom 包 解压。这里就需要用到我们的内核解包工具啦。

我是用的是很久以前在国外的 Xda 论坛上下载的一个工具 mkbootimg_tools, 使用方法非常简单,而且可以直接在手机端进行解包。

进入工具目录,将需要解包的 boot.img 放入此目录内

解包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
./mkboot boot.img boot
Unpack & decompress boot.img to boot
kernel : zImage
ramdisk : ramdisk
page size : 2048
kernel size : 7571904
ramdisk size : 1190483
dtb size : 167936
base : 0x80000000
kernel offset : 0x00008000
ramdisk offset : 0x02000000
second_offset : 0x00f00000
tags offset : 0x01e00000
dtb img : dt.img
cmd line : console=null androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci androidboot.selinux=permissive
ramdisk is gzip format.
Unpack completed.

这样,就将内核解包到了 boot 目录内

修改 fstab

1
cd ./boot/ramdisk

我们需要修改的是 fstab.qcom 文件, 这个文件相当于 linux 的 /etc/fstab 文件。用文本编辑器编辑这个文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Android fstab file.
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
#TODO: Add 'check' as fs_mgr_flags with data partition.
# Currently we dont have e2fsck compiled. So fs check would failed.
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
/dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait
/dev/block/bootdevice/by-name/userdata /data ext4 nosuid,nodev,barrier=1,noauto_da_alloc,discard wait,check,encryptable=footer
/dev/block/bootdevice/by-name/cache /cache ext4 nosuid,nodev,barrier=1 wait
/dev/block/bootdevice/by-name/persist /persist ext4 nosuid,nodev,barrier=1 wait
/dev/block/bootdevice/by-name/modem /firmware vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait
/dev/block/bootdevice/by-name/boot /boot emmc defaults recoveryonly
/dev/block/bootdevice/by-name/recovery /recovery emmc defaults recoveryonly
/dev/block/bootdevice/by-name/misc /misc emmc defaults recoveryonly
/devices/soc.0/7824900.sdhci/mmc_host* auto auto defaults voldmanaged=sdcard0:29,nonremovable,noemulatedsd
/devices/soc.0/7864900.sdhci/mmc_host* auto auto defaults voldmanaged=sdcard1:auto
/devices/platform/msm_hsusb_host/usb1* auto auto defaults voldmanaged=usbdisk:auto

/dev/block/bootdevice/by-name/system 修改为 /dev/block/bootdevice/by-name/system2

/dev/block/bootdevice/by-name/userdata 修改为 /dev/block/bootdevice/by-name/data2

这样就可以将刚才分的区挂载到系统的 /system 和 /data 目录

重新打包内核

修改并保存 fstab.qcom 文件之后,就可以讲内核重新打包回去了。

打包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
./mkboot boot boot_new.img
mkbootimg from boot/img_info.
kernel : zImage
ramdisk : new_ramdisk.gz
page size : 2048
kernel size : 7571904
ramdisk size : 1190483
dtb size : 167936
base : 0x80000000
kernel offset : 0x00008000
ramdisk offset : 0x02000000
tags offset : 0x01e00000
dtb img : dt.img
cmd line : console=null androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci androidboot.selinux=permissive
Kernel size: 7571904, new ramdisk size: 1190483, boot_new.img: 8935424.
boot_new.img has been created.
...

这样就把内核重新打包成了 boot_new.img

boot_new.img 替换进 rom 包 中的 boot.img

修改刷机脚本

最后一步,需要将 rom 包 的刷机脚本稍作修改,让它刷入进第二系统分区。

计入 rom 包 目录,刷机脚本是位于 /META-INF/com/google/android 目录下的 updater-script 文件。它控制刷机的流程。

编辑这个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
ui_print("*************************");
ui_print("*^.^ Welcome Flyme5 ^.^*");
ui_print("* ZTE N958St *");
ui_print("* Please wait 8 minutes *");
ui_print("* weibo.com/haohao3344 *");
ui_print("*************************");
show_progress(0.750000, 0);
format("ext4", "EMMC", "/dev/block/bootdevice/by-name/system", "0", "/system");
mount("ext4", "EMMC", "/dev/block/bootdevice/by-name/system", "/system", "");
package_extract_dir("recovery", "/system");
package_extract_dir("system", "/system");
以下省略...

我们需要修改的的就是 format 语句和 mount 语句

format("ext4", "EMMC", "/dev/block/bootdevice/by-name/system", "0", "/system"); 修改为 format("ext4", "EMMC", "/dev/block/bootdevice/by-name/system2", "0", "/system");

mount("ext4", "EMMC", "/dev/block/bootdevice/by-name/system", "/system", ""); 修改为 mount("ext4", "EMMC", "/dev/block/bootdevice/by-name/system2", "/system", "");

重新打包 rom 包

完成以上步骤之后,就可以将 rom 包重新压缩成 zip 文件了。

刷入测试

至此,一个刷入第二系统的刷机包就制作完成了,接下来就是将制作好的刷机包刷入手机测试了。

备份原来系统的 boot 分区

在刷入第二系统之前,需要将原来系统的 boot 分区备份,可以直接使用 TWRP Recovery 的备份功能进行备份。也可以使用 dd 命令进行备份。

刷入 rom 包

备份好 boot 分区之后就可以正式刷入刚才制作好的 rom 包了,刷入方法略。

备份第二系统的 boot 分区

刷入完成之后先别着急开机,需要将刚刷入的 boot 分区进行备份。以便双系统的切换。同样,使用 TWRP Recovery 进行备份。

开机测试

现在就可以开机测试了,不出意外的话开机就可以进入第二个系统了。

双系统切换

第二个系统已经刷进去了,但是如何在两个系统之间进行切换呢?这就要用到刚才备份的两个 boot 分区了。

想要进入哪个系统,恢复对应的 boot 分区就可以了。

kramdown 语法

kramdown 语法

版本:1.12.0

kramdown 的语法基于 Markdown,并且在其基础上添加了许多其他 Markdown 实现的特性,其中包括
[Maruku][Maruku],[PHP Markdown Extra][PME] 和 [Pandoc][Pandoc]。但是,kramdown 致
力于提供一种严格的语法,并制定了一些自己的规则,因此,kramdown 不会完全兼容 Markdown。
尽管如此,大多数的 Markdown 文档还是能被 kramdown 正确的解析。所有与 Markdown 语法有冲突
的地方都会被高亮显示。

源文件格式

kramdown 的源文件可以使用任何的编码方式,比如 ASCII,UTF-8 或者 ISO-8859-1,并且输出会采
用与源文件相同的编码。

kramdown 文档中包含两种元素 – 块级元素和行内元素:

  • 块级元素定义了文档内容的主要结构,比如某段文字应该是段落、列表、引用还是其他什么。

  • 行内元素标记一小块文字作为比如强调或是超链接什么的。

行内元素只能使用在块级元素或者其他行内元素之中。

换行

一些轻量的标记语言在手动换行的环境中可能不会正常的工作。比如,在许多邮件程序中就会出现问题。因

此 kramdown 允许在段落或者引用等元素中使用手动换行。这有时候也被成为 「偷懒语法」。

支持换行的块级元素通常在遇到任何一种条件时会换行:

  • 一个空行、一个 [EOB 标记行][eob]、一个 [block IAL][IAL] 或者是文档尾 (即块级元素
    边界)。

  • HTML 的块级元素。

这里列出了一些不支持换行的元素:

标题

但多数情况下标题只需要占一行。如果你的标题实在过长,你可以选择使用 HTML 的标题来代替。

fenced code block

The delimiting lines of a fenced code block do not support hard-wrapping. Since everything between the delimiting lines is taken as is, the content of a fenced code block does also not support hard-wrapping.

定义列表项

每一个定义列表项都必须单独占一行,因此换行会导致创建一个新的定义列表项。

表格

由于 kramdown 表格的每一行都用来表示表格的一行或者分割线,所以不支持换行。

注意: 我们不建议你使用偷懒语法来书写 kramdown 文档。

制表符的用法

kramdown 将制表位设为了 4 的倍数。这对于缩进列表尤其重要。还有,制表符最好只使用在一行的开头,
并且前面不能有空格。

自动转义和手动转义

将 Archlinux 塞进 U 盘[安装篇]

前言

写这篇文章是第二次在 U 盘里安装,这次是帮黄辉装的。上次自己装的时候大概是心里
比较激动,忘记写文章记录安装过程。这次安装就是用的我 U 盘里的 Archlinux 安装的,
是的没错,用 U 盘给另一个 U 盘安装系统。

在 U 盘里安装 Linux 系统是我很早之前的想法了,但是一直没动手,最近又开始上实验
课,不想用机房的 xp 系统又不想背笨重的笔记本去上课,便想到了在 U 盘里安装一个小
型的系统。

最早有这个想法的时候,是想在网吧里免费蹭网,从 U 盘启动自己的系统,就可以绕过网
吧的计费系统啦。直到上次去见网吧见我朋友,我又不打游戏,坐他旁边玩手机,无聊到
爆,突然想到书包里带着上次做的 Ubuntu 启动盘。于是抱着试一试的心态,插入 U 盘,
成功进入了 Ubuntu,朋友一脸懵逼看着我。不过键盘和鼠标没法用,但至少证明是可行的。

准备工作

  1. 一台安装了 Archlinux 系统的电脑
  2. U 盘一个 (最好不小于 8 GB)

安装 arch-install-script 包

arch-install-script 包中包含了安装 Archlinux 所需的脚本集合,其中包括:

  • pacstrap
  • genfstab
  • arch-chroot

执行:

1
sudo pacman -S arch-install-script

U 盘分区

插入 U 盘,在 dev 目录下找到 U 盘对应的设备代号。使用 parted 进行分区。

注意:

本文中假设 U 盘代号为 sdx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo parted /dev/sdx
GNU Parted 3.2
使用 /dev/sdx
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: Kingston DataTraveler 2.0 (scsi)
Disk /dev/sdx: 7915MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 2097kB 1049kB fat32 bios
2 2097kB 99.6MB 97.5MB fat32 ESP 启动, esp
3 99.6MB 7914MB 7814MB ext4 arch
(parted)

注意:

这里的第一分区是 BISO 启动分区
,GRUB 将 core.img 嵌入到这个分区。

挂载分区

1
2
3
sudo mount /dev/sdx3 /mnt
mkdir /mnt/boot
sudo mount /dev/sdx2 /mnt/boot

安装基本组件base 和 base-devel 组

1
sudo pacstrap -i /mnt base base-devel

生成 fstab

1
# genfstab -U -p /mnt >> /mnt/etc/fstab

说明

  1. 切换到 root 用户,否则执行 genfstab 时权限不够
  2. genfstab 的 -U 参数是使用 UUID 来标识分区,也可使用 -L,使用卷标。

Chroot

1
sudo arch-chroot /mnt bash

设置时区

时区可通过手动和交互两种方式来设置,这里使用交互方式。

交互方式设置时区

执行 tzselect,通过交互方式设置时区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#?

这里选择 4,亚洲,输入后按回车

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Please select a country whose clocks agree with yours.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#?

这里选择 9,中国。

1
2
3
4
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#?

这里选择 1,北京时间。

1
2
3
4
5
6
7
8
9
10
11
The following information has been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Local time is now: Thu Oct 6 17:07:20 CST 2016.
Universal Time is now: Thu Oct 6 09:07:20 UTC 2016.
Is the above information OK?
1) Yes
2) No

输入 1,确认时区。

设置时间标准 为 UTC,并调整 时间漂移:

1
# hwclock --systohc --utc

设置语系环境

编辑 /etc/locale.gen 文件,去掉相应编码的注释。建议选择帶UTF-8的項:

1
# nano /etc/locale.gen

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8

执行 locale-gen 生成 locale 信息。

1
2
3
4
5
6
7
8
# locale-gen
Generating locales...
en_US.UTF-8... done
zh_CN.UTF-8... done
zh_HK.UTF-8... done
zh_TW.UTF-8... done
Generation complete.

设置主机名

1
echo myhostname > /etc/hostname

将 myhostname 替换为想要的主机名。

配置网络

这里我们使用 networkmanager 来管理网络.

安装 networkmanager

1
pacman -S networkmanager

生成 Initramfs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# mkinitcpio -p linux
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 4.7.6-1-ARCH
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [autodetect]
-> Running build hook: [modconf]
-> Running build hook: [block]
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-fallback.img -S autodetect
==> Starting build: 4.7.6-1-ARCH
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: aic94xx
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-fallback.img
==> Image generation successful

设置 root 密码

1
passwd

[重点] 安装引导程序

安装过程中最麻烦的就是引导程序了,系统虽然部署好了,但不能让电脑引导也是瞎忙活。
这里以安装 grub 引导程序为为例。

安装 grub 和 efibootmgr

1
# pacman -S grub efibootmgr

安装 grub 到 U 盘上

安装 Adobe 全家福

Adobe 系列软件安装教程

申请 Adobe ID

首先呢,我们需要去 Adobe 的官方网站上注册一个 Adobe ID 。这里需要注意的是,我们
是去 Adobe 的 英文官网注册。

点击 SIGN IN。

点击 Get an Adobe ID 进行注册。这里注意密码的规则:

  1. 长度大于 3 位
  2. 至少一个大写字母
  3. 至少包含一个数字

填完信息后记得勾选 I have read… 然后点击 SIGN UP

注册完之后可以看到,导航栏上已经显示了刚才注册的 Adobe ID 了。现在点击 Creative Cloud

这时候会跳转到中文官网

点击你要下载的软件,这里以下载 PS 为例。

这时会让你填一个问卷。

填完之后点击继续。

然后就会开始下载 Creative Cloud,这是 Adobe 的软件更新器,我们的软件需要在用它安装。

安装 Creative Cloud

安装刚才下载下来的 Creative Cloud,并登陆注册的 Adobe ID。

登陆之后就可以看到软件列表了。选择要下载的软件,点击下载即可。

破解

下载 adobe.snr.patch-painter.exe

很惭愧<br><br>只做了一点微小的工作<br>谢谢大家