0%

背景

买了一台QNAP,是x86 的机器,性能强大,最高能装16G内存。某日偶然网上发现有人做svn 服务器,于是打算试试。为啥不用Git lab呢。因为发现Container 的网络ip,与局域网不同,暂时还不知道怎么将局域网机器与之连接。再说Git lab 要8G内存,我也没升级的意思。另外我就管理下个人代码,遇不到太复杂的场景。最后svn 转 Git 也有方法,实在不行再转。重要的记录下修改历史,并保存代码。用什么也不重要。

安装

安装Entware

我开始还以为有apt-get 或者 yum 可用,结果连rpm 都没有。网上就说用Entware,我们就用吧。
https://github.com/Entware/Entware
https://github.com/Entware/Entware/wiki/Install-on-QNAP-NAS
不过最新的Entware 是1.0.0了,http://bin.entware.net/other/Entware_1.00std.qpkg
还有一个http://bin.entware.net/other/Entware_1.00alt.qpkg
下载后手动在App Center里安装。

安装Subversion

首先打开NAS上的ssh,然后Putty、Git Bash等登陆NAS。

ssh xxx@xxx.xxx.xxx.xxx
opkg update    
opkg install subversion-server

通过 opkg 安装的软件启动脚本在 /opt/etc/init.d/ 目录
单个启动命令 /opt/etc/init.d/software_name start

配置

创建仓库

我的存储路径是
/share/CACHEDEV1_DATA/svn
我在下面建了svn做为总的文件夹,仓库建在svn下面
添加仓库python

1
2
3
cd /share/CACHEDEV1_DATA/svn
mkdir python
svnadmin create python

配置仓库

建议在svn目录下创建全局passwd,可以使所有仓库可用

1
2
cp python/conf/passwd passwd
vi passwd

在文件尾部加上用户和密码

your_user = your_password

编辑配置文件

1
vi python/conf/svnserve.conf

打开文件中下列各句

1
2
3
4
[general]
anon-access = none
auth-access = write
password-db = ../../passwd

启动svn

killall svnserve
svnserve -d

这里启用默认端口,以及其他默认参数。

SVN客户端,windows一般选择乌龟客户端https://tortoisesvn.net/downloads.html。
检出路径:

svn://xxx.xxx.xxx.xxx/share/svn/python

问题表现

在使用中发现 LinuxMint/Ubuntu 均存在关机(重启)时间过长的问题。经过搜索,此问题不光是 LinuxMint/Ubuntu 有,其他发行版如 Arch 也比较常见。

严格来说,这个“问题”不算问题,大体原因是由于关机时,某个进程没有结束,systemd 在为此等待 90 秒。在用户看来就是关机时间过长(重启也是同样表现)。具体表现为,在点击关机后,一直显示 Splash 画面
这时,我们按键盘 Esc 键可以发现,原来是 systemd 在等待90秒。屏幕显示: A stop job is running for Session……

经过一番搜索和研究找到了解决方案。目前分析的原因,可能是 systemd 与某些软件兼容性问题。有些国外网友采取 systemd 降级的方法,虽然有效,但是太麻烦。

安装watchdog

1 安装 watchdog

1
sudo apt install watchdog

2 开启 watchdog 服务

1
sudo systemctl enable watchdog.service

3 马上启用 watchdog 服务

1
sudo systemctl start watchdog.service

修改超时等待时间

编辑配置文件

1
sudo gedit /etc/systemd/system.conf

把里面的DefaultTimeoutStopSec的值改为3s,然后载入新的配置

1
sudo systemctl daemon-reload

修改开机等待时间及画面

1 编辑配置文件

1
sudo gedit /etc/default/grub

2 修改如下:

1
2
GRUB_TIMEOUT=1
GRUB_CMDLINE_LINUX_DEFAULT=""

3 更新配置

1
sudo update-grub

MYSQL关机超时问题

关机时系统卡住,停在Logo画面,ESC查看控制台有输出 A stop job is running for MySQL Community Server (*min *s / 10min) ,要等待计时结束才能自动关闭。
解决步骤:
1 使MySQL用户具有 /etc/mysql/debian.cnf 的读权限:

1
2
sudo chgrp mysql /etc/mysql/debian.cnf 
sudo chmod 640 /etc/mysql/debian.cnf

2 复制一份 mysql.service 文件,并修改其访问权限:

1
2
sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/ 
sudo chmod 755 /etc/systemd/system/mysql.service

3 编辑新复制的文件,在其中添加MySQL服务停止条件:

1
sudo gedit /etc/systemd/system/mysql.service

4 在文件的Service中添加一行:

1
ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown

5 载入新的配置:

