2

Я устанавливаю репозиторий Epel с помощью скрипта оболочки, по умолчанию репо отключено, я хотел бы включить его, чтобы скрипт мог устанавливать другие пакеты.

Следующее установить репо Epel:

yum install -y epel-release

Это создаст /etc/yum.repos.d/epel.repo, который содержит:

[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 5 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/debug
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 5 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/5/SRPMS
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1

Теперь я хочу включить только первое репо '[epel]. Я пробовал с помощью sed, но пока удалось включить их все (я новичок в sed):

sh-3.2$ sed 's,enabled=0,enabled=1,g;' ./epel.repo
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 5 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/debug
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch
failovermethod=priority
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 5 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/5/SRPMS
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch
failovermethod=priority
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1

Эта версия команды ничего не изменит:

sed 's,\(\[epel\].*\)enabled=0,\1enabled=1,;' ./epel.repo

Какое регулярное выражение будет работать для меня? Или есть лучший способ сделать это?

2 ответа2

1

Не похоже, что ваш вопрос определяет какие-либо конкретные параметры для инструментов командной строки, но я считаю полезной команду yum-config-manager :

yum-config-manager --enable epel

Пример:

> cat /etc/yum.repos.d/epel.repo | grep '\[.*\]\|enabled.*'
[epel]
enabled=0
[epel-debuginfo]
enabled=0
[epel-source]
enabled=0
> yum-config-manager --enable epel
[ ... REMOVE LONG OUTPUT ... ]
> cat /etc/yum.repos.d/epel.repo | grep '\[.*\]\|enabled.*'
[epel]
enabled=1
[epel-debuginfo]
enabled=0
[epel-source]
enabled=0
> yum-config-manager --disable epel
[ ... REMOVE LONG OUTPUT ... ]
> cat /etc/yum.repos.d/epel.repo | grep '\[.*\]\|enabled.*'
[epel]
enabled=0
[epel-debuginfo]
enabled=0
[epel-source]
enabled=0
0

sed(1) не редактирует файл на месте, он отправляет изменения на его вывод. Для редактирования на месте необходимо указать флаг -i (или --in-place). Кроме того, вы должны редактировать строки, содержащие [epel].*enabled , которые вы просто не найдете. Вы хотите ограничить замену разделом, начинающимся с [epel] , который заканчивается следующим [:

sed -i -e '/\[epel\]/,/^\[/s/enabled=0/enabled=1/' ./epel.repo

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .