zepete: (Default)
[personal profile] zepete

В скрипте запускаемом из Makefile нельзя использовать команду opkg install xxx, ибо opkg не допускает рекурсивного вызова.
Поэтому, написанный мной Makefile для установки пакетов для поддержки звука или установки дополнительных программ работать не будут. Я их из тех постов удаляю.

Можно обойти рекурсивный запуск opkg простым путем: все устанавливаемые пакеты перечислить, через пробел и дополнив вначале "+", в переменной DEPENDS (DEPENDS:=+pack1 +pack2.....).

Но это не позволяет устанавливать пакеты с пересекающимся множеством файлов, что иногда бывает необходимо, если надо установить пакет с расширенной версией команд. Для реализации такой возможности, надо создать скрипт в Makefile, который будет запускаться в фоне с подачей сигнала opkg об завершении.

Если скрипт запускать при помощи "&", то скрипт завершиться вместе с opkg. Для предотвращения этого, его надо запускать командой "nohup ash batch.sh &> /dev/tty &" или "ash batch < /dev/tty &> /dev/tty &".

К сожалению, в обоих вариантах запуска скрипта в фоне, ввод с клавиатуры будет невозможен: фоновый процесс в linux не имеет ввода и из программы bash команда "fg" (команда перевода процесса на передний) план не работает.

Для того, что бы это все реализовать, я использовал Makefile из предыдущего поста практически без переделок, но значительно изменил shell программу подготовки скрипта. Теперь скрипт подготовки исходного скрипта стал принимать 2 параметра: имя файла с исходным скриптом и имя файла запускаемого в фоне при установке из временной папки, которая в openwrt располагается в ОЗУ и перезагрузке удаляется.