1
sudo systemctl daemon-reload

其他几种解决办法

1 设置MySQL超时:

1
sudo gedit /etc/systemd/system/multi-user.target.wants/mysql.service

修改TimeoutSec=3

2 关机前手动停止MySQL服务:

1
sudo service mysql stop

需求

由于一开始安装只设置了/和swap分区,很快就发现空间不足,需要扩展home分区

磁盘准备

查看已有的磁盘,可以看到sdb还没有分区。

1
sudo fdisk -l

进入sdb进行分区,输入m可以查看帮助信息

1
sudo fdisk /dev/sdb

输入n新建分区,输入分区号1,然后输入大小我输入的是sector扇区的开始和结束位置,也可以输入以K M G T P为单位的大小。
然后查看要创建的分区表,这时还没有创建,按w保存退出后才成功。
可以再次执行 sudo fdisk -l 查看是否创建。

然后将新分区格式化为ext4

1
sudo mkfs -t ext4 /dev/sdb6

为/home挂载新分区

1 创建临时目录,用来临时挂载新分区

1
sudo mkdir /mnt/home

2 将新分区挂载到新文件夹

1
sudo mount /dev/sdb6 /mnt/home

3 将/home目录下的文件拷贝到新分区

1
2
cd /home
sudo cp -ax * /mnt/home

拷贝时间也许较长,耐心等待。

4 重命名原/home目录,并新建一个新的空/home目录,并将新分区挂载过来

1
2
3
4
cd /
sudo mv /home /home.old
sudo mkdir /home
sudo mount /dev/sdb6 /home

5 查看uuid,找到新分区id

1
sudo blkid

6 找到新分区的uuid,加入/etc/fstab

1
sudo gedit /etc/fstab

7 加入

1
UID=78ebdca7-7632-426a-93c5-fd95be0954e2 /home           ext4    defaults          0       2

8 最后修改权限问题,进入新挂载的/home 查看是否都是对应文件夹对应用户的权限,不是进行更改。

1
sudo chown -R will /will

安装gcc-arm-none-eabi

1
sudo apt-get install gcc-arm-none-eabi

上述安装没有gdb,使用vscode调试需要使用用以下方式进行安装

1
2
3
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded

安装STM32CubeMX

1 STM32CubeMX是32-bit程序,如果是64-bit系统,需要安装32-bit compliant packages such as ia32-libs.
在Ubuntu18.04中已经没有ia32-libs,使用lib32ncurses5 lib32z1替代

1
sudo apt-get install lib32ncurses5 lib32z1

2 STM32CubeMX是java程序,需要JRE支持,可以安装Oracle JDK或者OpenJDK
Oracle Java

OpenJDK is a free and open-source implementation of the Java Platform, Standard Edition licensed under the GNU General Public License version

1
2
3
sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless

Oracle JDK

1
2
3
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java11-set-default

测试是否安装成功

1
java --version

3 进入软件目录开始安装

1
sudo ./SetupSTM32CubeMX-5.0.0.linux

调试环境准备

安装openocd

1
sudo apt-get install openocd

如果使用stlink,安装stlink驱动

1 准备stlink驱动安装环境

1
2
3
4
sudo apt-get install libusb-dev
sudo apt-get install libusb-1.0
sudo apt-get install cmake
sudo apt-get install libgtk-3-dev

2 下载源码

1
2
git clone https://github.com/texane/stlink.git
cd stlink

3 编译及安装

1
2
3
4
5
6
7
8
9
make clean
make release
make debug
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
cd Release
sudo make install
ldconfig

如果使用Jlink,安装Jlink驱动

1 首先安装readline

1
sudo apt-get install libreadline6-dev

2 去jlink下载安装程序,然后安装

1
sudo dpkg -i JLink_Linux_V644h_x86_64.deb

配置udev

1 生成49-link.rules文件

1
sudo gedit /etc/udev/rules.d/49-link.rules

输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0102", \
MODE:="0666", \
SYMLINK+="jlink_%n"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", \
MODE:="0666", \
SYMLINK+="stlinkv1_%n"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
MODE:="0666", \
SYMLINK+="stlinkv2-1_%n"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \
MODE:="0666", \
SYMLINK+="stlinkv2_%n"

2 使udev生效

1
sudo /etc/init.d/udev restart

下载程序

1
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg 2>/dev/null &
1
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg 2>/dev/null &

下载

1
2
3
4
telnet localhost 4444
halt
flash write_image erase *.hex
reset

下载过程有时候会提示失败,需要reset后再下载

配置vscode

安装相关插件

  • 安装插件 ARM;
  • 安装插件 Cortex-Debug;
  • 安装插件 C/C++; 必要插件,否则无法调试。
  • 安装插件 C/C++ Clang Comamnd Adapter; 用来补全和诊断,需要同时安装Clang,参考官方文档。
  • 安装插件 Uncrustify; 用来格式化代码, shift+alt+f,非常方便。缺点是代码中有Unicode可能会导致乱码,然后配置文件有点多。
  • 安装插件 Bracket Pair Colorizer; 不同颜色高亮显示匹配括号,爱护视力必备。

编辑launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"cwd": "${workspaceRoot}",
"executable": "./build/*.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"BMPGDBSerialPort": "/dev/ttyACM0",
"runToMain": true,
"configFiles": [
"interface/jlink.cfg",
"target/stm32f1x.cfg"
]
}
]
}

安装串口软件

推荐cutecom,界面化,支持HEX收发

1
sudo apt-get install cutecom

安装Apache

1 安装

1
sudo apt-get install apache2

安装完成后打开http://localhost 如果能访问说明服务器已经能够运行

2 设置index.php优先

1
sudo gedit /etc/apache2/mods-enabled/dir.conf

更改为首先列出index.php,修改配置文件以后,我们需要重新启动一下Apache服务器。

1
sudo systemctl restart apache2

3 为了方便后续使用,修改/var/www/html的权限

1
sudo chmod 777 /var/www/html

安装MySQL

1 安装

1
sudo apt-get install mysql-server

2 修改mysql root密码

1
sudo gedit /etc/mysql/debian.cnf

复制debian-sys-maint的密码,等一会登陆的时候粘贴

1
2
3
4
5
6
7
mysql -u debian-sys-maint -p

use mysql;
update user set authentication_string=password('Pwd@1234') where user='root';
update user set plugin="mysql_native_password";
flush privileges;
quit;

安装PHP

1 安装

1
sudo apt-get install php

2 打开mysqli扩展

1
2
sudo apt-get install php-mysql
sudo gedit /etc/php/7.2/apache2/php.ini

去掉注释:extension=mysqli,保存后重启Apache即可
3 在/var/www/html下建立index.php,内容如下:

1
2
3
<?php
phpinfo();
?>

之后再打开http://localhost 可以查看PHP配置情况

安装phpMyAdmin

https://www.phpmyadmin.net/downloads/ 下载最新版程序并解压到/var/www/html目录下
然后登陆http://localhost/phpmyadmin 进入数据库管理网站

背景

写blog虽然经历了N多不同时代的产品,恒久不变的始终是自己无人问津的网站。虽然没几个人看,还是隔断时间就要折腾一下。从最开始的wordpress,到tale,到现在的hexo,网站变得越来越简单,越来越轻量级,这里主要说说hexo的使用。
hexo介绍
主页: https://hexo.io/zh-cn/
主页中有非常详细的介绍,主页中有介绍内容我这里就不赘述了,这里主要说说主页中没有详细说明内容。

hexo 可以理解为是基于node.js制作的一个博客工具,不是我们理解的一个开源的博客系统。其中的差别,有点意思。
hexo 正常来说,不需要部署到我们的服务器上,我们的服务器上保存的,其实是基于在hexo通过markdown编写的文章,然后hexo帮我们生成静态的html页面,然后,将生成的html上传到我们的服务器。简而言之:hexo是个静态页面生成、上传的工具。

下面安装及使用的系统环境为Ubuntu。

安装

1 安装nodejs

1
sudo apt-get install nodejs

2 安装git

1
sudo apt-get install git

3 安装npm

1
sudo apt-get install npm

4 使用npm安装Hexo

1
sudo npm install -g hexo-cli

5 下面开始生成blog

1
2
3
4
5
hexo init blog
cd blog
npm install
hexo generate
hexo server

然后可以打开浏览器输入localhost:4000查看本地网站

源码结构

  • _config.yml 配置文件
  • public 生成的静态文件,这个目录最终会发布到服务器
  • scaffolds 一些通用的markdown模板
  • source 编写的markdown文件,_drafts草稿文件,_posts发布的文章
  • themes 博客的模板

我们正常使用,修改最多的源码是_config.yml文件,不管是博客的基础配置,还是模板,都是修改这个文件。
source是我们日常写文章要用的目录,是我们日常操作的文件夹。
如果针对下载的模板修改,那么就需要操作themes了。hexo是用node.js编写的程序,所以theme的修改也是比较容易的。

使用

编写BLOG

官方新编写BLOG,建议的是使用命令:

1
hexo new [layout] "title"

其实,你可以直接在_drafts新建markdown文件,就是草稿了,在_posts新建markdown文件,就是发布的文章了。当然,记得在顶部加上相关的描述,效果和命令新建文件,是一样一样的。

