Skip to content

Commit

Permalink
Gentoo Linux
Browse files Browse the repository at this point in the history
  • Loading branch information
huataihuang committed Sep 11, 2023
1 parent 7f97141 commit 31288bf
Show file tree
Hide file tree
Showing 21 changed files with 213 additions and 23 deletions.
6 changes: 3 additions & 3 deletions source/devops/docs/think_write_doc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

.. note::

Red Hat官方文档也非常类似,但是不是采用 :ref:`sphinx_doc` ,而是蚕蛹
Red Hat官方文档也非常类似,但是不是采用 :ref:`sphinx_doc`

我的实践
=========
Expand All @@ -48,7 +48,7 @@

GitBook是我最早撰写 :ref:`cloud_atlas` 的 `Cloud Atlas 草稿 <https://github.com/huataihuang/cloud-atlas-draft>`_ 时使用的文档撰写平台。但我感觉GitBook采用Node.js来生成html,效率比较低,对于大量文档生成非常 缓慢。所以我仅更新源文件,很少再build生成最终的html文件。

Sphinx Doc是我撰写 :ref:`cloud_atlas` 的文档平台,我是模仿Kernel Doc的结构来撰写文档的,现在已经使用比 较得心应手,感觉作为撰写书籍,使用Sphinx Doc是比较好的选择。
Sphinx Doc是我撰写 :ref:`cloud_atlas` 的文档平台,我是模仿Kernel Doc的结构来撰写文档的,现在已经使用比较得心应手,感觉作为撰写书籍,使用Sphinx Doc是比较好的选择。

不过,Sphinx采用的reStructureText格式比较复杂(功能强大),日常做快速笔记不如MarkDown格式。我发现MkDocs比较符合我的需求:

Expand All @@ -67,4 +67,4 @@ Sphinx Doc是我撰写 :ref:`cloud_atlas` 的文档平台,我是模仿Kernel D

Sphinx Doc 和 MkDocs 都采用Python编写,可以共用Python virtualenv环境,这也是我比较喜欢这两个文档撰写工具的原因。

并且,我准备采用 Hugo 来制作个人Blog(待进行...)
我准备采用 :strike:`Hugo 来制作个人Blog`
2 changes: 2 additions & 0 deletions source/django/startup/django_env_linux.rst
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ Django开发环境(linux)
.. literalinclude:: ../../python/startup/pip_offline/pip_install_whl
:caption: ``pip install`` 可以安装下载好的 ``.whl`` python包



参考
=====

Expand Down
14 changes: 10 additions & 4 deletions source/django/startup/django_mysql.rst
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ Django配置MySQL数据库
.. literalinclude:: django_mysql/install_mysql-devel
:caption: 需要提前安装 ``mysql-devel`` 或 ``mariadb-devel`` 才能执行 ``pip install mysqlclient``

.. note::

:ref:`django_env_linux` 对于 ``pip install mysqlclient`` 有处理案例

配置Django连接数据库
=====================

Expand All @@ -51,8 +55,10 @@ Django配置MySQL数据库
- 直接读取 ``/etc/my.cnf`` (当前Django官方推荐)
- 使用环境变量

读取MySQL Client配置(推荐)
----------------------------
.. _django_mysqlclient_config:

Django使用MySQL Client配置(推荐)
-----------------------------------

现在Django推荐采用直接读取操作系统安装的MySQL客户端配置来完成数据库连接配置。例如,通常我们的数据库访问配置 ``/etc/my.cnf`` 内容如下::

Expand All @@ -73,8 +79,8 @@ Django配置MySQL数据库
}
}

数据库环境变量
----------------
Django使用数据库环境变量
---------------------------

django支持从环境变量中读取配置,所以可以将密码相关变量保存到环境中。对于使用Python virtualenv,可以在进入虚拟环境的最后激活配置 ``postactivate`` 中设置环境,并在 ``predeactivate`` 文件中 ``unset`` 环境变量。

Expand Down
5 changes: 0 additions & 5 deletions source/javascript/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@
JavaScript Atlas
=================================

JavaScript注释方法有2种:

- 单行注释 ``//``
- 多行注释 ``/* */``

.. toctree::
:maxdepth: 1

Expand Down
2 changes: 2 additions & 0 deletions source/javascript/react/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ React
:maxdepth: 1

intro_react.rst
nextjs/index
react-native/index

.. only:: subproject and html

Expand Down
2 changes: 2 additions & 0 deletions source/javascript/react/intro_react.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,7 @@
React技术简介
===================

