Linux debian 3.1-13. Скрипты для настройки окружения gcc для сборки внешних компонент через шаблон VNCOMP82 для 1С 8.2 и 1С 8.3

21.08.25

Администрирование - Linux

Статья рассматривает следующие вопросы для ОС Debian: - правильную установку компилятора gcc для сборки компонент из шаблона VNCOMP82, а также скрипт для обновления до версии gcc 3.4.6 (минимально рекомендуемая версия) под старые версии debian 3.x - актуальную ссылку на учебный диск фирмы 1С (свободная лицензия), который содержит шаблоны для внешних компонент по технологии NATIVE. - доработка шаблона VNCOMP82 под debian 64 bit. Использованные в статье скрипты можно использовать для настройки основного окружения. В статье не рассматриваются вопросы, связанные с установкой дистрибутивов.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Бесплатно
Подключить архив пакетов под дистрибутив Debian. Предназначен для Debian 2.x и новее.
.sh 20,45Kb
1 Скачать бесплатно
Установка пакетов GCC под Debian 3 и новее (дополнен поддержкой под процессоры i386, i486 и i586)
.sh 5,23Kb
1 Скачать бесплатно
Обновление gcc на debian 3.1 для сборки внешних компонент. Скрипт долгий - рекомендуется выдавать на виртуальную машину около 500 МБ.
.sh 24,96Kb
0 Скачать бесплатно
Установка локализации в консоли для компиляции gcc под debian 3.x
.sh 5,38Kb
0 Скачать бесплатно
Linux debian 3.x - установка kde.
.sh 3,23Kb
0 Скачать бесплатно

На момент написания статьи, так уж получилось, что когда решил улучшить свою консоль запросов 4.0 - сделать замер выполнения запросов под 1с 8.2 на Linux. Оказалось что под 1с 8.2 (старше версии 13) на сервере нет возможности запустить приложение. Для Windows серверов такая проблема легко обходится - есть COM объекты, которые реализуют нужные процедуры. 

Однако Linux не поддерживает технологию OLE и COM (тем не менее, попытки сделать компоненту для вызова классов NET под Linux принимались с определенным результатом).  Для моего случая, данного результата оказалось недостаточно - слишком старые в поддержке дистрибутивы Linux поддерживает 1с 8.2.

Основы создания внешних компонент рассмотрены в другой статье, здесь автор ограничится настройкой оснастки.

 

Актуальная ссылка на скачивания шаблона компонент VNCOMP82 под платформы 8.2 и старая версия шаблона под платформу 8.3 (2014 год).

Шаблон VNCOMP82 с внесенными в него исправлениями под Linux находится по этой ссылке:

Скачать платформу 1С:Предприятие 8.2 (учебная версия, полный комплект). Сама ссылка ведет на архив ссылки в Webarchive и уже оттуда можно скачать этот бесплатный учебный диск.

Если стоит цель разработки под платформу 8.3 и под разные типы клиентов и браузеров, тогда имеет смысл скачать другие шаблоны в свободном доступе - так как они обновлены и  представляют большее удобство разработчику. 

Переходим к выбору дистрибутива Linux. 

 

Почему Debian.

Не смотря на то, что Ubuntu и СentOS удобнее чем Debian (на первом этапе знакомства), у них есть главный недостаток: стремительный рост системных требований. Ubuntu в 2025 году отказалась от поддержки IA-32, требуя уже более 1ГБ ОЗУ. У CentOS ситуация похожая. 

Debian 12, вышедший в 2023 году с установленным LXDE рабочим столом (не учить же в самом деле все команды 1С-нику) - как самая легковесная оболочка потреблял около 300 МБ ОЗУ (замеры проводил на Virtualbox). Это по меркам современности является пренебрежимо малой величиной, однако настроить окружение для сборки внешних компонент на этом дистрибутиве на самом деле задача тривиальная. Debian 13 (август 2025 года) также не слишком повысила требования к системным ресурсам.

Самое главное, что нужно помнить всегда - Debian скачивается как DVD диск (это справедливо для версий 4.0-13). В этом случае можно сразу установить GUI (для 1С разработчика без GUI очень неудобно).  Хорошие сборки можно найти либо на сайте debian, или же на случай очень древних версий - webarchive (Debian до некоторых пор DVD не очень жаловал как установочный носитель). 

Установка версии, начиная с версии Debian 4 и новее в целом идентична для виртуальной машины за маленьким отличием: в новых версиях есть возможность поставить LXDE рабочий стол, который легче, нежели Gnome рабочий стол. И естественно ставить мышь как ps/2 и диски ide для версий 4-8.

Debian 3.x устанавливается иначе, и также там русская локализация - это KOIR, а не UTF-8 как для всех версий с 4.0.

Настройка среды для сборки (под debian 4 и новее). 

После того, как была произведена установка Debian, нужно разобраться с поддержкой пакетов. Если для тестового стенда выбраны последние актуальные версии debian, то все хорошо и настройку проводить не надо. Однако если дистрибутив устарел основательно, то нужно сначала тогда выполнить настройку для установки пакетов из архива. 

Для этих целей подойдет следующий пакетный файл bash (код расширен под установку архива для всех версий, у которых он доступен): 

#!/bin/bash

# Универсальный менеджер архивных репозиториев Debian
# Поддерживает версии от 2.0 (Hamm) до текущей стабильной

# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[1;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Проверка наличия русской локализации UTF-8
check_russian_locale() {
    if locale -a | grep -qi "ru_RU.utf8" || locale -a | grep -qi "ru_RU.utf-8"; then
        return 0
    else
        return 1
    fi
}

# Установка русской локализации (только для etch и выше)
install_russian_locale() {
    echo -e "${BLUE}Русская локаль не найдена. Установить? (y/N) ${NC}"
    read -r answer
    if [[ $answer = [Yy]* ]]; then
        echo -e "${BLUE}Установка русской локали...${NC}"
        apt-get update
        apt-get install -y locales
        sed -i '/ru_RU.UTF-8/s/^# //g' /etc/locale.gen
        locale-gen ru_RU.UTF-8
        update-locale LANG=ru_RU.UTF-8
        export LANG=ru_RU.UTF-8
        # Проверяем успешность генерации
        if ! locale -a | grep -qi "ru_RU.utf"; then
            echo -e "${BLUE}Стандартный метод не сработал, используем dpkg-reconfigure...${NC}"
            dpkg-reconfigure locales
        fi
        echo -e "${GREEN}Русская локаль успешно установлена.${NC}"       
        return 0
    else
        echo -e "${BLUE}Продолжаем с английской локалью.${NC}"
        return 1
    fi
}

# Инициализация языковых переменных
init_language() {
    # Сначала получаем кодовое имя для проверки версии
    local codename=$(get_debian_codename)
    
    # Для версий ниже etch (woody, sarge, potato, slink, hamm) всегда используем английский
    if [[ "$codename" == "woody" || "$codename" == "sarge" || "$codename" == "potato" || "$codename" == "slink" || "$codename" == "hamm" ]]; then
        # Английские тексты для старых версий
        MSG_TITLE="=== Debian Archive Repository Manager ==="
        MSG_VERSION="Detected version:"
        MSG_UNSUPPORTED="WARNING: Version %s is not supported by this script!"
        MSG_OLD_WARNING="Warning: This is a very old Debian version (%s)"
        MSG_OLD_WARNING2="Some packages may be unavailable or have limited functionality"
        MSG_CONFIRM="Do you want to add archive repositories for %s?"
        MSG_WARNING="Warning: This will replace your current /etc/apt/sources.list!"
        MSG_PROMPT="Continue? (y/N) "
        MSG_SUCCESS="Done! System configured to use archive repositories."
        MSG_CANCEL="Operation cancelled by user."
        MSG_ERROR_ROOT="Error: Root privileges required! Please run with sudo."
        MSG_ERROR_BACKUP="Error: Failed to create backup."
        MSG_ERROR_VERSION="Error: Version %s is not supported"
        MSG_ERROR_DETECT="Error: Failed to detect Debian version"
        MSG_BACKUP="Creating backup: %s.bak"
        MSG_ADD_REPO="Adding repositories for %s..."
        MSG_OLD_CONFIG="Configuring APT for very old versions..."
        MSG_OLD_COMPAT="Configuring compatibility with old package formats..."
        MSG_UPDATE="Updating package list..."
        MSG_SECURITY_ASK="Add security repository from archive? (y/N) "
        MSG_BACKPORTS_ASK="Add backports repository? (y/N) "
        MSG_BACKPORTS_ADD="Adding backports repository for %s..."
        MSG_NONUS_ASK="Add non-US repository (for cryptographic software)? (y/N) "
        
        NOTES_TITLE="Important notes for Debian %s:"
        NOTES_1="1. You may need to install apt-transport-http:"
        NOTES_2="   apt-get install apt-transport-http"
        NOTES_3="2. For HTTPS support you may need:"
        NOTES_4="   apt-get install openssl libssl0.9.8"
        NOTES_5="3. If you get GPG errors:"
        NOTES_6="   apt-get install debian-archive-keyring"
        NOTES_7="   apt-key add /usr/share/keyrings/debian-archive-keyring.gpg"
    elif check_russian_locale; then
        # Русские тексты
        MSG_TITLE="=== Менеджер архивных репозиториев Debian ==="
        MSG_VERSION="Определена версия:"
        MSG_UNSUPPORTED="ВНИМАНИЕ: Версия %s не поддерживается скриптом!"
        MSG_OLD_WARNING="Внимание: Это очень старая версия Debian (%s)"
        MSG_OLD_WARNING2="Некоторые пакеты могут быть недоступны или иметь ограниченную функциональность"
        MSG_CONFIRM="Вы хотите добавить архивные репозитории для %s?"
        MSG_WARNING="Внимание: Это заменит текущий /etc/apt/sources.list!"
        MSG_PROMPT="Продолжить? (y/N) "
        MSG_SUCCESS="Готово! Система настроена для работы с архивными репозиториями."
        MSG_CANCEL="Операция отменена пользователем."
        MSG_ERROR_ROOT="Ошибка: Требуются root-права! Запустите скрипт с sudo."
        MSG_ERROR_BACKUP="Ошибка: Не удалось создать резервную копию."
        MSG_ERROR_VERSION="Ошибка: Версия %s не поддерживается"
        MSG_ERROR_DETECT="Ошибка: Не удалось определить версию Debian"
        MSG_BACKUP="Создаем резервную копию: %s.bak"
        MSG_ADD_REPO="Добавляем репозитории для %s..."
        MSG_OLD_CONFIG="Настраиваем APT для очень старых версий..."
        MSG_OLD_COMPAT="Настраиваем совместимость со старыми форматам пакетов..."
        MSG_UPDATE="Обновляем список пакетов..."
        MSG_SECURITY_ASK="Добавить security-репозиторий из архива? (y/N) "
        MSG_BACKPORTS_ASK="Добавить backports-репозиторий? (y/N) "
        MSG_BACKPORTS_ADD="Добавляем backports-репозиторий для %s..."
        MSG_NONUS_ASK="Добавить non-US репозиторий (для криптографического ПО)? (y/N) "
        
        NOTES_TITLE="Важные заметки для Debian %s:"
        NOTES_1="1. Может потребоваться установка apt-transport-http:"
        NOTES_2="   apt-get install apt-transport-http"
        NOTES_3="2. Для работы с HTTPS может потребоваться:"
        NOTES_4="   apt-get install openssl libssl0.9.8"
        NOTES_5="3. Если возникнут ошибки GPG:"
        NOTES_6="   apt-get install debian-archive-keyring"
        NOTES_7="   apt-key add /usr/share/keyrings/debian-archive-keyring.gpg"
    else
        # Для etch и выше предлагаем установить русскую локаль
        install_russian_locale
        # Если пользователь согласился и установка прошла успешно, перезагружаем скрипт
        if check_russian_locale; then
            echo -e "${GREEN}Перезапуск скрипта с русской локалью...${NC}"
            exec "$0" "$@"
        else
            # Английские тексты по умолчанию
            MSG_TITLE="=== Debian Archive Repository Manager ==="
            MSG_VERSION="Detected version:"
            MSG_UNSUPPORTED="WARNING: Version %s is not supported by this script!"
            MSG_OLD_WARNING="Warning: This is a very old Debian version (%s)"
            MSG_OLD_WARNING2="Some packages may be unavailable or have limited functionality"
            MSG_CONFIRM="Do you want to add archive repositories for %s?"
            MSG_WARNING="Warning: This will replace your current /etc/apt/sources.list!"
            MSG_PROMPT="Continue? (y/N) "
            MSG_SUCCESS="Done! System configured to use archive repositories."
            MSG_CANCEL="Operation cancelled by user."
            MSG_ERROR_ROOT="Error: Root privileges required! Please run with sudo."
            MSG_ERROR_BACKUP="Error: Failed to create backup."
            MSG_ERROR_VERSION="Error: Version %s is not supported"
            MSG_ERROR_DETECT="Error: Failed to detect Debian version"
            MSG_BACKUP="Creating backup: %s.bak"
            MSG_ADD_REPO="Adding repositories for %s..."
            MSG_OLD_CONFIG="Configuring APT for very old versions..."
            MSG_OLD_COMPAT="Configuring compatibility with old package formats..."
            MSG_UPDATE="Updating package list..."
            MSG_SECURITY_ASK="Add security repository from archive? (y/N) "
            MSG_BACKPORTS_ASK="Add backports repository? (y/N) "
            MSG_BACKPORTS_ADD="Adding backports repository for %s..."
            MSG_NONUS_ASK="Add non-US repository (for cryptographic software)? (y/N) "
            
            NOTES_TITLE="Important notes for Debian %s:"
            NOTES_1="1. You may need to install apt-transport-http:"
            NOTES_2="   apt-get install apt-transport-http"
            NOTES_3="2. For HTTPS support you may need:"
            NOTES_4="   apt-get install openssl libssl0.9.8"
            NOTES_5="3. If you get GPG errors:"
            NOTES_6="   apt-get install debian-archive-keyring"
            NOTES_7="   apt-key add /usr/share/keyrings/debian-archive-keyring.gpg"
        fi
    fi
}

