晨曦's Blog

This is a window to the soul

之前安装了 openldap 服务和 lam 管理平台,接下来我们看看如何在 ldap 中添加多个不同的组和用户来实现不同平台使用不同组下的用户登陆。

创建 Group

先创建一个组,如图:

创建用户

在刚才创建的组里创建用户,如图:

创建 Group 组

创建 objectClass 属性为 groupOfUniqueNames 的组 gogs 用于 gogs 登陆

其中 cn 为组名,uniqueMember 为组下用户

为 Gogs 添加认证源

绑定DNLdap 管理员的 DN
绑定密码Ldap 管理员密码
用户搜索基准ou=users,dc=jakehu,dc=me 用户组
用户过滤规则
(&(objectClass=inetOrgPerson)(memberOf=cn=gogs,ou=groups,dc=jakehu,dc=me)(cn=%s))
实现不同平台不同分组的重点就是 memberOf

更改认证源

如何将已经存在 gogs 用户改为 ldap 认证,如下图,更改用户的认证方式即可


题外话:禅道 (zentao) 接入 Ldap 参考

Ldap

轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过 IP 协议提供访问控制和维护分布式信息的目录信息。

摘自维基百科,关于 LDAP 概念和原理可以看看这篇文章 LDAP 概念和原理介绍

服务端

镜像

1
docker pull osixia/openldap:1.3.0

容器

1
2
3
4
5
6
7
8
docker run -p 389:389 --name openldap --restart=always \
--env LDAP_ORGANISATION="jakehu" \
--env LDAP_DOMAIN="jakehu.me" \
--env LDAP_ADMIN_PASSWORD="jakehu" \
--env LDAP_CONFIG_PASSWORD="jakehu" \
--volume /data/database:/var/lib/ldap \
--volume /data/config:/etc/ldap/slapd.d \
--detach osixia/openldap:1.3.0

参数

端口:默认服务端口使用 389 端口
LDAP_ORGANISATION:机构组织
LDAP_DOMAIN:域
LDAP_ADMIN_PASSWORD:管理员 (admin) 密码
LDAP_CONFIG_PASSWORD:配置管理密码
/etc/ldap/slapd.d:配置文件
/var/lib/ldap:后端数据,默认为 mdb

客户端

镜像

1
docker pull ldapaccountmanager/lam:7.2.RC1

容器

1
2
3
4
5
6
7
docker run -d --restart=always --name ldapaccountmanager -p 9880:80 \
--link openldap:openldap \
--env LDAP_DOMAIN=jakehu.me \
--env LAM_LANG=zh_CN \
--env LDAP_SERVER=ldap://openldap:389 \
--env LAM_PASSWORD=jakehu \
--detach ldapaccountmanager/lam:7.2.RC1

参数

LAM_LANG:语言
LDAP_SERVERLdap 服务器
LAM_PASSWORDlam 密码,默认用户名 lam

配置

接下来访问 http://IP:9880 就能看到下面画面

点击 LAM configuration 进入配置界面


这里的密码,就是我们设置的 LAM_PASSWORD

另外设置的 LDAP_SERVERLDAP_DOMAIN 都被体现出来了,最后在 Account types 中修改默认创建的两个组,这两个组会在首次登陆系统时提示创建

然后登陆创建我们刚设置的两个组

看下结构树,两个分组已经被创建了

到此就已经完成 docker 版的 openldaplam 的安装配置


o – organization(组织 - 公司)
ou – organization unit(组织单元 - 部门)
c - countryName(国家)
dc - domainComponent(域名)
sn – suer name(真实名称)
cn - common name(常用名称)

pip 出现以下错误

1
2
3
4
Traceback (most recent call last):
File "/usr/local/bin/pip3", line 6, in <module>
from pip._internal.cli.main import main
ModuleNotFoundError: No module named 'pip._internal.cli.main'

经过排查应该是 brew install openssh 之后安装了 python3.8 的包导致的

卸载 Openssh

利用 rmtree 卸载 Openssh 及其依赖

1
2
brew tap beeftornado/rmtree
brew rmtree openssh

Pip 修复

python3 -m pip install --upgrade pip --user

基于 Docker+Python 对 git 项目自动提交

使用场景

第一个使用场景

自己本地有几个私有库,如 hexo资料记载等… 这些个私有库有事没事就需要 push 更改,所以需要自动提交

第二个使用场景

home-assistant 安装在树莓派上,但是对于 home-assistant 的配置文件希望用 git 管理起来

使用

以上两个使用场景其实都是需要外挂盘符来操作的,接下来编写 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
version: '2'
services:
git-auto-push:
image: jakehu/git-auto-push:latest
container_name: git-auto-push
restart: always
volumes:
- /Web/项目1:/opt/Web/项目1
- /Web/项目2:/opt/Web/项目2
- /Web/项目3:/opt/Web/项目3
- /you_dir/.ssh/:/root/.ssh/

/opt/Web/ 勿修改,程序会自动读取 /opt/Web/ 下一级目录作为需要监听的项目,.ssh 挂载进去主要是不用单独去配置 ssh key

启动:docker-compose up -d


Github 地址

参考:GitPython 操作 Git

git

在使用 git clone gogs 项目的时候出现错误 fatal: unable to fork ,原因是因为没有 openssh,解决:brew install openssh