根据 `Top Software Repos on GitHub <https://ght.creativemaybeno.dev/>`_ 统计, `react (GitHub) <https://github.com/facebook/react>`_ 是GitHub上Stars最多的项目(在前15的Software Repos还有2个react相关项目: :ref:`react-native` 和 :ref:`nextjs` )

参考
=====
17 changes: 17 additions & 0 deletions source/javascript/react/nextjs/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
.. _nextjs:

=================================
Next.js
=================================

.. toctree::
:maxdepth: 1

intro_nextjs.rst

.. only:: subproject and html

Indices
=======

* :ref:`genindex`
16 changes: 16 additions & 0 deletions source/javascript/react/nextjs/intro_nextjs.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.. _intro_nextjs:

=================
Next.js 简介
=================

Next.js 是基于 :ref:`react` 的最大的全功能web应用扩展框架,并且集成了一个快速构建的 基于 :ref:`rust` 的 :ref:`javascript` 工具。根据 `Top Software Repos on GitHub <https://ght.creativemaybeno.dev/>`_ 统计,Next.js也是GitHub上排名第14的软件仓库(以Star计算),可见这个web框架的流行程度。

.. note::

`阮一峰的网络日志 <https://www.ruanyifeng.com/blog/>`_ 曾经推荐过一篇 `How I Built My Blog <https://www.joshwcomeau.com/blog/how-i-built-my-blog/>`_ 介绍如何采用Next.js构建blog的文章,非常详细和精彩。

参考
======

- `nextjs.org <https://nextjs.org/>`_
15 changes: 15 additions & 0 deletions source/javascript/react/react-native/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.. _react-native:

=================================
React Native
=================================

.. toctree::
:maxdepth: 1

.. only:: subproject and html

Indices
=======

* :ref:`genindex`
1 change: 1 addition & 0 deletions source/javascript/startup/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ JavaScript 快速起步
.. toctree::
:maxdepth: 1

js_basic.rst
first_js.rst
js_var_const.rst
css.rst
Expand Down
77 changes: 77 additions & 0 deletions source/javascript/startup/js_basic.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
.. _js_basic:

====================
JavaScript基础知识
====================

.. note::

本文知识不足一哂,仅仅是我学习过程笔记(以加强记忆)

注释
=======

JavaScript注释方法有2种:

- 单行注释 ``//``
- 多行注释 ``/* */``

大小写
==========

ECMAScript (即JavaScript) 中的一切都区分大小写。也就是不论变量、函数名还是操作符,都区分大小写。

标识符
======

- 标识符,即 变量、函数、属性或函数参数。
- 标识符由一个或多个字符组成,首字母必须是字母、下划线( ``_`` )或美元符号( ``$`` );其他字符则可以包含数字 ( **不能使用减号** ``-`` ,这点和 :ref:`shell` 不同,切记)
- 推荐采用驼峰命名方法,即 **第一个单词首字母小写,后面每个单词的首字母大写** (虽然不是强制,但是是 **最佳实践** ,我个人觉得也许可以在Shell中也使用类似命名方法)
- 和所有语言一样,关键字、保留字、 ``true`` 、 ``false`` 和 ``null`` 不能作为标识符

语句
=======

- ECMAScript 的语句以 **分号** ( ``;`` )结尾(同 :ref:`clang` )
- 多条语句可以合并到一个C语言风格的代码块中:

.. literalinclude:: js_basic/js_multi_lines.js
:language: javascript
:caption: JavaScript使用C语言风格代码块

变量
=======

ECMAScript的变量是 **松散类型** ,也就是变量可以保存任何类型的数据。

有3个关键字可以声明变量:

- ``var`` : 函数作用域有效
- ``const``
- ``let`` : 代码块作用域有效(也就是 ``let`` 作用域更小,类似在 ``if ... {...}`` 这样的代码块中有效)

- 定义多个变量的方法:

.. literalinclude:: js_basic/js_multi_var.js
:language: javascript
:caption: 定义多个变量

变量作用域
------------

- **使用var操作符定义的变量会成为包含它的函数的局部变量** : 也就是说,如果在一个函数内部使用 ``var`` 定义一个变量。则这个变量在函数退出时被销毁。
- 如果在函数内部省略 ``var`` 操作符,则创建的变量是 **全局变量**

.. warning::

在局部作用域定义全局变量会导致程序很难维护。在严格模式下,如果给未声明的变量赋值,会导致抛出 ``ReferenceError``