#!/bin/sh
#***********************************************************************
#*скрипт заменяющий перевод строки на !!!separator!!!, а сами строки   *
#*на команды echo с выводом в файл указанный в последующей строке      *
#*!!!ВНИМАНИЕ!!! ВВОД С КЛАВИАТУРЫ НЕВОЗМОЖЕН!!!                       *
#*14 января 2014 года, zepete.livejournal.com                          *
#***********************************************************************
cat $1 | sed s~\'~\'\\\\\'\'~g | awk 'BEGIN{ORS="!!!separator!!!" ; OFS="" ;\
 sq="\x27" ; print "#!/bin/ash"; \
print "echo "sq"***********************************************************"sq;\
print "echo "sq"*Script starting installing script from opkg.             *"sq;\
print "echo "sq"*Please, wait 5 seconds for terminate opkg and            *"sq;\
print "echo "sq"*autostarting installing script                           *"sq;\
print "echo "sq"*15.01.2014 zepete                                        *"sq;\
print "echo "sq"***********************************************************"sq;\
print "(";\
print "echo "sq"#!/bin/ash"sq;\
print "echo "sq"noTimeOut=5"sq;\
print "echo "sq"until opkg update"sq;\
print "echo "sq"do"sq;\
print "echo "sq" let " sq "\\" sq sq "noTimeOut-=1"sq"\\"sq;\
print "echo "sq" if [ $noTimeOut -eq 0 ]"sq;\
print "echo "sq" then"sq;\
print "echo ", sq, "  echo ", sq, "\\", sq, sq,\
"***********************************************************"sq"\\"sq;\
print "echo ", sq, "  echo ", sq, "\\", sq, sq,\
"*ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERR*"sq"\\"sq;\
print "echo "sq"  echo ", sq, "\\", sq, sq,\
"*Can not wait for the completion of opkg                  *"sq"\\"sq;\
print "echo ", sq, "  echo ", sq, "\\", sq, sq,\
"***********************************************************"sq"\\"sq;\
print "echo ", sq, "  exit 1", sq;\
print "echo ", sq, " fi", sq;\
print "echo ", sq, " sleep 1", sq;\
print "echo ", sq, "done", sq;\
print "echo ", sq, "clear", sq\
}\
{if($1~/#!\/bin\//){next}}\
{print "echo ", sq, $0, sq}\
END{print " "; print " "; print ") > ", output;\
print "nohup ash ", output, " &> tty&";\
print "exit 1";\
print " ";\
print " "}' output="$2"


Переделанный Makefile из предыдущего поста для создания пакета установки приложений для звука.
#************************************************************************
#* Скрипт автоматизирующий пакетов для работы со звуком.                *
#* Запускается командой "opkg install 0-installsound"                   *
#* 8 января 2014 года zepete.livejournal.com                            *
#************************************************************************
include $(TOPDIR)/rules.mk

PKG_NAME:=0-installsound
PKG_VERSION:=1
PKG_RELEASE:=1
PKGARCH:=all

include $(INCLUDE_DIR)/package.mk

define Package/0-installsound
SECTION:=1
CATEGORY:=my scripts
TITLE:=install usb sound packs.
MAINTAINER:=zepete
URL:=zepete.livejournal.com
DEFAULT:=m
endef

define Package/0-installsound/description
0-installsound will install: kmod-sound-core, kmod-usb-audio, alsa-utils-tests,
alsa-utils, moc, mpd-full, mpc
endef

define Build/Compile
endef

ifeq ($(CONFIG_PACKAGE_0-installsound),y)
define Package/0-installsound/install
 $(INSTALL_DIR) $(1)/sbin
 $(INSTALL_BIN)  ./files/installsound.sh $(1)/sbin/installsound.sh
endef
else
# при установке пакета во время работы, скрипт быдет помещен во временную папку,
# которая при перезагрузке будет удалена
define Package/0-installsound/install
 $(INSTALL_DIR) $(1)/tmp
 $(INSTALL_BIN)  ./files/installsound.sh $(1)/tmp/installsound.sh
endef

define linebreak
!!!end_of_line!!!
!!!begin_of_line!!!
endef

scripttext:=$(shell bash lf2separator.sh ./files/installsound.sh /tmp/tmp_installsound.sh)
scripttext:=$(subst !!!separator!!!,$(linebreak),$(scripttext))
scripttext:=$(subst !!!begin_of_line!!!,,$(scripttext))
scripttext:=$(subst !!!end_of_line!!!,,$(scripttext))
Package/0-installsound/preinst:=$(scripttext)
endif

$(eval $(call BuildPackage,0-installsound))


Makefile для установки дополнительных программ.
#************************************************************************
#* Скрипт автоматизирующий копирование дополнительных пакетов.          *
#* Запускается командой "opkg install 0-installext"                     *
#* 6 января 2014 года zepete.livejournal.com                          *
#************************************************************************
include $(TOPDIR)/rules.mk

PKG_NAME:=0-installext
PKG_VERSION:=1
PKG_RELEASE:=1
PKGARCH:=all

include $(INCLUDE_DIR)/package.mk

define Package/0-installext
SECTION:=1
CATEGORY:=my scripts
TITLE:=install extensions.
MAINTAINER:=zepete
URL:=zepete.livejournal.com
DEFAULT:=m
endef

define Package/0-installext/description
0-installext will install: usbutils, usbreset, wireless-tools, iwinfo
kmod-nls-cp1251, kmod-nls-cp866, kmod-nls-koi8r, kmod-nls-utf8,
wput, joe, kmod-fs-msdos, kmod-fs-ntfs, kmod-fs-vfat,
dosfsck, mkdosfs, dosfslabel, ntfs-3g, ntfsprogs,
e2fsprogs, ntfsprogs,_ntfs-3g, resize2fs, tune2fs, cfdisk, mc, htop, diffutils, unrar,
unzip, gzip, bzip2, tar, getopt, gawk, dialog, rename, less, ldd, iconv, psmisc, memtester,
md5deep, lsof, screen, bash, luci, luci-i18n-russian
endef

define Build/Compile
endef

ifeq ($(CONFIG_PACKAGE_0-installext),y)
define Package/0-installext/install
 $(INSTALL_DIR) $(1)/sbin
 $(INSTALL_BIN)  ./files/installext.sh $(1)/sbin/installext.sh
endef
else
# при установке пакета во время работы, скрипт быдет помещен во временную папку,
# которая при перезагрузке будет удалена
define Package/0-installext/install
 $(INSTALL_DIR) $(1)/tmp
endef

define linebreak
!!!end_of_line!!!
!!!begin_of_line!!!
endef

scripttext:=$(shell bash lf2separator.sh ./files/installext.sh /tmp/tmp_installext.sh)
scripttext:=$(subst !!!separator!!!,$(linebreak),$(scripttext))
scripttext:=$(subst !!!begin_of_line!!!,,$(scripttext))
scripttext:=$(subst !!!end_of_line!!!,,$(scripttext))
Package/0-installext/preinst:=$(scripttext)
endif


$(eval $(call BuildPackage,0-installext))

Profile

zepete: (Default)
zepete

January 2026

S M T W T F S
    1 23
4 56 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 14th, 2026 02:08 pm
Powered by Dreamwidth Studios