# Функция для определения кодового имени Debian
get_debian_codename() {
    # 1. Пробуем /etc/os-release (современные системы)
    if [ -f "/etc/os-release" ]; then
        codename=$(grep -oP 'VERSION_CODENAME=\K\w+' /etc/os-release 2>/dev/null)
        if [ -n "$codename" ]; then
            echo "$codename"
            return 0
        fi
    fi

    # 2. Пробуем lsb_release
    if command -v lsb_release >/dev/null 2>&1; then
        codename=$(lsb_release -c -s 2>/dev/null)
        if [ -n "$codename" ]; then
            echo "$codename"
            return 0
        fi
    fi

    # 3. Пробуем /etc/debian_version (для старых версий)
    if [ -f "/etc/debian_version" ]; then
        deb_version=$(cat /etc/debian_version)
        case $deb_version in
            "13"*) echo "trixie" ;;
            "12"*) echo "bookworm" ;;
            "11"*) echo "bullseye" ;;
            "10"*) echo "buster" ;;
            "9"*)  echo "stretch" ;;
            "8"*)  echo "jessie" ;;
            "7"*)  echo "wheezy" ;;
            "6"*)  echo "squeeze" ;;
            "5"*)  echo "lenny" ;;
            "4"*)  echo "etch" ;;
            "3.1"*) echo "sarge" ;;
            "3.0"*) echo "woody" ;;
            "2.2"*) echo "potato" ;;
            "2.1"*) echo "slink" ;;
            "2.0"*) echo "hamm" ;;
            *)      echo "unknown" ;;
        esac
        return 0
    fi

    echo "unknown"
    return 1
}