- 函数作用域内部通过 ``var`` 定义变量,则这个变量定义语句在作用域内部任何位置都是一样的,ECMAScript会自动将所有变量定义语句都拉到函数作用域的顶部;并且多次使用 ``var`` 声明同一个变量也没有问题(最后一个生效)

- ``let`` 定义的变量只在代码块部分有效,而且不会自动提升到代码块顶部;也就是说如果 ``let`` 定义变量的语句在使用这个变量的语句之后,就会触发 ``ReferenceError``

- 合理使用 ``let`` 申明块变量可以 **避免循环定义的迭代变量渗透到循环体外部** :

.. literalinclude:: js_basic/let_var.js
:language: javascript
:caption: 在循环体内部使用 ``let`` 定义变量,避免变量泄漏
4 changes: 4 additions & 0 deletions source/javascript/startup/js_basic/js_multi_lines.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
if (test) {
test = false;
console.log(test);
}
3 changes: 3 additions & 0 deletions source/javascript/startup/js_basic/js_multi_var.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
var message = "hi",
found = false,
age = 29;
3 changes: 3 additions & 0 deletions source/javascript/startup/js_basic/let_var.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
for (let i = 0; i < 5; ++i) {
// 这里变量 i 只在for循环内部有效,可以避免循坏体外部使用变量 i 时候误被这里的循环变量i 污染
}
23 changes: 20 additions & 3 deletions source/linux/gentoo_linux/install_gentoo_on_mbp.rst
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@
:language: bash
:caption: 制作Gentoo Linux安装U盘

网络
======

:ref:`gentoo_mbp_wifi` 是非常麻烦的过程: 我的 :ref:`mbp15_late_2013` 使用了 Broadcom BCM4360 无线芯片,对开源支持不佳。我至今依然没有很好解决这款wifi芯片的驱动(编译),所以最初在安装Gentoo Linux时不得不使用有线网络连接。

不过,如果使用 :ref:`android` 手机,可以使用 :ref:`android_usb_tethering` 来实现一个通用的USB无线网卡。这样就可以非常容易在安装中连接到无线网络,顺利进行安装。是的,目前我就是采用这种方法来解决安装联网(甚至可以让 :ref:`freebsd` 在无法使用 Broadcom BCM4360 无线芯片情况下通过这种方式连接无线网络 )

安装
=======

Expand Down Expand Up @@ -85,6 +92,8 @@

只有分区3是可以删除(之前安装macOS保留的空白分区),我将创建一个50G磁盘分区用于操作系统

之所以没有将所有磁盘分区都用完,是因为我规划在其余 :ref:`nvme` 磁盘分区中采用 :ref:`zfs` 作为数据存储文件系统,来实现灵活的卷管理

- 创建一个名为 ``rootfs`` 分区,格式化成 ``xfs`` :

.. literalinclude:: install_gentoo_on_mbp/parted_nvme_2
Expand Down Expand Up @@ -189,6 +198,7 @@ Chrooting
:language: bash
:caption: 在make.conf配置中添加阿里云国内镜像网


- 配置 ``/etc/portage/repos.conf/gentoo.conf`` Gentoo ebuild存储库:

.. literalinclude:: install_gentoo_on_mbp/gentoo.conf
Expand Down Expand Up @@ -250,6 +260,10 @@ Chrooting

emerge --sync

.. note::

国内镜像网站虽然没有GFW干扰,下载速度较快。但是 **国内镜像网站同步有延迟,可能会存在好几天都没有同步最新文件的情况** ,所以使用 ``emerge-webrsync`` 下载快照文件可能会失败(因为快照还没有同步)。不过,使用 ``emerge --sync`` 可以绕开这个同步延迟问题,最多也就是本次同步不能及时得到官方的最新版本(稍微旧几天的版本)。

选择正确profile
================

Expand All @@ -270,26 +284,29 @@ Chrooting
.. literalinclude:: install_gentoo_on_mbp/eselect_profile_list_output
:language: bash
:caption: 检查当前使用的 ``profile``
:emphasize-lines: 6

.. note::

当使用 :ref:`systemd` 时,请确保 ``profile`` 名称中包含 ``systemd`` ,否则请确保 **不包含** ``systemd``

在2023年9月的实践,我采用 ``no-multilib (stable)`` ,尝试构建一种轻量级的64位Linux系统

.. warning::

``profile`` 升级不能掉以轻心: 选择初始配置文件时,请确保使用与 stage3 最初使用的版本相同的配置文件

选择初始 ``profile`` 文件时,请确保使用与 stage3 最初使用的版本相同的配置文件

- 设置profile:
- 设置profile案例:

