Сайт | Скачать | Видео | Wiki

Автор Тема: Автозагрузка модулей при старте системы  (Прочитано 46652 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:Автозагрузка модулей при старте системы
« Ответ #90 : 08 Декабрь 2012, 13:48:30 »
Высказывались и другие предложения по структуре, но вроде бы все сошлись на таком варианте (либо промолчали).
В качестве аргумента за "pfsdir в корне раздела" высказывалась мысль, что одни и те же PFS можно использовать из разных установок.
Товарищ, мне насчет pfsdir в данном случае безразлично, меня волнует что не отрабатывается дефолтный каталог
packages

Кстати в Байт я вывел в console  имена подгружаемых .pfs + "готово". Код надо доработать (2 лишних "готово") но сама идея мне понравилась
ненужно, замедлит загрузку.

Подправьте код в соответствии с выявленными проблемами и продолжим.
« Последнее редактирование: 08 Декабрь 2012, 13:50:55 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
Re:Автозагрузка модулей при старте системы
« Ответ #91 : 08 Декабрь 2012, 14:40:17 »
мне насчет pfsdir в данном случае безразлично, меня волнует что не отрабатывается дефолтный каталог
packages
"packages" - это дефолтное значение параметра pfsdir.
Соответственно, если каталог "packages" находится в корне раздела (не в каталоге с системой!) - то всё должно работать нормально.
Такой порядок придумал не я, он уже был реализован до моих правок.
Какие предложения?

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:Автозагрузка модулей при старте системы
« Ответ #92 : 08 Декабрь 2012, 15:05:00 »
здесь нужно условие, если нету zdrv то и ссылку нанадо создавать. Лишний пустой каталог в /mnt не нужно.

Код:
[ "$pfsdir" ] && PFSDIR="$pfsdir" || PFSDIR=packages
PFSDIR=packages неправильно, если верить остальному коду то оно должно быть PFSDIR=$PSUBDIR/packages (или как там правильно по синтаксису)
каталог packages не может находиться в корне раздела именно потому что он дефолтный, он копируется инсталятором из iso и помещается в каталог системы т.е. в $PSUBDIR
Если дело обстоит не так - поправьте меня, без каталога packages в настоящее время система функционировать не может, ожидать его наличие в корне системы - нелогично.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
Re:Автозагрузка модулей при старте системы
« Ответ #93 : 08 Декабрь 2012, 15:18:17 »
Варианты:

1. Поиск модулей только в одном каталоге pfsdir.
Значение параметра pfsdir по умолчанию - "/каталог_системы/packages".

2. Поиск модулей в двух каталогах, /каталог_системы/+packages и pfsdir.
Значение параметра packages по умолчанию - "packages".
Параметр pfsdir по умолчанию пустой.

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:Автозагрузка модулей при старте системы
« Ответ #94 : 08 Декабрь 2012, 15:21:05 »
Значение параметра pfsdir по умолчанию - "/каталог_системы/packages".
этого достаточно.
Ненадо разводить проблему, ты можешь понять что у меня система не грузится или нет? Хотя вас 3 человека этот код смотрело.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34033
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автозагрузка модулей при старте системы
« Ответ #95 : 08 Декабрь 2012, 16:14:33 »
PuppyRus-Icewm-12.12.iso - неправильно (с точки зрения выполненного ТЗ) расположен каталог packages
Нужно или:
1. переместить packages/*.pfs в корень cd и тогда они подгрузятся с копированием в память (не проверял)
2. создать в корне каталог типа pr218 и переместить туда базу и поправить menu.lst (проверил)

Лучше 2
pfsdir по умолчанию - "/каталог_системы/packages" - удобно для сд, но неудобно для hdd

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
Re:Автозагрузка модулей при старте системы
« Ответ #96 : 08 Декабрь 2012, 16:18:27 »
Обновление:
Код
#########################LOADING SOFT##########################
# Modify: Zay (08.12.2012).

# Create symlinks:
basepfs="`basename "$(echo ${PUPSFS} | cut -d ',' -f3)"`"
ln -s "/initrd/pup_ro2" "/mnt/.${basepfs}"
echo "${basepfs}" >/tmp/permanent_pfs_load.log
if [ "${ZDRV}" != '' ]; then
 zdrvpfs="`basename "$(echo ${ZDRV} | cut -d ',' -f3)"`"
 ln -s "/initrd/pup_z" "/mnt/.${zdrvpfs}"
 echo "${zdrvpfs}" >>/tmp/permanent_pfs_load.log
fi

# Check vars, mount:
PSUBDIR=$(dirname $(echo $PUPSFS | cut -f3 -d ','))
[ "$PSUBDIR" = "/" ] && PSUBDIR=""
[ "$pfsdir" ] && PFSDIR="$pfsdir" || PFSDIR="${PSUBDIR}/packages"
MNTPT="$(mount | grep '/initrd/mnt/dev'| cut -f3 -d' ')"
[ $PDEV1 ] || PDEV1=$(echo $PUPSFS | cut -f1 -d ',')
if [ "$MNTPT" = "" ]; then
 busybox mount /dev/${PDEV1} /initrd/mnt/dev_ro2
 MNTPT=/initrd/mnt/dev_ro2
fi
[ "$SAVE_LAYER" = "" ] && PUP_HOME=/mnt/dev_ro2
if [ "$(echo "$pfix" | grep -F "copy")" != "" ]; then
 [ "$(echo "$pfix" | grep -F "nocopy")" != "" ] && COPYMODE=off || COPYMODE=all
fi
[ $PUPMODE -ne 13 ] && aufslayer=1 || aufslayer=2

# Loading "userfs.sfs":
if [ "$(echo "$pfix" | grep -F "ram")" = "" ]; then
 userSFS="${MNTPT}${PSUBDIR}/userfs.sfs"
 if [ -f "${userSFS}" ]; then
  [ "${COPYMODE}" = "all" ] && pfsramload -u "${userSFS}" || pfsload -u "${userSFS}"
  if [ $? -eq 0 ]; then
   echo "PRECHOICE='no'" >>/etc/rc.d/PUPSTATE
   aufslayer=$(expr ${aufslayer} + 1)
  fi
 fi
fi

echo ${aufslayer} >/tmp/.topaufslayer

# Loading PFS and SFS:
if [ "$(echo "$pfix" | grep -F "nosoft")" = "" ]; then

 echo "LOADING PFS & SFS"
 echo -n "Подключение PFS и SFS..." >/dev/console

 ls -1 "${MNTPT}${PSUBDIR}/"*.[ps]fs 2>/dev/null | sort -r |
  while read FSFILE
  do
   SOFT="$(realpath "${FSFILE}")"
   baseFSFILE="$(basename "${FSFILE}")"
   baseSOFT="$(basename "${SOFT}")"
   #if [ "$(echo "${baseFSFILE}" | egrep '^[[:lower:]]')" = "" ]; then
   # [ "${COPYMODE}" = "off" ] && pfsload -l -n "${SOFT}" || pfsramload -l "${SOFT}"
   #else
   # [ "${COPYMODE}" = "off" ] && pfsload -u -n "${SOFT}" || pfsramload -u "${SOFT}"
   #fi
   if [ "$(echo "${baseFSFILE}" | grep -E '^[D|d][-|_].*')" != "" ]; then
    [ "${COPYMODE}" = "off" ] && pfsload -l -n "${SOFT}" || pfsramload -l "${SOFT}"
   else
    if [ "$(echo "${baseFSFILE}" | grep -E '^[U|u][-|_].*')" != "" ]; then
     [ "${COPYMODE}" = "off" ] && pfsload -u -n "${SOFT}" || pfsramload -u "${SOFT}"
    else
     [ "${COPYMODE}" = "off" ] && pfsload -n "${SOFT}" || pfsramload "${SOFT}"
    fi
   fi
   [ $? -eq 0 ] && echo "${baseSOFT}" >>/tmp/permanent_pfs_load.log
  done
  
 ls -1 "${MNTPT}/${PFSDIR}/"*.[ps]fs 2>/dev/null | sort -r |
  while read FSFILE
  do
   SOFT="$(realpath "${FSFILE}")"
   baseFSFILE="$(basename "${FSFILE}")"
   baseSOFT="$(basename "${SOFT}")"
   #if [ "$(echo "${baseFSFILE}" | egrep '^[[:lower:]]')" = "" ]; then
   # [ "${COPYMODE}" = "all" ] && pfsramload -l "${SOFT}" || pfsload -l -n "${SOFT}"
   #else
   # [ "${COPYMODE}" = "all" ] && pfsramload -u "${SOFT}" || pfsload -u -n "${SOFT}"
   #fi
   if [ "$(echo "${baseFSFILE}" | grep -E '^[D|d][-|_].*')" != "" ]; then
    [ "${COPYMODE}" = "all" ] && pfsramload -l "${SOFT}" || pfsload -l -n "${SOFT}"
   else
    if [ "$(echo "${baseFSFILE}" | grep -E '^[U|u][-|_].*')" != "" ]; then
     [ "${COPYMODE}" = "all" ] && pfsramload -u "${SOFT}" || pfsload -u -n "${SOFT}"
    else
     [ "${COPYMODE}" = "all" ] && pfsramload "${SOFT}" || pfsload -n "${SOFT}"
    fi
   fi
   [ $? -eq 0 ] && echo "${baseSOFT}" >>/tmp/permanent_pfs_load.log
  done
  
 status_func 0
  
fi

Значение параметра pfsdir по умолчанию - "/каталог_системы/packages". Решение временное, потом можно поменять.
С параметром pfix=copy - все модули копируются в RAM. С параметром pfix=nocopy - все модули НЕ копируются.
« Последнее редактирование: 08 Декабрь 2012, 16:22:08 от Zay »

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:Автозагрузка модулей при старте системы
« Ответ #97 : 08 Декабрь 2012, 17:33:46 »
гран мерси, думаю все будет прелестно.
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34033
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автозагрузка модулей при старте системы
« Ответ #98 : 15 Декабрь 2012, 20:14:29 »
PuppyRus-Icewm-12.12    |    13.12.2012
В обоих случаях без .[234]fs сохраненки
pfix=copy + userfs.sfs = userfs в верх не попадает
без pfix=copy = все ок
« Последнее редактирование: 15 Декабрь 2012, 23:20:30 от sfs »

Оффлайн Pro

  • Модератор
  • Ветеран
  • ****
  • Сообщений: 10737
  • Репутация: +113/-2
Re:Автозагрузка модулей при старте системы
« Ответ #99 : 10 Январь 2013, 12:36:09 »
Почему пакет 0xorg подключается выше всех, хотя ожидается что будет подключаться ниже всех остальных?
Будем ли делать правильно или просто переименовать пакет в xorg.pfs?
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
Re:Автозагрузка модулей при старте системы
« Ответ #100 : 10 Январь 2013, 15:40:39 »
Почему пакет 0xorg подключается выше всех, хотя ожидается что будет подключаться ниже всех остальных?
Ну так и должно быть, по идее.
Цитата
Все PFS по умолчанию подключаются в верхний слой, чтобы подключить в нижний - нужно добавить к названию префикс d- (или D_).
Цифры по алфавиту идут раньше букв.

переименовать пакет в xorg.pfs?
ИМХО - самый простой вариант.

Оффлайн Zay

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1536
  • Репутация: +25/-0
Re:Автозагрузка модулей при старте системы
« Ответ #101 : 15 Декабрь 2013, 23:48:01 »
Требуется дополнить код подключения модулей вызовом depmod.

Обновлённый скрипт pfsload при подключении модуля запускает depmod. Но из скрипта rc.sysinit команда pfsload запускается с параметром -n, чтобы не вызывать dempod многократно (если файлы .ko окажутся в нескольких модулях). Поэтому для автоподключаемых модулей вызов depmod не работает.

Код
[ "$(find /mnt -maxdepth 1 -type d -name '.*' 2>/dev/null | while read mountpoint; do find "${mountpoint}/lib/modules" "${mountpoint}/usr/lib/modules" -name "*.ko" 2>/dev/null; done)" != "" ] && depmod &
Предлагаю внести этот код в самый конец блока ###LOADING SOFT###, перед строкой "status_func 0".


Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34033
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автозагрузка модулей при старте системы
« Ответ #102 : 16 Декабрь 2013, 10:50:17 »
!= "" - лишнее, жирное не помешает
[ "$(find /mnt -maxdepth 1 -type d -name '.*' 2>/dev/null | while read mountpoint; do find "${mountpoint}/lib/modules" "${mountpoint}/usr/lib/modules" -type f -name "*.ko" 2>/dev/null; done)" ] && depmod &

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8637
  • Репутация: +187/-2
  • Старый чайник
Re:Автозагрузка модулей при старте системы
« Ответ #103 : 16 Декабрь 2013, 16:49:10 »
Код
[ "$(find /mnt -maxdepth 1 -type d -name '.*' 2>/dev/null | while read mountpoint; do find "${mountpoint}/lib/modules" "${mountpoint}/usr/lib/modules"[b] -type f [/b]-name "*.ko" 2>/dev/null; done)" ] && depmod &
А не жирно получится после каждого найденного модуля depmod гонять? Может лучше один раз?
Код
[ "$(find /mnt -maxdepth 1 -type d -name '.*' 2>/dev/null | while read mountpoint; do find "${mountpoint}/lib/modules" "${mountpoint}/usr/lib/modules"[b] -type f [/b]-name "*.ko" 2>/dev/null; done)" ] && DEPMOD=yes
#и где нибудь в конце...
[ "$DEPMOD" = "yes" ] && depmod
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 34033
  • Репутация: +231/-0
  • Автор темы
    • PuppyRus-A
Re:Автозагрузка модулей при старте системы
« Ответ #104 : 16 Декабрь 2013, 17:01:51 »
В Zay и моем вариантах depmod запускается 1 раз по итогу нахождения любого количества .ko в ${mountpoint}/lib/modules" "${mountpoint}/usr/lib/modules"
Запускать скрипт надо после автозагрузки всех модулей