# Функция для добавления архивных репозиториев
add_archive_repos() {
    local codename="$1"
    local sources_list="/etc/apt/sources.list"

    # Проверяем root-права
    if [ "$(id -u)" -ne 0 ]; then
        echo -e "${RED}${MSG_ERROR_ROOT}${NC}" >&2
        return 1
    fi

    # Резервное копирование
    echo -e "${BLUE}$(printf "${MSG_BACKUP}" "$sources_list")${NC}"
    cp "$sources_list" "${sources_list}.bak" || {
        echo -e "${RED}${MSG_ERROR_BACKUP}${NC}" >&2
        return 1
    }

    # Добавляем репозитории в зависимости от версии 
    case "$codename" in
        trixie|bookworm|bullseye|buster|stretch|jessie|wheezy|squeeze|lenny|etch)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "$codename")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий
deb http://archive.debian.org/debian/ $codename main contrib non-free

# Репозиторий безопасности
deb http://archive.debian.org/debian-security/ $codename/updates main contrib non-free
EOF
            ;;

        sarge)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "sarge (Debian 3.1)")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий для sarge
deb http://archive.debian.org/debian-archive/debian sarge main contrib non-free

# Репозиторий безопасности для sarge
deb http://archive.debian.org/debian-security sarge/updates main contrib non-free
EOF
            ;;

        woody)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "woody (Debian 3.0)")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий для woody
deb http://archive.debian.org/debian-archive/debian woody main contrib non-free

# Старые пакеты для woody
deb http://archive.debian.org/debian-archive/debian-030119 woody main contrib non-free

# Репозиторий безопасности для woody
deb http://archive.debian.org/debian-security woody/updates main contrib non-free
EOF
            ;;

        potato)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "potato (Debian 2.2)")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий для potato
deb http://archive.debian.org/debian-archive/debian potato main contrib non-free

# Репозиторий безопасности для potato
deb http://archive.debian.org/debian-security potato/updates main contrib non-free
EOF
            ;;

        slink)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "slink (Debian 2.1)")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий для slink
deb http://archive.debian.org/debian-archive/debian slink main contrib non-free
EOF
            ;;

        hamm)
            echo -e "${GREEN}$(printf "${MSG_ADD_REPO}" "hamm (Debian 2.0)")${NC}"
            cat > "$sources_list" <<EOF
# Основной архивный репозиторий для hamm
deb http://archive.debian.org/debian-archive/debian hamm main contrib non-free
EOF
            ;;

        *)
            echo -e "${RED}$(printf "${MSG_ERROR_VERSION}" "$codename")${NC}" >&2
            return 1
            ;;
    esac

    # Запрос на добавление security-репозитория (только для версий, где это возможно)
    if [[ "$codename" != "slink" && "$codename" != "hamm" ]]; then
        echo -e "${BLUE}${MSG_SECURITY_ASK}${NC}"
        read -r answer
        if [[ $answer = [Yy]* ]]; then
            case "$codename" in
                trixie|bookworm|bullseye|buster|stretch|jessie|wheezy|squeeze|lenny|etch)
                    echo "deb http://archive.debian.org/debian-security/ $codename/updates main contrib non-free" >> "$sources_list"
                    ;;
                sarge|woody|potato)
                    echo "deb http://archive.debian.org/debian-security $codename/updates main contrib non-free" >> "$sources_list"
                    ;;
            esac
        fi
    fi

    # Запрос на добавление backports-репозитория (только для версий, где это возможно)
    if [[ "$codename" != "slink" && "$codename" != "hamm" ]]; then
        echo -e "${BLUE}${MSG_BACKPORTS_ASK}${NC}"
        read -r answer
        if [[ $answer = [Yy]* ]]; then
            case "$codename" in
                trixie|bookworm|bullseye|buster|stretch|jessie|wheezy)
                    echo -e "${GREEN}$(printf "${MSG_BACKPORTS_ADD}" "$codename")${NC}"
                    echo "deb http://archive.debian.org/debian/ ${codename}-backports main contrib non-free" >> "$sources_list"
                    ;;
                squeeze|lenny|etch|sarge)
                    echo -e "${GREEN}$(printf "${MSG_BACKPORTS_ADD}" "$codename")${NC}"
                    echo "deb http://archive.debian.org/debian-backports/ ${codename}-backports main contrib non-free" >> "$sources_list"   
                    ;;               
                woody|potato)
                    echo -e "${GREEN}$(printf "${MSG_BACKPORTS_ADD}" "$codename")${NC}"
                    echo "deb http://archive.debian.org/debian-backports/ ${codename}-backports main" >> "$sources_list"
                    ;;
            esac
        fi
    fi

    # Запрос на добавление non-US репозитория (для версий до sarge) 
    if [[ "$codename" == "woody" || "$codename" == "potato" || "$codename" == "slink" || "$codename" == "hamm" ]]; then
        echo -e "${BLUE}${MSG_NONUS_ASK}${NC}"
        read -r answer
        if [[ $answer = [Yy]* ]]; then
            case "$codename" in
                woody)
                    echo "deb http://archive.debian.org/debian-non-US/ woody/non-US main contrib non-free" >> "$sources_list"
                    ;;
                potato)
                    echo "deb http://archive.debian.org/debian-non-US/ potato/non-US main contrib non-free" >> "$sources_list"
                    ;;
                slink)
                    echo "deb http://archive.debian.org/debian-non-US/ slink/non-US main contrib non-free" >> "$sources_list"
                    ;;
                hamm)
                    echo "deb http://archive.debian.org/debian-non-US/ hamm/non-US main contrib non-free" >> "$sources_list"
                    ;;
            esac
        fi
    fi
    
    # Для очень старых версий отключаем проверки
    if [[ "$codename" == "woody" || "$codename" == "sarge" || "$codename" == "potato" || "$codename" == "slink" || "$codename" == "hamm" ]]; then
        echo -e "${BLUE}${MSG_OLD_CONFIG}${NC}"
        cat > /etc/apt/apt.conf.d/10-archive-settings <<EOF