模板安装和使用

hexo为我们提供了非常多好看实用的模板,官网提供了很多模板,但是,针对模板的使用,只进行了非常简单的说明,这里以我自己的使用的模板diaspora为例,进行详细的补充。

其实,模板的使用,简单来说,只需要两个步骤:

1 将模板copy到themes目录,如:

1
2
cd themes
git clone https://github.com/Fechin/hexo-theme-diaspora.git diaspora

2 修改_config.yml中的theme:

1
theme: diaspora

所有的模板,共有的操作方式就只有这两个,但是不同的模板,会有很多不同的设置,这里就需要针对模板的使用说明进行修改了。建议通过github找到模板,看下readme。

必要的时候需要更新主题
注意:请在更时主题时备份_config.yml配置文件

1
2
cd themes/diaspora
git pull

新建文章模板

1
2
3
4
5
6
7
8
9
10
11
title: {{ title }}
date: {{ date }}
categories:
- categorie
tags:
- tag1
- tag2
mp3:
- http://xxx.xxx.xxx/xxx.mp3
- http://xxx.xxx.xxx/xxx.mp3
cover: /img/cover.jpg

创建分类页

1 新建一个页面,命名为 Categories 。命令如下:

1
hexo new page Categories

2 编辑刚新建的页面,将页面的类型设置为 categories

1
2
3
title: Categories
date: 2019-05-11 16:44:48
type: "categories"

主题将自动为这个页面显示所有分类。

创建标签页

1 新建一个页面,命名为 Tags 。命令如下:

1
hexo new page Tags

2 编辑刚新建的页面,将页面的类型设置为 tags

1
2
3
title: Tags
date: 2019-05-11 16:45:50
type: "tags"

主题将自动为这个页面显示所有标签。

主题配置

1
2
3
4
5
# 头部菜单,title: link
menu:
Categories: /Categories
Tags: /Tags
Github: https://github.com/dove-studio

发布

现在比较流行的方式,都是将代码发布到git,因为我同时要传到github和自己的博客,所有我的处理方式就是:先将代码传到github,再在自己的服务器获取github代码,服务器上自己部署一个nginx,解析静态网页即可。
1 首先注册github账号,比如dove-studio
https://github.com/

2 然后创建一个新项目:
固定格式:dove-studio.github.io

3 点击设置,创建一个page,选择一个主题,不过没什么用,反正马上就被覆盖掉了,这个时候访问一下链接,应该可以看到效果

4 安装git插件:

1
sudo npm install hexo-deployer-git --save

5 git的配置,修改_config.yml文件,使用SSH(非HTTPS):

1
2
3
4
deploy:
type: git
repo: git@github.com:dove-studio/dove-studio.github.io.git
branch: master

6 配置本地的ssh github私钥

  • 本地生成公钥私钥
    1
    ssh-keygen -t rsa -C "dove-studio@qq.com"
  • 添加公钥到 Github
    根据上一步的提示,找到公钥文件(默认为id_rsa.pub),用记事本打开,全选并复制。
    登录 Github,右上角 头像 -> Settings —> SSH keys —> Add SSH key。把公钥粘贴到key中,填好title并点击 Add key。
  • 配置完成后输入命令进行测试
    1
    ssh -T git@github.com
    第一次还需要输入yes确认,等待片刻可看到成功提示。

7 设置您账号的缺省身份标识

1
2
git config --global user.email "dove-studio@qq.com"
git config --global user.name "dove-studio"

如果仅在本仓库设置身份标识,则省略 –global 参数。
如果存在多个用户,需要设置配置文件

1
gedit ~/.ssh/config

输入以下内容

1
2
3
4
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_dove

8 将本地的文章通过hexo官方推荐的方式push到github:

1
hexo deploy

这样应该就能在你的github上看到上传的代码了,这时看到的应该是纯静态的一个站点。
既然代码已经上传了,那么只要在我的服务器配置好github和ssh私钥,就能顺利的pull代码了,当然,还需要写个crontab定时来拉取,不需要自己登录服务器操作了。

常见问题

执行deploy命令了,但是代码未上传?

先执行hexo generate命令,生成静态文件了,再执行hexo deploy上传,上传是只会上传public中生成的文件。

修改了模板,但是没有生效?

修改了模板以后不生效,建议先hexo clean,然后再hexo generate。只执行hexo generate,可能模板后者静态文件不会被替换。

预览不太方便?

开发环境提供了实时预览的方式,不需要每次都generate,执行命令:

1
hexo generate -w

系统会实时生成新的HTML,非常方便。