.. literalinclude:: install_gentoo_on_mbp/eselect_profile_set
:language: bash
:caption: 设置 ``profile``

.. note::

我准备采用 :ref:`sway` 最小化窗口管理器,所以选择 ``default/linux/amd64/17.1/desktop`` ( ``5`` )
之前我曾经采用过 :ref:`sway` 最小化窗口管理器,所以选择 ``default/linux/amd64/17.1/desktop`` ( ``5`` )

更新 @world set
================
Expand All @@ -313,7 +330,7 @@ Chrooting

``USE`` 是Gentoo为用户 提供的最强大的变量之一,可以配置支持或不支持某些选项来编译多个程序。例如有些程序可以支持 ``GTK+`` 或 ``Qt`` 情况下编译,或者支持 ``SSL`` ,有些程序甚至可以使用帧缓冲( ``svgalib`` )而不是X11支持来完成编译。

大多数Linux发行版为了能够尽可能多支持不同环境(软件和硬件),采用了最大化的编译参数,这导致增加了程序大小以及启动时间,而且会导致大量的依赖。使用Gentoo的用户可以通过定义编译选项来精简系统,使得硬件发挥更大功效。
**大多数Linux发行版为了能够尽可能多支持不同环境(软件和硬件),采用了最大化的编译参数,这导致增加了程序大小以及启动时间,而且会导致大量的依赖。使用Gentoo的用户可以通过定义编译选项来精简系统,使得硬件发挥更大功效。**

默认的 ``USE`` 设置使用Gentoo配置文件 ``make.defaults`` 。Gentoo使用了一个(复杂的)继承系统。检查当前的USE配置最简单的方法是:

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
Available profile symlink targets:
[1] default/linux/amd64/17.1 (stable) *
[1] default/linux/amd64/17.1 (stable)
[2] default/linux/amd64/17.1/selinux (stable)
[3] default/linux/amd64/17.1/hardened (stable)
[4] default/linux/amd64/17.1/hardened/selinux (stable)
[5] default/linux/amd64/17.1/desktop (stable)
[6] default/linux/amd64/17.1/desktop/gnome (stable)
[7] default/linux/amd64/17.1/desktop/gnome/systemd (stable)
[8] default/linux/amd64/17.1/desktop/gnome/systemd/merged-usr (stable)
[9] default/linux/amd64/17.1/desktop/plasma (stable)
[10] default/linux/amd64/17.1/desktop/plasma/systemd (stable)
...
[15] default/linux/amd64/17.1/no-multilib (stable) *
[16] default/linux/amd64/17.1/no-multilib/hardened (stable)
[17] default/linux/amd64/17.1/no-multilib/hardened/selinux (stable)
[18] default/linux/amd64/17.1/no-multilib/systemd (dev)
...
6 changes: 6 additions & 0 deletions source/linux/gentoo_linux/install_gentoo_on_mbp/option_tools
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,9 @@ emerge --ask net-wireless/iw net-wireless/wpa_supplicant

# USB工具(提供了lsusb)
emerge --ask sys-apps/usbutils

# vim
emerge --ask app-editors/vim

# sudo
emerge --ask app-admin/sudo
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
cd /mnt/gentoo

# stage3-amd64-openrc-20230220T081656Z.tar.xz 已经存放到这个目录下
# 2023年9月,我重新部署时采用纯64位系统,所以采用 stage3-amd64-nomultilib-openrc-20230903T170202Z.tar.xz
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
19 changes: 19 additions & 0 deletions source/shell/bash/bash_string.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
.. _bash_string:

==================
Bash字符串处理
==================

字符串大小写
==============

字符串大小写转换在Bash中有非常巧妙的方法,无需第三方工具,内置提供了参数扩展:

.. literalinclude:: bash_string/bash_upper_lower_case
:language: bash
:caption: 使用bash内置参数扩展实现字符串大小写转换

参考
======

- `Matching Uppercase and Lowercase Letters With Regex in Shell <https://www.baeldung.com/linux/shell-case-insensitive-matching>`_
5 changes: 5 additions & 0 deletions source/shell/bash/bash_string/bash_upper_lower_case
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
$ string="leVel"
$ echo "${string,,}"
level
$ echo "${string^^}"
LEVEL
1 change: 1 addition & 0 deletions source/shell/bash/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Bash

shell_style.rst
bash_shutcut.rst
bash_string.rst
bash_variable_name_rules.rst
shell_spec_variable.rst
append_to_file_as_sudo.rst
Expand Down

0 comments on commit 31288bf

Please sign in to comment.