Acquire::Check-Valid-Until "false";
Acquire::AllowInsecureRepositories "true";
Acquire::AllowDowngradeToInsecureRepositories "true";
EOF
        
        echo -e "${BLUE}${MSG_OLD_COMPAT}${NC}"
        echo 'APT::Cache-Limit "12500000";' >> /etc/apt/apt.conf.d/10-archive-settings
        echo 'Acquire::Languages "none";' >> /etc/apt/apt.conf.d/10-archive-settings
    fi

    # Обновляем APT
    echo -e "${BLUE}${MSG_UPDATE}${NC}"
    apt-get update -o Acquire::Check-Valid-Until=false
}

# Инициализируем языковые переменные
init_language

# Основной скрипт
echo -e "\n${BLUE}${MSG_TITLE}${NC}"

# Определение версии
codename=$(get_debian_codename) || {
    echo -e "${RED}${MSG_ERROR_DETECT}${NC}" >&2
    exit 1
}

echo -e "\n${MSG_VERSION} ${GREEN}${codename}${NC}"

# Проверка поддержки
supported_versions=("trixie" "bookworm" "bullseye" "buster" "stretch" "jessie" "wheezy" 
                    "squeeze" "lenny" "etch" "sarge" "woody" "potato" "slink" "hamm")
if ! printf '%s\n' "${supported_versions[@]}" | grep -q "^$codename$"; then
    echo -e "${RED}$(printf "${MSG_UNSUPPORTED}" "$codename")${NC}"
    exit 2
fi

# Информация о версии
if [[ "$codename" == "woody" || "$codename" == "sarge" || "$codename" == "potato" || "$codename" == "slink" || "$codename" == "hamm" ]]; then
    echo -e "${BLUE}$(printf "${MSG_OLD_WARNING}" "$codename")${NC}"
    echo -e "${BLUE}${MSG_OLD_WARNING2}${NC}"
fi

# Запрос на подтверждение
echo -e "\n$(printf "${MSG_CONFIRM}" "${GREEN}${codename}${NC}")"
echo -e "${BLUE}${MSG_WARNING}${NC}"
read -p "${MSG_PROMPT}" answer

if [[ $answer = [Yy]* ]]; then
    add_archive_repos "$codename"
    echo -e "${GREEN}\n${MSG_SUCCESS}${NC}"
    
    # Дополнительные инструкции для старых версий
    if [[ "$codename" == "woody" || "$codename" == "sarge" || "$codename" == "potato" || "$codename" == "slink" || "$codename" == "hamm" ]]; then
        echo -e "\n${BLUE}$(printf "${NOTES_TITLE}" "$codename")${NC}"
        echo -e "${BLUE}${NOTES_1}\n${NOTES_2}\n${NOTES_3}\n${NOTES_4}\n${NOTES_5}\n${NOTES_6}\n${NOTES_7}${NC}"
        
        # Автоматическая установка необходимых пакетов
        echo -e "\n${BLUE}Installing required packages...${NC}"
        apt-get install -y apt-transport-http openssl libssl0.9.8 debian-archive-keyring
    fi
else
    echo -e "${BLUE}${MSG_CANCEL}${NC}"
fi

Если кратко - задача этого пакетного файла обеспечить работу пакетного менеджера. Пакетный файл был проверен на Debian 3.0 и более новых версий ( Debian7). 

По итогам: 

  1. Будет активирован необходимый архив пакетов
  2. Установлена русская локализация UTF-8 для версий 4.0 и выше (по запросу).

 

Кросс-компиляция внешних компонент под Debian 4 и новее.

После настройки установки пакетов Debian, необходимо настроить gcc таким образом, чтобы можно было собирать либо на AMD64 или на IA-32 компоненты под обе архитектуры (под остальные поддерживаемые 1С ничего сказать не смогу, под них не разрабатывал).  

Для упрощения данной задачи воспользуется другим пакетным файлом со следующим содержимым (дополнен старыми процессорами для расширенной поддержки внешних компонент):

#!/bin/bash
# Установка базовых инструментов для компиляции
apt-get update
apt-get -y install build-essential
apt-get -y install uuid-runtime
apt-get -y install uuid-dev
apt-get -y install gcc-multilib
apt-get -y install g++-multilib

# Для 64-битной компиляции (на 32-битных системах)
apt-get -y install libc6-dev-amd64
apt-get -y install linux-libc-dev-amd64
apt-get -y install libc6-dev-x32
apt-get -y install lib64gcc1
apt-get -y install lib64stdc++6
apt-get -y install lib64stdc++6-dev
apt-get -y install lib64z1-dev
apt-get -y install lib64ncurses5-dev

# Для 32-битной компиляции (на 64-битных системах) - основные пакеты
apt-get -y install libc6-dev-i386
apt-get -y install lib32gcc1
apt-get -y install lib32stdc++6
apt-get -y install lib32stdc++6-dev
apt-get -y install lib32z1-dev
apt-get -y install lib32ncurses5-dev

# Дополнительные пакеты для поддержки i386 через дефис (где доступно)
apt-get -y install libc6-i386
apt-get -y install libstdc++6-4.8-dev-i386  # Для Debian 7/8
apt-get -y install libstdc++-4.8-dev-i386-cross  # Альтернатива
apt-get -y install zlib1g-dev-i386  # Для некоторых версий
apt-get -y install libncurses5-dev-i386  # Для некоторых версий

