Образ на Ubuntu 22.04 LTS (автоустановка) со встроенной СКЗИ «Валидата Клиент L»: сборщик build-iso-ubuntu.sh, шаг установщика «СКЗИ Валидата» (из комплекта образа, с совместимой libldap 2.4), установщик принимает Ubuntu 22.04

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-09-24 15:29:42 +03:00
parent dac8038ce8
commit 9b963eb0b9
4 changed files with 140 additions and 2 deletions
+34 -1
View File
@@ -144,6 +144,7 @@ func (in *installer) run() error {
all := []step{
{"precheck", "Проверка системы", in.stepPrecheck},
{"packages", "Системные пакеты", in.stepPackages},
{"validata", "СКЗИ «Валидата Клиент L»", in.stepValidata},
{"system", "Пользователь bj и каталоги", in.stepSystem},
{"license", "Активация лицензии", in.stepLicense},
{"database", "База данных PostgreSQL", in.stepDatabase},
@@ -203,9 +204,10 @@ func (in *installer) stepPrecheck() (string, error) {
name := pick(osr["PRETTY_NAME"], id+" "+ver)
switch {
case id == "debian" && strings.HasPrefix(ver, "13"):
case id == "ubuntu" && strings.HasPrefix(ver, "22.04"):
case id == "astra" || strings.Contains(like, "astra") || strings.Contains(strings.ToLower(name), "astra"):
default:
return "", fmt.Errorf("поддерживаются Debian 13 и Astra Linux, а на сервере %s", name)
return "", fmt.Errorf("поддерживаются Ubuntu 22.04, Debian 13 и Astra Linux, а на сервере %s", name)
}
if runtime.GOARCH != "amd64" {
return "", fmt.Errorf("нужна архитектура x86_64, а на сервере %s", runtime.GOARCH)
@@ -667,6 +669,37 @@ func (in *installer) componentsFromBundle() (string, error) {
return detail, nil
}
// validataDir — пакеты «Валидата Клиент L», положенные образом ISO (zpki, zsdk и совместимая libldap-2.4-2).
const validataDir = "/var/lib/bj/validata"
// stepValidata — ставит СКЗИ «Валидата Клиент L» из комплекта образа, если её ещё нет.
func (in *installer) stepValidata() (string, error) {
if out, err := run("dpkg-query", "-W", "-f", "${Version}", "zpki"); err == nil && strings.TrimSpace(out) != "" {
return "уже установлена, версия " + strings.TrimSpace(out), nil
}
debs, _ := filepath.Glob(in.P(validataDir) + "/*.deb")
if len(debs) == 0 {
return "не входит в комплект этой установки — поставьте по инструкции «Справка → Криптография»", nil
}
if in.root != "" {
return "проверка в песочнице: пакеты " + strings.Join(debs, ", "), nil
}
ld, _ := run("sh", "-c", "ldconfig -p 2>/dev/null | grep -c 'libldap_r-2.4.so.2' || true")
var args []string
for _, d := range debs {
if strings.Contains(filepath.Base(d), "libldap") && strings.TrimSpace(ld) != "0" && strings.TrimSpace(ld) != "" {
continue // в системе уже есть libldap 2.4
}
args = append(args, d)
}
env := append(os.Environ(), "DEBIAN_FRONTEND=noninteractive")
if out, err := runEnv(env, "apt-get", append([]string{"install", "-y", "-qq", "--no-install-recommends"}, args...)...); err != nil {
return "", fmt.Errorf("установка Валидаты: %v\n%s", err, tail(out, 12))
}
ver, _ := run("dpkg-query", "-W", "-f", "${Version}", "zpki")
return "установлена с образа, версия " + strings.TrimSpace(ver), nil
}
func (in *installer) stepServices() (string, error) {
var files []string
err := fs.WalkDir(deploy.Files, ".", func(p string, d fs.DirEntry, err error) error {