В ходе решения проблемы с OpenVZ заметили много неприятных моментов.
Скрипт установки [URL=http://repos.1c-bitrix.ru/yum/bitrix-env.sh]http://repos.1c-bitrix.ru/yum/bitrix-env.sh[/URL].
1) Определение ОС и версии ОС.[CODE]RELEASE_FILE=/etc/redhat-release
OS=$(awk '{print $1}' $RELEASE_FILE)
[/CODE]Вот еще момент, относящийся к данной проблеме:[CODE]IS_CENTOS7=$(grep -c 'CentOS Linux release' $RELEASE_FILE)
IS_CENTOS73=$(grep -c "CentOS Linux release 7.3" $RELEASE_FILE)
[/CODE]Это же относится и к следующей секции, которая выглядит, как черная магия:[CODE]if [[ $IS_CENTOS7 -gt 0 ]]; then
VER=$(awk '{print $4}' $RELEASE_FILE | awk -F'.' '{print $1}')
else
VER=$(awk '{print $3}' $RELEASE_FILE | awk -F'.' '{print $1}')
fi
[/CODE]
Всё это можно решить гораздо красивее и проще:
[CODE]# bash test.sh
centos
7
# cat test.sh
source /etc/os-release
echo $ID
echo $VERSION_ID
#
[/CODE]Что касается IS_CENTOS73, здесь вообще ничего не понятно, поскольку единственное место, где используется данная переменная [B]никогда[/B] не сработает, если у Вас Centos 7:[CODE]configure_nodejs(){
if [[ $IS_CENTOS7 -eq 0 ]]; then
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - >>$LOGS_FILE 2>&1
else
if [[ $IS_CENTOS73 -gt 0 ]]; then
rpm -ivh \
https://kojipkgs.fedoraproject.org//packages/http-parser/2.7.1/3.el7/x86_64/http-parser-2.7.1-3.el7.x86_64.rpm \
>>$LOGS_FILE 2>&1
fi
fi
[/CODE]По сути тут условие [B]else[/B] можно удалить и заменить чем-нибудь полезным.
2) Отсутствие ethtool в зависимостях или хотя бы наличие установки данного пакета в скрипте установки окружения, если же без него menu.sh не может корректно работать.
В случае отсутствия ethtool по-умолчанию на сервере получаем следующую ошибку:[CODE]/opt/webdir/bin/bitrix_utils.sh: line 644: ethtool: command not found
[/CODE]
Теперь по [B]/opt/webdir/bin/bitrix_utils.sh[/B]
1) Определение ОС и её версии.
Первый пункт аналогичен первому пункту скрипта установки, разве, что код определения версии отличается:[CODE] OS_TYPE=$(cat /etc/redhat-release | grep CentOS -c)
OS_VERSION=$(cat /etc/redhat-release | \
sed -e "s/CentOS Linux release//;s/CentOS release // " | \
cut -d'.' -f1)
[/CODE]
2) Функция [B]configure_iptables[/B]:[CODE]configure_iptables(){
[[ -z $OS_VERSION ]] && get_os_type
if [[ $OS_VERSION -eq 7 ]]; then
if [[ $() -eq 0 ]]; then
# http://jabber.bx/view.php?id=89409
rpm -qi firewalld >/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU0061"
yum -y install firewalld >/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU2032"
return 2
fi
fi
systemctl enable firewalld
systemctl start firewalld
if [[ $? -gt 0 ]]; then
log_to_file "$BU2033"
return 2
fi
fi
public_firewalld
public_firewalld_rtn=$?
else
# openvz
iptables -L INPUT -n 1>/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU2034"
return 2
fi
if [[ $IS_OPENVZ -gt 0 ]]; then
iptables -I INPUT -m tcp -p tcp --dport 80 -j ACCEPT 1>/dev/null 2>&1 && \
iptables -I INPUT -m tcp -p tcp --dport 443 -j ACCEPT 1>/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU2035"
return 2
fi
else
iptables -I INPUT -m tcp -p tcp \
-m state --state NEW --dport 80 -j ACCEPT 1>/dev/null 2>&1 && \
iptables -I INPUT -m tcp -p tcp \
-m state --state NEW --dport 443 -j ACCEPT 1>/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU2035"
return 2
fi
fi
log_to_file "$BU0062"
iptables-save > /etc/sysconfig/iptables
return 0
fi
}
[/CODE]
Здесь получается в целом неразбериха. Секция, которая срабатывает после условия else предназначается для openvz или она не должна в openvz сработать? Проблема в том, что секция else никогда не сработает для ОС Centos 7.
Если Вам требуется помощь в администрировании, то мы будем рады Вам помочь.
Скрипт установки [URL=http://repos.1c-bitrix.ru/yum/bitrix-env.sh]http://repos.1c-bitrix.ru/yum/bitrix-env.sh[/URL].
1) Определение ОС и версии ОС.[CODE]RELEASE_FILE=/etc/redhat-release
OS=$(awk '{print $1}' $RELEASE_FILE)
[/CODE]Вот еще момент, относящийся к данной проблеме:[CODE]IS_CENTOS7=$(grep -c 'CentOS Linux release' $RELEASE_FILE)
IS_CENTOS73=$(grep -c "CentOS Linux release 7.3" $RELEASE_FILE)
[/CODE]Это же относится и к следующей секции, которая выглядит, как черная магия:[CODE]if [[ $IS_CENTOS7 -gt 0 ]]; then
VER=$(awk '{print $4}' $RELEASE_FILE | awk -F'.' '{print $1}')
else
VER=$(awk '{print $3}' $RELEASE_FILE | awk -F'.' '{print $1}')
fi
[/CODE]
Всё это можно решить гораздо красивее и проще:
[CODE]# bash test.sh
centos
7
# cat test.sh
source /etc/os-release
echo $ID
echo $VERSION_ID
#
[/CODE]Что касается IS_CENTOS73, здесь вообще ничего не понятно, поскольку единственное место, где используется данная переменная [B]никогда[/B] не сработает, если у Вас Centos 7:[CODE]configure_nodejs(){
if [[ $IS_CENTOS7 -eq 0 ]]; then
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - >>$LOGS_FILE 2>&1
else
if [[ $IS_CENTOS73 -gt 0 ]]; then
rpm -ivh \
https://kojipkgs.fedoraproject.org//packages/http-parser/2.7.1/3.el7/x86_64/http-parser-2.7.1-3.el7.x86_64.rpm \
>>$LOGS_FILE 2>&1
fi
fi
[/CODE]По сути тут условие [B]else[/B] можно удалить и заменить чем-нибудь полезным.
2) Отсутствие ethtool в зависимостях или хотя бы наличие установки данного пакета в скрипте установки окружения, если же без него menu.sh не может корректно работать.
В случае отсутствия ethtool по-умолчанию на сервере получаем следующую ошибку:[CODE]/opt/webdir/bin/bitrix_utils.sh: line 644: ethtool: command not found
[/CODE]
Теперь по [B]/opt/webdir/bin/bitrix_utils.sh[/B]
1) Определение ОС и её версии.
Первый пункт аналогичен первому пункту скрипта установки, разве, что код определения версии отличается:[CODE] OS_TYPE=$(cat /etc/redhat-release | grep CentOS -c)
OS_VERSION=$(cat /etc/redhat-release | \
sed -e "s/CentOS Linux release//;s/CentOS release // " | \
cut -d'.' -f1)
[/CODE]
2) Функция [B]configure_iptables[/B]:[CODE]configure_iptables(){
[[ -z $OS_VERSION ]] && get_os_type
if [[ $OS_VERSION -eq 7 ]]; then
if [[ $() -eq 0 ]]; then
# http://jabber.bx/view.php?id=89409
rpm -qi firewalld >/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU0061"
yum -y install firewalld >/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU2032"
return 2
fi
fi
systemctl enable firewalld
systemctl start firewalld
if [[ $? -gt 0 ]]; then
log_to_file "$BU2033"
return 2
fi
fi
public_firewalld
public_firewalld_rtn=$?
else
# openvz
iptables -L INPUT -n 1>/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU2034"
return 2
fi
if [[ $IS_OPENVZ -gt 0 ]]; then
iptables -I INPUT -m tcp -p tcp --dport 80 -j ACCEPT 1>/dev/null 2>&1 && \
iptables -I INPUT -m tcp -p tcp --dport 443 -j ACCEPT 1>/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU2035"
return 2
fi
else
iptables -I INPUT -m tcp -p tcp \
-m state --state NEW --dport 80 -j ACCEPT 1>/dev/null 2>&1 && \
iptables -I INPUT -m tcp -p tcp \
-m state --state NEW --dport 443 -j ACCEPT 1>/dev/null 2>&1
if [[ $? -gt 0 ]]; then
log_to_file "$BU2035"
return 2
fi
fi
log_to_file "$BU0062"
iptables-save > /etc/sysconfig/iptables
return 0
fi
}
[/CODE]
Здесь получается в целом неразбериха. Секция, которая срабатывает после условия else предназначается для openvz или она не должна в openvz сработать? Проблема в том, что секция else никогда не сработает для ОС Centos 7.
Если Вам требуется помощь в администрировании, то мы будем рады Вам помочь.