# Для работы с мультиархитектурностью в старых версиях
dpkg --add-architecture i386
apt-get update

# Установка 32-битных версий критически важных библиотек
apt-get -y install zlib1g:i386
apt-get -y install libncurses5:i386
apt-get -y install libstdc++6:i386
apt-get -y install libgcc1:i386
apt-get -y install libc6:i386

# Резервная установка через двоеточие (если пакеты с дефисом не найдены)
apt-get -y install libstdc++-dev:i386 || true
apt-get -y install zlib1g-dev:i386 || true
apt-get -y install libncurses5-dev:i386 || true

# ДОПОЛНЕНИЕ: Полный набор пакетов для поддержки i386, i486 и i586 на всех версиях Debian
# Пакеты для старых версий Debian (3.x-5.x)
apt-get -y install libc6-dev-386 || true
apt-get -y install libstdc++5-3.3-dev || true
apt-get -y install libstdc++5-3.3-dev-i386 || true
apt-get -y install lib32gcc-3.3-dev || true
apt-get -y install lib32stdc++6-4.1-dev || true
apt-get -y install libx32gcc1 || true

# Пакеты для средних версий Debian (6.x-8.x)
apt-get -y install libc6-dev-x86 || true
apt-get -y install libstdc++6-4.4-dev-i386 || true
apt-get -y install libstdc++6-4.6-dev-i386 || true
apt-get -y install libstdc++6-4.7-dev-i386 || true
apt-get -y install lib32gcc-4.4-dev || true
apt-get -y install lib32gcc-4.6-dev || true
apt-get -y install lib32gcc-4.7-dev || true

# Пакеты для новых версий Debian (9.x-13.x)
apt-get -y install libc6-dev-x32 || true
apt-get -y install libx32stdc++6 || true
apt-get -y install libx32stdc++6-dev || true
apt-get -y install libx32gcc1-dev || true
apt-get -y install libx32z1-dev || true

# Специальные пакеты для поддержки i486 и i586
apt-get -y install libc6-i486 || true
apt-get -y install libc6-dev-i486 || true
apt-get -y install libc6-i586 || true
apt-get -y install libc6-dev-i586 || true
apt-get -y install libstdc++6-i486 || true
apt-get -y install libstdc++6-i586 || true
apt-get -y install libgcc1-i486 || true
apt-get -y install libgcc1-i586 || true

# Дополнительные библиотеки для совместимости
apt-get -y install lib32mudflap0 || true
apt-get -y install lib32gomp1 || true
apt-get -y install lib32objc4 || true
apt-get -y install lib32quadmath0 || true
apt-get -y install lib32asan0 || true
apt-get -y install lib32atomic1 || true
apt-get -y install lib32cilkrts5 || true
apt-get -y install lib32ubsan0 || true

# Специальные пакеты для очень старых версий Debian (2.x-4.x)
apt-get -y install libc6-dev-3.3 || true
apt-get -y install libc6-dev-3.3-i386 || true
apt-get -y install libstdc++2.10-dev || true
apt-get -y install libstdc++2.10-dev-i386 || true
apt-get -y install libc6-dev-486 || true  # Для i486
apt-get -y install libc6-dev-586 || true  # Для i586

# Файлы заголовков для ядра Linux (разные версии)
apt-get -y install linux-kernel-headers || true
apt-get -y install linux-headers-2.4 || true
apt-get -y install linux-headers-2.6 || true
apt-get -y install linux-headers-3.0 || true
apt-get -y install linux-headers-4.0 || true
apt-get -y install linux-headers-5.0 || true

# Дополнительные инструменты для сборки
apt-get -y install binutils-i386-linux-gnu || true
apt-get -y install binutils-i486-linux-gnu || true  # Для i486
apt-get -y install binutils-i586-linux-gnu || true  # Для i586
apt-get -y install libtool || true
apt-get -y install autoconf || true
apt-get -y install automake || true

Смысл его в следующем: он устанавливает gcc и к нему необходимые библиотеки multilib, uuid. Если первой нет, то тогда устанавливаются пакеты, которые обеспечивают необходимую поддержку для старых версий GCC. 

Теперь наконец-то можно и сделать файл компиляции под AMD64 пакета VNCOMP82. Для этого необходимо сделать 2 вещи: 

  1. Скопировать Makefile в Make64 (исходный для IA-32 понадобится).
  2. В нем сделать 2 вещи: заменить название в переменной TARGET и заменить ключ -m32 на -m64.

После этого тестовый пример можно легко собрать компилятором следующей цепочкой:

make
-rm *.o *.d
make -f Make64
-rm *.o *.d

make 

make -f Make64

На этом настройку можно считать завершенным. Наш дистрибутив debian теперь готов к разработке внешних компонент для Linux сервера. Для Windows достаточно просто установить Visual Studio 2008 express.

Debian 3.1 (дополнение под debian 3.1 sarge от 21.08.2025)

Если все-же есть необходимость собрать улучшенную с точки зрения поддержки компоненту, то здесь необходимо учесть следующие рекомендации для этого дистрибутива:

  1. Выбираем графический рабочий стол kde версии 3.x - его можно установить отдельным скриптом после включения архивных пакетов.
  2. После того, как были установлены базовые расширения по gcc, необходимо gcc обновить до версии 3.4.6, иначе придется исходники предварительно конвертировать в utf-8, что для тестового стенда категорически не удобно (скрипт для этой операции приложен к публикации).
  3. Установка локализации cp1251 для gcc сводится отдельным пакетным файлом. Для полной поддержки пункта 2 (тоже во вложениях к публикации).

