Change php version on FreeBSD
Simplify changing of php version on FreeBSD
Here is my script which helps me to change to different PHP version on FreeBSD:
#!/usr/local/bin/bash
# 1. Автоматично откриване на текущата версия
# Търсим пакет, чийто Origin е lang/phpXX
OLD_V_FULL=$(pkg query -e '%o ~ lang/php*' '%v' | head -n 1)
OLD_V_SHORT=$(pkg query -e '%o ~ lang/php*' '%n' | sed 's/php//' | head -n 1)
if [ -z "$OLD_V_SHORT" ]; then
echo "Грешка: Не беше открита инсталирана PHP версия през pkg."
exit 1
fi
# 2. Проверка за подаден аргумент за нова версия
if [ "$#" -ne 1 ]; then
echo "Текуща версия: $OLD_V_SHORT ($OLD_V_FULL)"
echo "Употреба: $0 <нова_версия>"
echo "Пример: $0 85"
exit 1
fi
NEW_V=$1
# 3. Валидация на версиите (само 82, 83, 84, 85)
PATTERN="^(82|83|84|85)$"
if [[ ! $OLD_V_SHORT =~ $PATTERN ]] || [[ ! $NEW_V =~ $PATTERN ]]; then
echo "Грешка: Версиите трябва да бъдат една от следните: 82, 83, 84, 85"
echo "Открита текуща версия: $OLD_V_SHORT"
exit 1
fi
if [ "$OLD_V_SHORT" == "$NEW_V" ]; then
echo "Текущата версия вече е $NEW_V. Няма нужда от ъпгрейд."
exit 0
fi
LIST_DEL=""
LIST_INS=""
MAIN_PHP="lang/php$NEW_V"
# 4. Генериране на списъци за замяна
for FILE in $(pkg info | grep "php$OLD_V_SHORT" | cut -f1 -d' ') ; do
PKGNAME=$(pkg info "$FILE" | grep 'Origin ' | cut -f2 -d':' | xargs) ;
NEWPKGNAME="${PKGNAME//php$OLD_V_SHORT/php$NEW_V}" ;
LIST_DEL="$LIST_DEL $FILE";
if [ "$NEWPKGNAME" != "$MAIN_PHP" ]; then
LIST_INS="$LIST_INS $NEWPKGNAME";
fi
done
echo "### ОТКРИТА ВЕРСИЯ: $OLD_V_SHORT -> ЦЕЛЕВА ВЕРСИЯ: $NEW_V ###"
echo "pkg delete -f $LIST_DEL"
echo "portmaster $MAIN_PHP && portmaster $LIST_INS"