npm

问题如下:

1
2
3
4
5
6
> node-gyp rebuild
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.
No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'.
No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.
gyp: No Xcode or CLT version detected!

尝试解决:

1
2
xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates

尝试失败了,再次尝试解决:

1
2
sudo rm -rf $(xcode-select -print-path)
xcode-select --install

先删除再重新安装问题解决,真是奇葩问题

先来看看阿里对 docker 加速的步骤

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

接下来我们对群晖中 Docker 套件进行设置,配置文件如下,只需要将阿里加速地址设置在 registry-mirrors 即可

1
2
3
4
5
6
7
8
# 配置文件路径
# /var/packages/Docker/etc/dockerd.json
{
"data-root" : "/var/packages/Docker/target/docker",
"log-driver" : "db",
"registry-mirrors" : ["https://xxx.mirror.aliyuncs.com"],
"storage-driver" : "btrfs"
}

在群晖中对服务的管理可以用 synoservice 命令,利用下面命令重启 Docker

1
synoservice --restart pkgctl-Docker

这样就能重启 Docker 实现加速了,最后我们可以通过 docker info 来查看 Registry Mirrors 参数看是否设置正确


另一种方式也可以通过网页端的套件中心对套件进行停用启用

安装

其实安装挺简单的,因为家里有群晖,所以只需要在 docker 插件上进行安装即可

配置

http

由于群晖中容器安装,所以需要设置 http 访问地址,不然会出现以下错误

1
2
3
4
5
6
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/aiohttp/web_protocol.py", line 275, in data_received
messages, upgraded, tail = self._request_parser.feed_data(data)
File "aiohttp\_http_parser.pyx", line 523, in aiohttp._http_parser.HttpParser.feed_data
aiohttp.http_exceptions.BadStatusLine: invalid HTTP method
2020-05-01 16:19:34 ERROR (MainThread) [aiohttp.server] Error handling request

配置如下:

1
2
http:
base_url: http://xx.xxx.com:8123

Mysql

默认是用的 sqlite 数据库,如果数据量比较大的话建议可以用 mysql 配置如下:

1
2
recorder:
db_url: mysql://user:password@SERVER_IP/DB_NAME?charset=utf8

插件

对于 docker 安装的版本只有核心,并没有 hass.io 插件模块,对于这块可以看以下文章,不过官方好像已经放弃这种方式了:

Hass.io via Docker


估计还是需要上树莓派才是王道

插件

autojump:实现目录间快速跳转,想去哪个目录直接 j,不用再有事没事就 cd
zsh-autosuggestions:输入命令时可提示自动补全以及之前的历史记录,然后按键盘即可
zsh-syntax-highlighting:日常用的命令会高亮显示,命令错误显示红色

安装

安装前我们可以在配置文件中查看 plugins 目录如下

1
2
# Standard plugins can be found in ~/.oh-my-zsh/plugins/*
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/

autojump 安装如下:

1
brew install autojump

zsh-autosuggestions 安装如下:

1
git clone git@github.com:zsh-users/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions

zsh-syntax-highlighting 安装如下:

1
git clone git@github.com:zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting

配置

1
2
3
4
5
plugins=(
autojump
zsh-autosuggestions
zsh-syntax-highlighting
)

加载

source .zshrc

前记

自用代码管理 gogs 和对应的 mysql 都部署在家用群晖的 Docker 上,今早发现 gogs500 错误无法访问,经过查询日志确定是 mysql 5.7 密码已过期,如下错误

1
Error 1862: Your password has expired. To log in you must change it using a client that supports expired passwords.

解决

ssh 登陆到群晖

1
ssh admin@192.168.1.x -p xx22

首先我们需要对群晖 admin 账户提权

1
sudo su

然后进入对应的 docker 容器并登陆到 mysql 客户端,这里说明一下客户端的密码是不会过期的

1
docker exec -it mysql1 mysql -uroot -ppassword

然后重置密码

1
set password = password('newpassword');

接下来刷新权限

1
flush privileges;

最后设置密码永不过期

1
SET GLOBAL default_password_lifetime = 0;

到此问题就解决了,又可以愉快的访问 gogs

前记

6.2 系列引导已经出了一年多了,最近想升级 6.2 试试,于是踩进了坑

当前配置:

  • 型号:DS3615xs
  • 系统:6.1.7

踩坑步骤

  • 新做 1号U盘(6.2引导盘)
  • 拔出 2号U盘(6.1.7引导盘)换上 1号U盘(6.2引导盘)
  • 启动 - 联机 - 迁移(6.2.2)- 重启
  • 做完上面步骤后开机找不到 IP(这里已经改 BIOS 传统启动方式了)
  • 用原 2号U盘(6.1.7引导盘)重新引导
  • 启动 - 联机 - 提示还原 - 还原 - 重启
  • 做完上面步骤后又找不到 IP

降级处理

  • 新做 1号U盘(6.1.7引导盘)型号为 DS3617xs
  • 启动 - 联机 - 全新安装(如果用迁移依然没法降级安装)- 重启

做完以上步骤重启发现仅系统盘丢失,数据盘依然存在,如:docker 容器等

参考资料

XPEnology Community

0%