После этого можно успешно собирать внешние компоненты аналогично debian 4-x DVD, однако с преимуществами - чуть меньший размер программы и возможность корректной сборки под intel 386 (первый процессор, который корректно поддерживал защищенный режим с точки зрения ОС).

Скрипты для этого приложены также в файлах.

 

Пакетные файлы в виде файлов sh приложены к статье.

Вступайте в нашу телеграмм-группу Инфостарт

VNCOMP82 Debian Внешние компоненты.

См. также

Linux Системный администратор Бесплатно (free)

Особенности настройки Astra Linux для получения зависимостей пакетов на примере установки платформы 8.3.27.1688.

18.08.2025    759    Bessome    0    

3

Linux Системный администратор Программист Бесплатно (free)

Расскажем, какие инструменты помогают анализировать и адаптировать код под Linux, приведем реальные примеры рефакторинга и разберем этапы тестирования перед переходом. А также представим чек-лист для проверки готовности конфигурации к работе на серверной платформе 1С под Linux.

28.07.2025    1068    aidar_safin    3    

8

Администрирование веб-серверов Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

Проблема: При переходе с Windows на Linux многие сталкиваются с затруднениями при настройке аутентификации ОС в веб-клиенте 1С через Apache 2.4 (Debian). Решение: Команда Magnit Tech (Центр экспертизы 1С и Сопровождение 1C) разработала готовую инструкцию по настройке веб-клиента 1С на Debian 12 с поддержкой как Windows, так и Linux-серверов. Экономьте время — внедряйте проверенное!

25.07.2025    1763    biryukmikh    8    

24

Linux Системный администратор Бесплатно (free)

Благодаря Ansible процесс развертывания и тонкой настройки сервера 1С на Linux можно полностью автоматизировать. В статье расскажем, как с помощью Ansible-плейбуков быстро и без ошибок подготовить инфраструктуру для работы 1С:Предприятие. Разберемся, как подготовить WSL для локального тестирования Ansible-сценариев перед их запуском на реальных серверах. Рассмотрим автоматизированное создание виртуальных машин с помощью Ansible, которое значительно ускоряет развертывание инфраструктуры. На практическом примере покажем, как дорабатывать роли в плейбуках для адаптации под конкретные задачи. Уделим внимание оптимизации Linux-сервера для 1С: настройке ОС, установке необходимых зависимостей и параметров для стабильной работы. Разберем процесс установки платформы 1С, настройки службы и логирования, а также интеграцию систем мониторинга (Zabbix и других) для контроля состояния сервера в реальном времени.

23.07.2025    1334    aidar_safin    0    

10

Администрирование СУБД Linux Сервера Системный администратор Программист Бесплатно (free)

В современных Windows 10 и 11 можно использовать WSL (Windows Subsystem for Linux) для запуска Linux окружения. Возникает соблазнительная мысль: может, PostgreSQL и сервер 1С запустить в WSL. Или даже хуже: в Docker на WSL. Знал бы, что будет сложно - даже не начинал :) Сложность кроется в том, что WSL это не полноценные виртуалки, а легковестные контейнеры Hyper-V с особенностями сети и GUI. Из плюсов, наверно, только размер и скорость запуска.

21.07.2025    1565    FSerg    2    

7

Администрирование СУБД Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

Преимущества использования PostgreSQL как объектно-реляционной СУБД и Linux в качестве операционной системы сервера

02.06.2025    4234    PROSTO-1C    12    

2

Обновление 1С Linux Системный администратор Программист Бесплатно (free)

Пошаговая инструкция для обновления платформы 1С на сервере Linux Debian.

28.03.2025    2857    California_Dreaming    3    

5

Linux Системный администратор Программист 1С v8.3 Бесплатно (free)

В очередной раз решая проблему с доступом к файлу программной лицензии - решил сделать памятку на будущее для себя и коллег.

10.03.2025    2859    unichkin    12    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bayselonarrend 2870 11.08.25 10:45 Сейчас в теме
Почему просто не поднять нормальный современный дистрибутив и ничем этим не заниматься? Debian 3 вышел 20 лет назад, семерка - лет 10-15. Это старое дырявое решето, с которым на каждом шагу будут проблемы - особенно если вы захотите использовать динамическую линковку к системным библиотекам. Не говоря уже о том, что в 25м году существует wsl, docker, zig compile и пр. крутые штуки, чтобы без боли собирать свой код сразу под несколько платформ
2. user1206119 117 11.08.25 10:55 Сейчас в теме
(1) Здесь идет речь только об том, как собрать инструменты для компонент на примере шаблона VNCOMP82. В целом эти скрипты я собирал изначально под Debian 12, под Debian 3 просто чуть-чуть адаптировал. Второе - если правильно собрана программа и не использует все мусорное (то, что не является стандартном разработки в Linux и C), то проблем с использованием собранной компоненты не возникнет.
Я компоненты собирал под Debian 4 - прекрасно отработали под Debian 12. Выбор тестового стенда Debian уместно проводить исходя из потребностей.
НО,ЕСТЬ ОДНО НО: чем новее компилятор тем больше мусора летит в программу. Если совсем стерильно то что заказывали - будьте добры использовать ASM. Меньшее из зол в таком случае, старый компилятор.
По поводу крутых штук не спорю, но они под новые компиляторы, а их качество, к сожалению, падает с каждой версией (неоднократно замерял размеров файлов). Компоненты нужны на мой взгляд (не претендую на абсолютную истину) тогда, когда нельзя решить другим путем проблемы использования нужного функционала.
В ином случае гораздо проще сделать исполняемый файл (с точки зрения программ один фиг тоже самое) и его запускать с передачей параметров - меньше вопросов потом поддерживать.
3. bayselonarrend 2870 11.08.25 11:02 Сейчас в теме
(2)
правильно собрана программа и не использует все мусорное


Вы можете собрать что-то полностью самописное на старом дистрибутиве и новый glibc на целой машине (новее) это съест. Но если вам понадобится какой-то внешний пакет или сторонняя библиотека, какой-нибудь OpenSSL для безопасного соединения с чем либо, то вы просто не заведете это на старом дистрибутиве
4. user1206119 117 11.08.25 11:14 Сейчас в теме
(3) С этим и не спорю. Я и не призывал отказываться от нового - ни в коем случае. Про другое писал. Под мусором имел ввиду библиотеки, которые не выполняют никакой полезной нагрузки - а только жрут ресурсы при их использовании.
Ради юмора можете посмотреть таблицу импорта собранных модулей под Windows. В зависимости от разных версий Visual C++ - разный результат. И если потом искать использование функций по имени в IDA или в любом другом дизассемблере - то часть функций вообще там не используются, а добавлены для кучи - вот я это не люблю.
Поэтому если есть возможность, то конечно лучше выбирать версию по старше - таких функций будет по меньше.
В вашем случае для OpenSSL поскольку это критически важно с точки зрения информационной безопасности - то тогда берется по новее.
Это разные задачи.
5. bayselonarrend 2870 11.08.25 11:27 Сейчас в теме
(4) Я в целом к тому, что не могу представить себе реальной задачи, в которой не нужен был бы ни один дополнительный актуальный пакет, зависимый от системных библиотек, того же GLIBC - не обязательно самого нового, но точно не такого старого. Зато могу представить себе кого-нибудь, кто поставит себе Debian 4 на VM вместо 12 в докере и будет рыдать просто потом, когда его инструментарий будет ограничен std. Ради того, чтобы компонента была на пару КБ/МБ меньше и работала на микросекунды быстрее.

Ну и отказываться от новых инструментов, которые позволяют стабильно и легко собирать все без лишних часов настройки и человеческого фактора ради такой экономии - в enterprise разработке под 1С (!) - мне кажется очень странным
7. user1206119 117 11.08.25 11:33 Сейчас в теме
(5) Ну так не забывайте про принципы языка C++ - старые стандарты прекрасно собираются новыми версиями, поэтому какие проблемы? Архивные компоненты можно подключить всегда, у Debian с этим не проблема.
9. bayselonarrend 2870 11.08.25 11:37 Сейчас в теме
(7) Ну в этом и проблема: зачем мне писать на старых дистрибутивах и по старым стандартам, чтобы потом все равно переносить это на новые, когда наткнусь на зависимости? Еще и из архивов дебиана тащить всякое старье, вместо того чтобы сразу на актуале писать где доступно все и в последних актуальных версиях
10. user1206119 117 11.08.25 11:38 Сейчас в теме
(9) Я и ответил в комментарии выше.
6. bayselonarrend 2870 11.08.25 11:30 Сейчас в теме
(4)
В вашем случае для OpenSSL поскольку это критически важно с точки зрения информационной безопасности - то тогда берется по новее.


И потребность в таких вещах может обнаружиться не в начале проекта или просто в разных компонентах. Тогда по такой логике нужно держать несколько машин с версиями Debian от 3 до 12, чтобы при разработке новой компоненты или необходимости новых зависимостей в старых, перепрыгивать на них?
8. user1206119 117 11.08.25 11:37 Сейчас в теме
(6) Ну не обязательно прям резко перепрыгивать. Для начала как в такой ситуации быть:
1) Разработка в первую очередь всегда ведется на новых версиях и компиляторах. Так как если писать
изначально под старые версии, можно много что и упустить нужного.
2) Когда версия полноценно разработана, т.е. уже проверили и отладили - больше ничего не планируете
добавлять
.
Вот только тогда можно спокойно понижать версию компилятора. И опять, это уже опционально - при необходимости или по желанию.
Я компоненту разрабатывал так:
- Debian 12 изначальная версия.
- Потом Debian 7.
- В самом конце проверил Debian 4.
Я полагаю этого достаточно для поддержки компонент под Linux. Кстати как и все остальное под 1С.
bayselonarrend; +1 Ответить
11. bayselonarrend 2870 11.08.25 11:41 Сейчас в теме
(8) Ну если так, то да. Имхо, избыточно, но, конечно, имеет право на жизнь
12. user1206119 117 11.08.25 12:03 Сейчас в теме
(11) Это кстати не всегда избыточно, но получаются сразу 2 приятные плюшки:
1) Убираем ненужные в установке пакеты. Зачем их использовать в программе, если ничего не выполняют
ценного для пользователя?
2) Улучшаем совместимость с дистрибутивами Linux. Это необязательно, но как бонус почему бы и нет.
Из 2-х плюшек, самая приятная это безусловно 1. Но, как вы правильно упомянули выше, зачастую это избыточно, тут соглашусь с вами.
bayselonarrend; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация