Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.12 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3. # SWARET - Simple packages manager and packages compiler for SWARET Linux.
  4. #
  5.  
  6. # === Configuration ============================================================
  7.  
  8. VERSION=1.0
  9.  
  10. CATEGORIES="
  11. base-system
  12. x-window
  13. utilities
  14. network
  15. graphics
  16. multimedia
  17. office
  18. development
  19. system-tools
  20. security
  21. games
  22. misc
  23. meta
  24. non-free"
  25.  
  26. COMMAND=$1
  27. if [ -f "$2" ]; then
  28. PACKAGE=$(basename ${2%.swaret} 2>/dev/null)
  29. else
  30. PACKAGE=${2%.swaret}
  31. fi
  32. PACKAGE_FILE=$2
  33. TARGET_DIR=$3
  34. TOP_DIR=`pwd`
  35. TMP_DIR=/tmp/swaret-$$-$RANDOM
  36. LIST=$2
  37.  
  38. LOCALSTATE=/var/lib/swaret
  39. INSTALLED=$LOCALSTATE/installed
  40. CACHE_DIR=/var/cache/swaret
  41. MIRROR=$LOCALSTATE/mirror
  42. BLOCKED=$LOCALSTATE/blocked-packages.list
  43. LOG=/var/log/swaret.log
  44. INSTALL_LIST=""
  45.  
  46. if [ -f "./swaret.conf" ]; then
  47. . ./swaret.conf
  48. elif [ -f "/etc/swaret.conf" ]; then
  49. . /etc/swaret.conf
  50. else
  51. echo -e "Unable to find the configuration file : /etc/swaret.conf"
  52. exit 0
  53. fi
  54.  
  55. if test $(id -u) = 0 ; then
  56. if [ ! -d "$WOK" ]; then
  57. echo "Creating the wok directory..."
  58. mkdir -p $WOK
  59. chmod 777 $WOK
  60. fi
  61. if [ ! -d "$PACKAGES_REPOSITORY" ]; then
  62. echo "Creating the packages repository..."
  63. mkdir -p $PACKAGES_REPOSITORY
  64. fi
  65. if [ ! -d "$SOURCES_REPOSITORY" ]; then
  66. echo "Creating the sources repository..."
  67. mkdir -p $PACKAGES_REPOSITORY
  68. fi
  69. fi
  70.  
  71. BUILDRECEIPT="$WOK/$PACKAGE/receipt"
  72. LOG="$WOK/$PACKAGE/process.log"
  73. WARNING="\\033[1;31mWARNING\\033[0;39m"
  74.  
  75. if test $(id -u) = 0 ; then
  76. if [ ! -d "$CACHE_DIR" ]; then
  77. mkdir -p $CACHE_DIR
  78. fi
  79. if [ ! -d "$INSTALLED" ]; then
  80. mkdir -p $INSTALLED
  81. fi
  82. if [ ! -f "$LOCALSTATE/mirror" ]; then
  83. echo "$DEFAULT_MIRROR" > $LOCALSTATE/mirror
  84. fi
  85. fi
  86.  
  87. # === Library ==================================================================
  88.  
  89. usage()
  90. {
  91. echo -e "Simple packages manager and packages compiler for SWARET Linux. - Version: $VERSION
  92.  
  93. \033[1mUsage: \033[0m `basename $0` [command] [package] [dir]
  94. \033[1mCommands: \033[0m
  95.  
  96. usage Print this usage.
  97. list List all installed packages.
  98. add Install a local (*.swaret) package (--forced to force).
  99. remove Remove the specified package and all installed files.
  100. block|unblock Block an installed package version or unblock it for upgrade.
  101. get-list Download and install a list of packages from the mirror.
  102. update Recharge your packges.list from the mirror.
  103. upgrade Upgrade all installed and listed packages on the mirror.
  104. download-only Download a package into the current directory.
  105. install Download and install a package from the mirror.
  106. cook Compile and generate a package directly.
  107. cook-list Cook all packages specified in the list by order.
  108. gen-list Generate a packages.list and md5sum for a repository.
  109. "
  110. }
  111.  
  112. status()
  113. {
  114. local CHECK=$?
  115. echo -en "\\033[70G[ "
  116. if [ $CHECK = 0 ]; then
  117. echo -en "\\033[1;33mOK"
  118. else
  119. echo -en "\\033[1;31mFailed"
  120. fi
  121. echo -e "\\033[0;39m ]"
  122. return $CHECK
  123. }
  124.  
  125. check_root()
  126. {
  127. if test $(id -u) != 0 ; then
  128. echo -e "You must be root to run `basename $0` with this option."
  129. exit 0
  130. fi
  131. }
  132.  
  133. check_for_package_on_cmdline()
  134. {
  135. if [ -z "$PACKAGE" ]; then
  136. echo -e "Please specify a package name on the command line."
  137. exit 0
  138. fi
  139. }
  140.  
  141. check_for_receipt()
  142. {
  143. if [ ! -f "$RECEIPT" ]; then
  144. echo -e "Unable to find the receipt: $RECEIPT"
  145. exit 0
  146. fi
  147. }
  148.  
  149. check_for_package_file()
  150. {
  151. if [ ! -f "$PACKAGE_FILE" ]; then
  152. echo -e "Unable to find: $PACKAGE_FILE"
  153. exit 0
  154. fi
  155. }
  156.  
  157. check_for_receipt()
  158. {
  159. if [ ! -f "$1$INSTALLED/$PACKAGE/receipt" ]; then
  160. echo -e "Unable to find the receipt: $1$INSTALLED/$PACKAGE/receipt"
  161. exit 0
  162. fi
  163. }
  164.  
  165. check_for_list()
  166. {
  167. if [ -z "$LIST" ]; then
  168. echo -e "Please specify the path to the list of packages to cook."
  169. exit 0
  170. fi
  171. # Check if the list of packages exists.
  172. if [ -f "$LIST" ]; then
  173. LIST=`cat $LIST`
  174. else
  175. echo -e "Unable to find $LIST packages list."
  176. exit 0
  177. fi
  178. }
  179.  
  180. package_fullname_in_dir()
  181. {
  182. [ -f $2$1/receipt ] || return
  183. EXTRAVERSION=""
  184. . $2$1/receipt
  185. echo $PACKAGE-$VERSION$EXTRAVERSION
  186. }
  187.  
  188. get_installed_package_pathname()
  189. {
  190. for i in $2$INSTALLED/${1%%-*}*; do
  191. [ -d $i ] || continue
  192. if [ "$1" = "$(package_fullname_in_dir $i $2)" ]; then
  193. echo $i
  194. return
  195. fi
  196. done
  197. }
  198.  
  199. check_for_installed_package()
  200. {
  201. if [ -n "$(get_installed_package_pathname $PACKAGE $1)" ]; then
  202. echo -e "
  203. $PACKAGE is already installed. You can use the --forced option to force
  204. installation or remove it and reinstall.\n"
  205. exit 0
  206. fi
  207. }
  208.  
  209. check_for_packages_list()
  210. {
  211. if [ ! -f "$LOCALSTATE/packages.list" ]; then
  212. if test $(id -u) = 0 ; then
  213. update
  214. else
  215. echo -e "
  216. Unable to find the list: $LOCALSTATE/packages.list\n
  217. You should probably run 'swaret update' as root to get the latest list of
  218. packages available on the mirror."
  219. exit 0
  220. fi
  221. fi
  222. }
  223.  
  224. get_package_filename()
  225. {
  226. local pkg
  227. pkg=$(grep -A 1 -sh "^$1$" $LOCALSTATE/packages.txt \
  228. $LOCALSTATE/undigest/*/packages.txt | tail -1)
  229. pkg=$(echo $pkg)
  230. [ -n "$pkg" ] && pkg=$(grep -sh "^$1-$pkg" \
  231. $LOCALSTATE/packages.list \
  232. $LOCALSTATE/undigest/*/packages.list | head -1)
  233. [ -n "$pkg" ] || pkg=$(grep -sh "^$1-[0-9]" \
  234. $LOCALSTATE/packages.list \
  235. $LOCALSTATE/undigest/*/packages.list | head -1)
  236. [ -n "$pkg" ] || pkg=$(grep -sh "^$1-.[\.0-9]" \
  237. $LOCALSTATE/packages.list \
  238. $LOCALSTATE/undigest/*/packages.list | head -1)
  239. if [ -z "$pkg" ]; then
  240. # Check for vitual package
  241. local equiv
  242. equiv=$(equivalent_pkg $1 virtual)
  243. if [ "$equiv" != "$1" ]; then
  244. PACKAGE=$equiv
  245. get_package_filename $PACKAGE
  246. return
  247. fi
  248. fi
  249. echo $pkg
  250. }
  251.  
  252. check_for_package_in_list()
  253. {
  254. local filename
  255. local check_only
  256. check_only="$1"
  257. filename=$(get_package_filename $PACKAGE)
  258. if [ -n "$filename" ]; then
  259. PACKAGE=$filename
  260. else
  261. echo -e "Unable to find: $PACKAGE in the mirrored packages list."
  262. [ -n "$check_only" ] && return 1
  263. exit 0
  264. fi
  265. }
  266.  
  267. log()
  268. {
  269. local extra
  270. [ "$1" = "Installed" ] && \
  271. extra=" - $(grep $PACKAGE-$VERSION $LOCALSTATE/installed.md5 | awk '{ print $1 }')"
  272. [ -e $LOG ] || touch $LOG
  273. DATE=`date +'%F %T'`
  274. [ -w $LOG ] &&
  275. echo "$DATE - $1 - $PACKAGE ($VERSION$EXTRAVERSION)$extra" >> $LOG
  276. }
  277.  
  278. download_from()
  279. {
  280. local i
  281. local mirrors
  282. mirrors="$1"
  283. shift
  284. for i in $mirrors; do
  285. case "$i" in
  286. http://*|ftp://*) wget -c $i$@ && break;;
  287. *) cp $i/$1 . && break;;
  288. esac
  289. done
  290. }
  291.  
  292. download()
  293. {
  294. local i
  295. case "$1" in
  296. *.swaret)
  297. for i in $LOCALSTATE $LOCALSTATE/undigest/* ; do
  298. grep "^${1%.swaret}$" $i/packages.list || continue
  299. download_from "$(cat $i/mirror)" "$@" && return
  300. done
  301. esac
  302. for i in $(cat $MIRROR $LOCALSTATE/undigest/*/mirror 2> /dev/null); do
  303. download_from "$i" "$@" && break
  304. done
  305. }
  306.  
  307. extract_package()
  308. {
  309. echo -n "Extracting $PACKAGE..."
  310. cpio -id < $PACKAGE.swaret && rm -f $PACKAGE.swaret
  311. gzip -d fs.cpio.gz
  312. echo -n "Extracting the pseudo fs... "
  313. cpio -id < fs.cpio && rm fs.cpio
  314. }
  315.  
  316. install_package()
  317. {
  318. ROOT=$1
  319. if [ -n "$ROOT" ]; then
  320. ROOT=$(cd $ROOT; pwd)
  321. fi
  322. (
  323. mkdir -p $TMP_DIR
  324. ( cd $TMP_DIR ; cpio -i receipt > /dev/null) < $PACKAGE_FILE
  325. . $TMP_DIR/receipt
  326. if grep -q ^pre_depends $TMP_DIR/receipt; then
  327. pre_depends $ROOT
  328. fi
  329. cp $ROOT$INSTALLED/$PACKAGE/modifiers $TMP_DIR 2> /dev/null
  330. rm -rf $ROOT$INSTALLED/$PACKAGE 2> /dev/null
  331. mkdir -p $ROOT$INSTALLED/$PACKAGE
  332. cp $TMP_DIR/modifiers $ROOT$INSTALLED/$PACKAGE 2> /dev/null
  333. rm -rf $TMP_DIR 2> /dev/null
  334. sed -i "/ $(basename $PACKAGE_FILE)$/d" \
  335. $ROOT$LOCALSTATE/installed.md5 2> /dev/null
  336. cd $(dirname $PACKAGE_FILE)
  337. md5sum $(basename $PACKAGE_FILE) >> $ROOT$LOCALSTATE/installed.md5
  338. )
  339. check_for_deps $ROOT
  340. if [ ! "$MISSING_PACKAGE" = "" ]; then
  341. install_deps $ROOT
  342. fi
  343. mkdir -p $TMP_DIR
  344. [ -n "$INSTALL_LIST" ] && echo "$PACKAGE_FILE" >> $INSTALL_LIST-processed
  345. echo -n "Installing the $PACKAGE package..."
  346. cp $PACKAGE_FILE $TMP_DIR
  347. status
  348. cd $TMP_DIR
  349. extract_package
  350. SELF_INSTALL=0
  351. EXTRAVERSION=""
  352. CONFIG_FILES=""
  353. . $PWD/receipt
  354. if [ $SELF_INSTALL -ne 0 -a -n "$ROOT" ]; then
  355. echo -n "Checking post install dependencies... "
  356. [ -f $INSTALLED/$PACKAGE/receipt ]
  357. if ! status; then
  358. echo "Please run 'get_install $PACKAGE_FILE' in / and retry."
  359. cd .. && rm -rf $TMP_DIR
  360. exit 1
  361. fi
  362. fi
  363. for i in $(grep -v '\[' files.list); do
  364. [ -e "$ROOT$i" ] || continue
  365. [ -d "$ROOT$i" ] && continue
  366. for j in $(grep -l "^$i$" $ROOT$INSTALLED/*/files.list); do
  367. local dir
  368. dir=$(dirname $j)
  369. [ "$j" = "$ROOT$INSTALLED/$PACKAGE/files.list" ] && continue
  370. if grep -qs ^$(basename $dir)$ \
  371. $ROOT$INSTALLED/$PACKAGE/modifiers; then
  372. rm .$i 2> /dev/null
  373. continue
  374. fi
  375. grep -qs ^$PACKAGE$ $dir/modifiers && continue
  376. if [ -s "$dir/volatile.cpio.gz" ]; then
  377. zcat $dir/volatile.cpio.gz | \
  378. cpio -t 2> /dev/null | \
  379. grep -q "^${i#/}$" && continue
  380. fi
  381. echo "$PACKAGE" >> $dir/modifiers
  382. done
  383. done
  384. cp receipt files.list $ROOT$INSTALLED/$PACKAGE
  385. if [ -f "description.txt" ]; then
  386. cp description.txt $ROOT$INSTALLED/$PACKAGE
  387. fi
  388. if [ -f "md5sum" ]; then
  389. cp md5sum $ROOT$INSTALLED/$PACKAGE
  390. fi
  391. if grep -q ^pre_install $ROOT$INSTALLED/$PACKAGE/receipt; then
  392. pre_install $ROOT
  393. fi
  394. if [ -n "$CONFIG_FILES" ]; then
  395. echo -n "Save configuration files for $PACKAGE... "
  396. for i in $CONFIG_FILES; do
  397. ( cd fs ; find ${i#/} -type f )
  398. done | ( cd fs ; cpio -o -H newc | gzip -9 ) > \
  399. $ROOT$INSTALLED/$PACKAGE/volatile.cpio.gz
  400. for i in $CONFIG_FILES; do
  401. ( cd fs ; find ${i#/} -type f )
  402. done | while read i; do
  403. [ -e $ROOT/$i ] || continue
  404. cp -a $ROOT/$i fs/$i
  405. done
  406. status
  407. fi
  408. cp -a fs/* $ROOT/
  409. status
  410. cd .. && rm -rf $TMP_DIR
  411. status
  412. if grep -q ^post_install $ROOT$INSTALLED/$PACKAGE/receipt; then
  413. post_install $ROOT
  414. fi
  415. cd $TOP_DIR
  416. [ -n "$ROOT" ] || log Installed
  417.  
  418. }
  419.  
  420. check_for_deps_loop()
  421. {
  422. local list
  423. local pkg
  424. local deps
  425. pkg=$1
  426. shift
  427. [ -n "$1" ] || return
  428. list=""
  429. for i in $@; do
  430. case " $ALL_DEPS" in
  431. *\ $i\ *);;
  432. *) list="$list $i";;
  433. esac
  434. done
  435. ALL_DEPS="$ALL_DEPS$list "
  436. for i in $list; do
  437. [ -f $i/receipt ] || continue
  438. deps="$(DEPENDS=""; . $i/receipt; echo $DEPENDS)"
  439. case " $deps " in
  440. *\ $pkg\ *) echo -e "$MSG $i"; MSG="";;
  441. *) check_for_deps_loop $pkg $deps;;
  442. esac
  443. done
  444. }
  445.  
  446. check_for_deps()
  447. {
  448. local saved;
  449. saved=$PACKAGE
  450. mkdir -p $TMP_DIR
  451. ( cd $TMP_DIR ; cpio -i receipt > /dev/null ) < $PACKAGE_FILE
  452. . $TMP_DIR/receipt
  453. PACKAGE=$saved
  454. rm -rf $TMP_DIR
  455. for pkgorg in $DEPENDS
  456. do
  457. i=$(equivalent_pkg $pkgorg $1)
  458. if [ ! -d "$1$INSTALLED/$i" ]; then
  459. MISSING_PACKAGE=$i
  460. deps=$(($deps+1))
  461. elif [ ! -f "$1$INSTALLED/$i/receipt" ]; then
  462. echo -e "$WARNING Dependency loop between $PACKAGE and $i."
  463. fi
  464. done
  465. if [ ! "$MISSING_PACKAGE" = "" ]; then
  466. echo "Tracking dependencies for $PACKAGE..."
  467. for pkgorg in $DEPENDS
  468. do
  469. i=$(equivalent_pkg $pkgorg $1)
  470. if [ ! -d "$1$INSTALLED/$i" ]; then
  471. MISSING_PACKAGE=$i
  472. echo "Missing : $MISSING_PACKAGE"
  473. fi
  474. done
  475. echo "$deps missing package(s) to install."
  476. fi
  477. }
  478.  
  479. install_deps()
  480. {
  481. local root
  482. root=""
  483. [ -n "$1" ] && root="--root=$1"
  484. echo -n "Install all missing dependencies (Y/n)?"; read anser
  485. echo ""
  486. if [ "$anser" = "y" ]; then
  487. for pkgorg in $DEPENDS
  488. do
  489. pkg=$(equivalent_pkg $pkgorg $1)
  490. if [ ! -d "$1$INSTALLED/$pkg" ]; then
  491. local list
  492. list="$INSTALL_LIST"
  493. [ -n "$list" ] || list="$TOP_DIR/packages.list"
  494. found=0
  495. if [ -f "$list" ]; then
  496. mkdir $TMP_DIR
  497. for i in $pkg-*.swaret; do
  498. [ -f $i ] || continue
  499. ( cd $TMP_DIR ; cpio -i receipt > /dev/null) < $i
  500. [ "$(. $TMP_DIR/receipt; echo $PACKAGE)" = "$pkg" ] || continue
  501. if grep -q ^$(package_fullname_in_dir $TMP_DIR).swaret$ $list
  502. then
  503. found=1
  504. add $i $root --list=$list
  505. break
  506. fi
  507. done
  508. rm -rf $TMP_DIR
  509. fi
  510. if [ $found -eq 0 ]; then
  511. if [ ! -f "$LOCALSTATE/packages.list" ]; then
  512. update
  513. fi
  514. get_install $pkg $root
  515. fi
  516. fi
  517. done
  518. else
  519. echo -e "Leaving dependencies for $PACKAGE unsolved."
  520. echo -e "The package is installed but will probably not work."
  521. fi
  522. }
  523.  
  524. search_in_installed_packages()
  525. {
  526. echo "================================================================================"
  527. echo "Installed packages"
  528. echo "================================================================================"
  529. list=`ls -1 $INSTALLED | grep -i "$PATTERN"`
  530. for pkg in $list
  531. do
  532. EXTRAVERSION=""
  533. [ -f $INSTALLED/$pkg/receipt ] || continue
  534. . $INSTALLED/$pkg/receipt
  535. echo -n "$PACKAGE "
  536. echo -en "\033[24G $VERSION$EXTRAVERSION"
  537. echo -e "\033[42G $CATEGORY"
  538. packages=$(($packages+1))
  539. done
  540. if [ "$packages" = "" ]; then
  541. echo "0 installed packages found for : $PATTERN"
  542. else
  543. echo "$packages installed package(s) found for : $PATTERN"
  544. fi
  545. }
  546.  
  547. search_in_packages_list()
  548. {
  549. echo "================================================================================"
  550. echo "Available packages name-version"
  551. echo "================================================================================"
  552. packages=0
  553. for i in $LOCALSTATE/packages.list $LOCALSTATE/undigest/*/packages.list; do
  554. grep -is "$PATTERN" $i
  555. packages=$(($packages + `grep -is "$PATTERN" $i | wc -l`))
  556. done
  557. if [ ! -f "$LOCALSTATE/packages.list" ]; then
  558. echo -e "
  559. No 'packages.list' found to check for mirrored packages. For more results,
  560. please run 'swaret update' once as root before searching.\n"
  561. fi
  562. if [ "$packages" = "0" ]; then
  563. echo "0 available packages found for : $PATTERN"
  564. else
  565. echo "$packages available package(s) found for : $PATTERN"
  566. fi
  567. }
  568.  
  569. search_in_packages_txt()
  570. {
  571. echo "================================================================================"
  572. echo "Matching packages name with version and desc"
  573. echo "================================================================================"
  574. packages=0
  575. for i in $LOCALSTATE/packages.txt $LOCALSTATE/undigest/*/packages.txt; do
  576. grep -is -A 2 "^$PATTERN" $i
  577. packages=$(($packages + `grep -is "^$PATTERN" $i | wc -l`))
  578. done
  579. if [ ! -f "$LOCALSTATE/packages.txt" ]; then
  580. echo -e "
  581. No 'packages.txt' found to check for mirrored packages. For more results,
  582. please run 'swaret update' once as root before searching."
  583. fi
  584. if [ "$packages" = "0" ]; then
  585. echo "0 available packages found for : $PATTERN"
  586. else
  587. echo "$packages available package(s) found for : $PATTERN"
  588. fi
  589. }
  590.  
  591. dep_scan()
  592. {
  593. for i in $1; do
  594. case " $ALL_DEPS " in
  595. *\ $i\ *) continue;;
  596. esac
  597. ALL_DEPS="$ALL_DEPS $i"
  598. [ -n "$2" ] && echo "$2$i"
  599. [ -f $i/receipt ] || continue
  600. DEPENDS=""
  601. . $i/receipt
  602. [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 "
  603. done
  604. }
  605.  
  606. rdep_scan()
  607. {
  608. for i in $1; do
  609. case " $ALL_DEPS " in
  610. *\ $i\ *) continue;;
  611. esac
  612. ALL_DEPS="$ALL_DEPS $i"
  613. [ -n "$2" ] && echo "$2$i"
  614. RDEPENDS=""
  615. for j in *; do
  616. [ -f $j/receipt ] || continue
  617. DEPENDS=""
  618. . $j/receipt
  619. case " $(echo $DEPENDS) " in
  620. *\ $i\ *)
  621. RDEPENDS="$RDEPENDS $j";;
  622. esac
  623. done
  624. [ -n "$RDEPENDS" ] && rdep_scan "$RDEPENDS" "$2 "
  625. done
  626. }
  627.  
  628. list()
  629. {
  630. #
  631. if [ "$2" = "blocked" ]; then
  632. echo "================================================================================"
  633. echo -e "Blocked packages"
  634. echo "================================================================================"
  635. if [ -s "$BLOCKED" ];then
  636. cat $BLOCKED
  637. echo ""
  638. else
  639. echo -e "No blocked packages found.\n"
  640. fi
  641. exit 0
  642. fi
  643. if [ "$2" = "cat" -o "$2" = "categories" ]; then
  644. echo ""
  645. echo -e "\033[1mPackages categories :\033[0m"
  646. for i in $CATEGORIES
  647. do
  648. echo $i
  649. categories=$(($categories+1))
  650. done
  651. echo "$categories categories"
  652. exit 0
  653. fi
  654. if [ -n "$2" ]; then
  655. ASKED_CATEGORY=$2
  656. echo -e "\033[1mInstalled packages of category :\033[0m $ASKED_CATEGORY"
  657. for pkg in $INSTALLED/*
  658. do
  659. [ -f $pkg/receipt ] || continue
  660. EXTRAVERSION=""
  661. . $pkg/receipt
  662. if [ "$CATEGORY" == "$ASKED_CATEGORY" ]; then
  663. echo -n "$PACKAGE"
  664. echo -e "\033[24G $VERSION$EXTRAVERSION"
  665. packages=$(($packages+1))
  666. fi
  667. done
  668. echo "================================================================================"
  669. echo -e "$packages packages installed of category $ASKED_CATEGORY."
  670. else
  671. echo -e "\033[1mList of all installed packages\033[0m"
  672. echo "================================================================================"
  673. for pkg in $INSTALLED/*
  674. do
  675. [ -f $pkg/receipt ] || continue
  676. EXTRAVERSION=""
  677. . $pkg/receipt
  678. echo -n "$PACKAGE"
  679. echo -en "\033[24G $VERSION$EXTRAVERSION"
  680. echo -e "\033[42G $CATEGORY"
  681. packages=$(($packages+1))
  682. done
  683. echo ""
  684. echo "$packages packages installed."
  685. fi
  686. }
  687.  
  688. remove()
  689. {
  690. check_for_package_on_cmdline
  691. if [ ! -f "$INSTALLED/$PACKAGE/receipt" ]; then
  692. echo -e "$PACKAGE is not installed."
  693. exit 0
  694. else
  695. ALTERED=""
  696. THE_PACKAGE=$PACKAGE # altered by receipt
  697. for i in $(cd $INSTALLED ; ls); do
  698. [ -f $INSTALLED/$i/receipt ] || continue
  699. DEPENDS=""
  700. . $INSTALLED/$i/receipt
  701. case " $(echo $DEPENDS) " in
  702. *\ $THE_PACKAGE\ *) ALTERED="$ALTERED $i";;
  703. esac
  704. done
  705. EXTRAVERSION=""
  706. . $INSTALLED/$THE_PACKAGE/receipt
  707. fi
  708. echo ""
  709. if [ -n "$ALTERED" ]; then
  710. echo "The following packages depend on $PACKAGE :"
  711. for i in $ALTERED; do
  712. echo " $i"
  713. done
  714. fi
  715. REFRESH=$(cd $INSTALLED ; grep -sl ^$PACKAGE$ */modifiers)
  716. if [ -n "$REFRESH" ]; then
  717. echo "The following packages have been modified by $PACKAGE :"
  718. for i in $REFRESH; do
  719. echo " ${i%/modifiers}"
  720. done
  721. fi
  722. echo "Remove $PACKAGE ($VERSION$EXTRAVERSION) ?"
  723. echo -n "Please confirm uninstallation (Y/n) : "; read anser
  724. if [ "$anser" = "y" ]; then
  725. echo -e "\033[1mRemoving :\033[0m $PACKAGE"
  726. if grep -q ^pre_remove $INSTALLED/$PACKAGE/receipt; then
  727. pre_remove
  728. fi
  729. if [ -f $INSTALLED/$PACKAGE/modifiers ]; then
  730. for mod in `cat $INSTALLED/$PACKAGE/modifiers`
  731. do
  732. for file in `cat $INSTALLED/$PACKAGE/files.list`
  733. do
  734. [ $(grep ^$file$ $INSTALLED/$mod/files.list | wc -l) -gt 1 ] && continue
  735. rm -f $file 2>/dev/null
  736. dir="$file"
  737. while [ "$dir" != "/" ]; do
  738. dir="$(dirname $dir)"
  739. rmdir $dir 2> /dev/null || break
  740. done
  741. done
  742. done
  743. else
  744. for file in `cat $INSTALLED/$PACKAGE/files.list`
  745. do
  746. rm -f $file 2>/dev/null
  747. dir="$file"
  748. while [ "$dir" != "/" ]; do
  749. dir="$(dirname $dir)"
  750. rmdir $dir 2> /dev/null || break
  751. done
  752. done
  753. fi
  754. status
  755. if grep -q ^post_remove $INSTALLED/$PACKAGE/receipt; then
  756. post_remove
  757. fi
  758. rm -rf $INSTALLED/$PACKAGE
  759. status
  760. sed -i "/ $PACKAGE-$VERSION$EXTRAVERSION$/d" \
  761. $LOCALSTATE/installed.md5 2> /dev/null
  762. log Removed
  763. if [ -n "$ALTERED" ]; then
  764. echo -n "Remove packages depending on $PACKAGE"
  765. echo -n " (Y/n) ? "; read anser
  766. if [ "$anser" = "y" ]; then
  767. for i in $ALTERED; do
  768. if [ -d "$INSTALLED/$i" ]; then
  769. remove $i
  770. fi
  771. done
  772. fi
  773. fi
  774. if [ -n "$REFRESH" ]; then
  775. echo -n "Reinstall packages modified by $PACKAGE"
  776. echo -n " (Y/n) ? "; read anser
  777. if [ "$anser" = "y" ]; then
  778. for i in $REFRESH; do
  779. if [ $(wc -l < $INSTALLED/$i) -gt 1 ]; then
  780. echo "Check $INSTALLED/$i for reinstallation"
  781. continue
  782. fi
  783. rm -r $INSTALLED/$i
  784. get_install ${i%/modifiers} --forced
  785. done
  786. fi
  787. fi
  788. else
  789. echo "Uninstallation of $PACKAGE cancelled."
  790. fi
  791. }
  792.  
  793. upgrade()
  794. {
  795. cd $LOCALSTATE
  796. touch blocked-packages.list
  797. rm -f upgradeable-packages.list
  798. echo "================================================================================"
  799. echo -e "\033[1mAvailable upgrades\033[0m"
  800. echo "================================================================================"
  801. FIRST_CLASS_PACKAGE=""
  802. for pkg in $INSTALLED/*
  803. do
  804. [ -f $pkg/receipt ] || continue
  805. EXTRAVERSION=""
  806. . $pkg/receipt
  807. echo -en "\\033[0G "
  808. echo -en "\\033[0G$PACKAGE"
  809. if grep -qs "^$PACKAGE" $BLOCKED; then
  810. blocked=$(($blocked+1))
  811. else
  812. NEW_PACKAGE=$(get_package_filename $PACKAGE)
  813.  
  814. if [ -n "$NEW_PACKAGE" ]; then
  815. NEW_VERSION=`echo $NEW_PACKAGE | sed s/$PACKAGE-/''/`
  816. NEW_VERSION=`echo $NEW_VERSION | sed s/'-'/'.'/`
  817. VERSION=`echo $VERSION | sed s/'-'/'.'/`$EXTRAVERSION
  818. NEW_VERSION=`echo $NEW_VERSION | sed s/'pre'/'.'/`
  819. VERSION=`echo $VERSION | sed s/'pre'/'.'/`
  820. NEW_VERSION=`echo $NEW_VERSION | sed 's/[A-Z]\.//'`
  821. VERSION=`echo $VERSION | sed 's/[A-Z]\.//'`
  822. RELEASE=""
  823. if [ -f installed.md5 -a -f packages.md5 ]; then
  824. current_md5=$(grep -s " $PACKAGE-$VERSION" installed.md5 | awk '{ print $1 }')
  825. new_md5=$(grep -hs " $PACKAGE-$VERSION" packages.md5 undigest/*/packages.md5 | head -1 | awk '{ print $1 }')
  826. [ -n "$current_md5" ] && [ -n "$new_md5" ] &&
  827. [ "$current_md5" != "$new_md5" ] && RELEASE=build
  828. fi
  829. if [ "$VERSION" != "$NEW_VERSION" -o -n "$RELEASE" ]; then
  830. PKG_MAJOR=`echo ${VERSION%_*} | cut -f1 -d"."`
  831. NEW_MAJOR=`echo ${NEW_VERSION%_*} | cut -f1 -d"."`
  832. PKG_MINOR=`echo ${VERSION%_*} | cut -f2 -d"."`
  833. NEW_MINOR=`echo ${NEW_VERSION%_*} | cut -f2 -d"."`
  834. if [ "$NEW_MINOR" -gt "$PKG_MINOR" ] 2> /dev/null; then
  835. RELEASE=minor
  836. fi
  837. if [ "$NEW_MINOR" -lt "$PKG_MINOR" ] 2> /dev/null; then
  838. RELEASE=$WARNING
  839. FIXE=yes
  840. fi
  841. if [ "$NEW_MAJOR" -gt "$PKG_MAJOR" ] 2> /dev/null; then
  842. RELEASE=major
  843. FIXE=""
  844. fi
  845. if [ "$NEW_MAJOR" -lt "$PKG_MAJOR" ] 2> /dev/null; then
  846. RELEASE=$WARNING
  847. FIXE=yes
  848. fi
  849. if [ -z $RELEASE ]; then
  850. RELEASE=revision
  851. fi
  852. echo -en "\033[24G $VERSION"
  853. echo -en "\033[38G --->"
  854. echo -en "\033[43G $NEW_VERSION"
  855. echo -en "\033[58G $CATEGORY"
  856. echo -e "\033[72G $RELEASE"
  857. up=$(($up+1))
  858. echo "$PACKAGE" >> upgradeable-packages.list
  859. case "$FIRST_CLASS_PACKAGE" in
  860. *\ $PACKAGE\ *) echo "$PACKAGE" >> upgradeable-packages.list$$;;
  861. esac
  862. unset RELEASE
  863. fi
  864. packages=$(($packages+1))
  865. fi
  866. fi
  867. done
  868. if [ -z $blocked ]; then
  869. blocked=0
  870. fi
  871. if [ ! "$up" = "" ]; then
  872. echo -e "\\033[0G "
  873. echo "$packages installed and listed packages to consider, $up to upgrade, $blocked blocked."
  874. else
  875. echo -e "\\033[0GSystem is up-to-date. "
  876. echo "$packages installed and listed packages to consider, 0 to upgrade, $blocked blocked."
  877. exit 0
  878. fi
  879. if [ "$FIXE" == "yes" ]; then
  880. echo -e "$WARNING ---> Installed package seems more recent than the mirrored one."
  881. echo "You can block packages using the command : 'swaret block package'"
  882. echo "Or upgrade packages at your own risk."
  883. echo ""
  884. fi
  885. echo -n "Upgrade now (Y/n) ? "; read anser
  886. if [ ! "$anser" = "y" ]; then
  887. echo -e "Exiting. No package upgraded."
  888. exit 0
  889. fi
  890. cat upgradeable-packages.list >> upgradeable-packages.list$$
  891. mv -f upgradeable-packages.list$$ upgradeable-packages.list
  892. yes y | get_list upgradeable-packages.list --forced
  893. rm -f upgradeable-packages.list
  894. }
  895.  
  896. block()
  897. {
  898. check_root
  899. check_for_package_on_cmdline
  900. echo ""
  901. if grep -qs "^$PACKAGE" $BLOCKED; then
  902. echo "$PACKAGE is already in the blocked packages list."
  903. echo ""
  904. exit 0
  905. else
  906. echo -n "Add $PACKAGE to : $BLOCKED..."
  907. echo $PACKAGE >> $BLOCKED
  908. status
  909. # Log this activity
  910. . $INSTALLED/$PACKAGE/receipt
  911. log Blocked
  912. fi
  913. echo ""
  914. }
  915.  
  916. unblock()
  917. {
  918. echo ""
  919. if grep -qs "^$PACKAGE" $BLOCKED; then
  920. echo -n "Removing $PACKAGE from : $BLOCKED..."
  921. sed -i s/$PACKAGE/''/ $BLOCKED
  922. sed -i '/^$/d' $BLOCKED
  923. status
  924. . $INSTALLED/$PACKAGE/receipt
  925. log Unblocked
  926. else
  927. echo "$PACKAGE is not in the blocked packages list."
  928. echo ""
  929. exit 0
  930. fi
  931. echo ""
  932. }
  933.  
  934. get()
  935. {
  936. download $PACKAGE.swaret
  937. }
  938.  
  939. update()
  940. {
  941. for path in $LOCALSTATE $LOCALSTATE/undigest/*; do
  942. [ -f $path/mirror ] || continue
  943. echo ""
  944. if [ "$path" != "$LOCALSTATE" ]; then
  945. echo "Recharge undigest $(basename $path):"
  946. fi
  947. cd $path
  948. if [ -f "packages.list" ]; then
  949. echo -n "Creating backup of the last packages list..."
  950. mv -f packages.desc packages.desc.bak 2>/dev/null
  951. mv -f packages.md5 packages.md5.txt 2>/dev/null
  952. mv -f packages.txt packages.txt.bak 2>/dev/null
  953. mv -f packages.list packages.list.bak 2>/dev/null
  954. mv -f packages.equiv packages.equiv.bak 2>/dev/null
  955. mv -f files.list.lzma files.list.lzma.bak 2> /dev/null
  956. mv -f mirrors mirrors.bak 2> /dev/null
  957. status
  958. fi
  959. download_from "$(cat mirror)" packages.desc
  960. download_from "$(cat mirror)" packages.md5
  961. download_from "$(cat mirror)" packages.txt
  962. download_from "$(cat mirror)" packages.list
  963. download_from "$(cat mirror)" packages.equiv
  964. download_from "$(cat mirror)" files.list.lzma
  965. download_from "$(cat mirror)" mirrors
  966. [ -f mirrors ] || mv mirrors.bak mirrors 2> /dev/null
  967. suffix=$(head -1 mirror)
  968. suffix=packages${suffix#*/packages}
  969. for i in $(cat mirrors 2> /dev/null); do
  970. grep -qs $i mirror || echo $i$suffix >> mirror
  971. done
  972. if [ -f "packages.list.bak" ]; then
  973. diff -u packages.list.bak packages.list | grep ^+[a-z] > packages.diff
  974. sed -i s/+// packages.diff
  975. echo "================================================================================"
  976. echo -e "\033[1mMirrored packages diff\033[0m"
  977. echo "================================================================================"
  978. cat packages.diff
  979. if [ ! "`cat packages.diff | wc -l`" = 0 ]; then
  980. echo "`cat packages.diff | wc -l` new packages on the mirror."
  981. else
  982. echo "`cat packages.diff | wc -l` new packages on the mirror."
  983. fi
  984. else
  985. echo -e "Last packages.list is ready to use. Note that next time you recharge the list,
  986. a list of differencies will be displayed to show new and upgradeable packages."
  987. fi
  988. done
  989. }
  990.  
  991. get_list()
  992. {
  993. if [ -z "$2" ]; then
  994. echo -e "Please change directory (cd) to the packages repository, and specify the
  995. list of packages to install. Example : swaret get-list packages.list"
  996. exit 0
  997. fi
  998. if [ ! -f "$2" ]; then
  999. echo "Unable to find : $2"
  1000. exit 0
  1001. else
  1002. LIST=`cat $2`
  1003. fi
  1004.  
  1005. export INSTALL_LIST="$2"
  1006.  
  1007. if [ "$1" = "get-install-list" ]; then
  1008. COMMAND=get-list
  1009. else
  1010. COMMAND=install
  1011. fi
  1012. touch $2-processed
  1013. for pkg in $LIST
  1014. do
  1015. grep -qs ^$pkg$ $2-processed && continue
  1016. swaret $COMMAND $pkg --list=$2 "$3" "$4" "$5"
  1017. done
  1018. rm -f $2-processed
  1019. }
  1020.  
  1021. add()
  1022. {
  1023. DO_CHECK="yes"
  1024. ROOT=""
  1025. while [ -n "$3" ]; do
  1026. case "$3" in
  1027. --forced)
  1028. DO_CHECK="no"
  1029. ;;
  1030. --root=*)
  1031. ROOT="${3#--root=}"
  1032. ;;
  1033. --list=*)
  1034. INSTALL_LIST="${3#--list=}"
  1035. ;;
  1036. *) shift 2
  1037. echo -e "Unknown option $*."
  1038. exit 1
  1039. ;;
  1040. usage)
  1041. esac
  1042. shift
  1043. done
  1044. if [ "$DO_CHECK" = "yes" ]; then
  1045. check_for_installed_package $ROOT
  1046. fi
  1047. install_package $ROOT
  1048. }
  1049.  
  1050. get_install()
  1051. {
  1052. DO_CHECK=""
  1053. while [ -n "$3" ]; do
  1054. case "$3" in
  1055. --forced)
  1056. DO_CHECK="no"
  1057. ;;
  1058. --root=*)
  1059. ROOT="${3#--root=}"
  1060. ;;
  1061. --list=*)
  1062. INSTALL_LIST="${3#--list=}"
  1063. ;;
  1064. *) shift 2
  1065. echo -e "Unknown option $*."
  1066. exit 1
  1067. ;;
  1068. esac
  1069. shift
  1070. done
  1071. AUTOEXEC="no"
  1072. if ! check_for_package_in_list check; then
  1073. PACKAGE=get-$PACKAGE
  1074. AUTOEXEC=$PACKAGE
  1075. check_for_package_in_list
  1076. if [ -n "$(get_installed_package_pathname $PACKAGE $ROOT)" ]; then
  1077. $AUTOEXEC $ROOT
  1078. exit 0
  1079. fi
  1080. fi
  1081. if [ "$DO_CHECK" = "no" ]; then
  1082. rm -f $CACHE_DIR/$PACKAGE.swaret
  1083. else
  1084. check_for_installed_package $ROOT
  1085. fi
  1086. cd $CACHE_DIR
  1087. if [ -f "$PACKAGE.swaret" ]; then
  1088. echo "$PACKAGE already in the cache : $CACHE_DIR"
  1089. tail -c 2k $PACKAGE.swaret | grep -q 00000000TRAILER || {
  1090. echo "Continue $PACKAGE download"
  1091. download $PACKAGE.swaret
  1092. }
  1093. else
  1094. echo ""
  1095. download $PACKAGE.swaret
  1096. fi
  1097. PACKAGE_FILE=$CACHE_DIR/$PACKAGE.swaret
  1098. install_package $ROOT
  1099. [ "$AUTOEXEC" != "no" ] && $PACKAGE $ROOT
  1100. }
  1101.  
  1102. equivalent_pkg()
  1103. {
  1104. for i in $(grep -hs "^$1=" $LOCALSTATE/packages.equiv \
  1105. $LOCALSTATE/undigest/*/packages.equiv | sed "s/^$1=//"); do
  1106. if echo $i | grep -q : ; then
  1107. if [ -f $2$INSTALLED/${i%:*}/receipt ]; then
  1108. echo ${i#*:}
  1109. return
  1110. fi
  1111. else
  1112. if [ -f $2$INSTALLED/$i/receipt ]; then
  1113. echo $i
  1114. return
  1115. fi
  1116. fi
  1117. done
  1118. echo $1
  1119. }
  1120.  
  1121. check_for_build_receipt()
  1122. {
  1123. if [ ! -f "$BUILDRECEIPT" ]; then
  1124. echo -e "Unable to find the receipt: $BUILDRECEIPT"
  1125. exit 0
  1126. fi
  1127. }
  1128.  
  1129.  
  1130. check_for_build_list()
  1131. {
  1132. if [ -z "$LIST" ]; then
  1133. echo -e "\nPlease specify the path to the list of packages to cook.\n"
  1134. exit 0
  1135. fi
  1136. # Check if the list of packages exist.
  1137. if [ -f "$LIST" ]; then
  1138. LIST=`cat $LIST`
  1139. else
  1140. echo -e "\nUnable to find $LIST packages list.\n"
  1141. exit 0
  1142. fi
  1143. }
  1144.  
  1145. check_for_wanted()
  1146. {
  1147. if [ ! "$WANTED" = "" ]; then
  1148. echo -n "Checking for the wanted package..."
  1149. if [ ! -d "$WOK/$WANTED" ]; then
  1150. echo -e "Wanted package is missing in the work directory."
  1151. exit 0
  1152. fi
  1153. status
  1154. src=$WOK/$WANTED/$WANTED-$VERSION
  1155. fi
  1156. }
  1157.  
  1158. check_for_build_depends()
  1159. {
  1160. echo "Checking for build dependencies..."
  1161. for pkg in $BUILD_DEPENDS
  1162. do
  1163. if [ ! -d "/var/lib//installed/$pkg" ]; then
  1164. MISSING_PACKAGE=$pkg
  1165. fi
  1166. done
  1167. if [ ! "$MISSING_PACKAGE" = "" ]; then
  1168. echo "================================================================================"
  1169. for pkg in $BUILD_DEPENDS
  1170. do
  1171. if [ ! -d "/var/lib/swaret/installed/$pkg" ]; then
  1172. MISSING_PACKAGE=$pkg
  1173. echo "Missing : $pkg"
  1174. fi
  1175. done
  1176. echo "================================================================================"
  1177. echo "You can continue, exit or install missing dependencies."
  1178. echo -n "Install, continue or exit (install/y/N)? "; read anser
  1179. case $anser in
  1180. install)
  1181. for pkg in $BUILD_DEPENDS
  1182. do
  1183. if [ ! -d "/var/lib/swaret/installed/$pkg" ]; then
  1184. get_install $pkg
  1185. fi
  1186. done ;;
  1187. y|yes)
  1188. continue ;;
  1189. *)
  1190. exit 0 ;;
  1191. esac
  1192. fi
  1193. }
  1194.  
  1195. gen_list()
  1196. {
  1197. fakewok=""
  1198. if [ "$2" == "--text" ]; then
  1199. textlist="yes"
  1200. if [ "$3" == "--fakewok" ]; then
  1201. WOK=/tmp/fakewok-$$
  1202. fakewok="$WOK"
  1203. mkdir -p $WOK
  1204. for i in $PACKAGES_REPOSITORY/*.swaret; do
  1205. (cd $WOK; cpio -i receipt files.list 2>/dev/null) < $i
  1206. . $WOK/receipt
  1207. mkdir -p $WOK/$PACKAGE/kyk/$PACKAGE-$VERSION
  1208. mv $WOK/receipt $WOK/files.list \
  1209. $WOK/$PACKAGE/kyk/$PACKAGE-$VERSION
  1210. ln $WOK/$PACKAGE/kyk/$PACKAGE-$VERSION/receipt $WOK/$PACKAGE
  1211. done
  1212. fi
  1213. elif [ -z "$2" ]; then
  1214. PACKAGES_REPOSITORY=$PACKAGES_REPOSITORY
  1215. else
  1216. if [ -d "$2" ]; then
  1217. PACKAGES_REPOSITORY=$2
  1218. else
  1219. echo -e "\nUnable to find directory : $2\n"
  1220. exit 0
  1221. fi
  1222. fi
  1223. cd $PACKAGES_REPOSITORY
  1224. rm -f packages.list packages.md5 packages.txt
  1225. echo ""
  1226. echo -e "\033[1mGenerating packages lists\033[0m"
  1227. echo "================================================================================"
  1228. echo -n "Repository path : $PACKAGES_REPOSITORY" && status
  1229. if [ "$textlist" == "yes" ]; then
  1230. gen_textlist
  1231. [ "$fakewok" == "" ] || rm -rf $fakewok
  1232. fi
  1233. echo -n "Creating the raw packages list... "
  1234. ls -1 *.swaret > /tmp/packages.list
  1235. sed -i s/'.swaret'/''/ /tmp/packages.list
  1236. status
  1237. echo -n "Building the md5sum for all packages... "
  1238. md5sum *.swaret > packages.md5
  1239. status
  1240. mv /tmp/packages.list $PACKAGES_REPOSITORY
  1241. echo "================================================================================"
  1242. pkgs=`cat $PACKAGES_REPOSITORY/packages.list | wc -l`
  1243. echo "$pkgs packages in the repository."
  1244. echo ""
  1245. }
  1246.  
  1247. strip_package()
  1248. {
  1249. echo -n "Executing strip on all files..."
  1250. for dir in $pkg/bin $pkg/sbin $pkg/usr/bin $pkg/usr/sbin $pkg/usr/games
  1251. do
  1252. if [ -d "$dir" ]; then
  1253. find $dir -type f -exec strip -s '{}' 2>/dev/null \;
  1254. fi
  1255. done
  1256. find $pkg -name "*.so*" -exec strip -s '{}' 2>/dev/null \;
  1257. find $pkg -name "*.a" -exec strip --strip-debug '{}' 2>/dev/null \;
  1258. status
  1259. }
  1260.  
  1261. cook_package()
  1262. {
  1263. check_for_package_on_cmdline
  1264. check_for_build_receipt
  1265. cd $WOK/$PACKAGE
  1266. . $BUILDRECEIPT
  1267. echo "================================================================================"
  1268. echo "Bulding $PACKAGE with the receipt..."
  1269. echo -n "Downloading $TARBALL..."
  1270. if [ ! "$SOURCE" = "" ]; then
  1271. src=$WOK/$PACKAGE/$SOURCE-$VERSION
  1272. else
  1273. src=$WOK/$PACKAGE/$PACKAGE-$VERSION
  1274. fi
  1275. check_for_build_depends
  1276. check_for_wanted
  1277. echo -n "Downloading $TARBALL"
  1278. wget $WGET_URL
  1279. if [ "$WANTED" = "" ]; then
  1280. if [ ! -d $src ]; then
  1281. echo "untaring $TARBALL" >> $LOG
  1282. echo -n "Untaring $TARBALL... "
  1283. case "$TARBALL" in
  1284. *zip) ( cd $WOK/$PACKAGE; unzip -o $WOK/$PACKAGE/$TARBALL );;
  1285. *bz2) tar xjf $WOK/$PACKAGE/$TARBALL -C $WOK/$PACKAGE;;
  1286. *tar) tar -xf $WOK/$PACKAGE/$TARBALL -C $WOK/$PACKAGE;;
  1287. *Z) tar xZf $WOK/$PACKAGE/$TARBALL -C $WOK/$PACKAGE;;
  1288. *) tar -xf $WOK/$PACKAGE/$TARBALL -C $WOK/$PACKAGE;;
  1289. esac
  1290. status
  1291. else
  1292. echo -n "Source directory exit... " && status
  1293. fi
  1294. fi
  1295. mkdir -p $WOK/$PACKAGE/work
  1296. mkdir -p $WOK/$PACKAGE/work/fs
  1297. pkg=$WOK/$PACKAGE/work/fs
  1298. stuff=$WOK/$PACKAGE/stuff
  1299. cd $WOK/$PACKAGE
  1300. if grep -q ^compile_rules $BUILDRECEIPT; then
  1301. echo "executing compile_rules" >> $LOG
  1302. compile_rules
  1303. local CHECK=$?
  1304. if [ $CHECK = 0 ]; then
  1305. echo "================================================================================"
  1306. echo "$PACKAGE compiled on: `date +%Y%m%d\ \%H:%M:%S`"
  1307. echo ""
  1308. echo "compilation done: `date +%Y%m%d\ \%H:%M:%S`" >> $LOG
  1309. else
  1310. echo "================================================================================"
  1311. echo "Compilation failed. Please read the compilator output."
  1312. echo "" && exit 1
  1313. fi
  1314. else
  1315. echo "no compile_rules" >> $LOG
  1316. echo -e "No compile rules for $PACKAGE...\n"
  1317. fi
  1318. strip_package
  1319. cd $WOK/$PACKAGE
  1320. echo -n "Copying the receipt..."
  1321. cp receipt $WOK/$PACKAGE/work
  1322. status
  1323. if [ -f "description.txt" ]; then
  1324. echo -n "Copying the description file..."
  1325. cp description.txt $WOK/$PACKAGE/work
  1326. status
  1327. fi
  1328. echo -n "Creating the list of files..."
  1329. cd $WOK/$PACKAGE/work/fs
  1330. find . -type f -print > ../files.list
  1331. find . -type l -print >> ../files.list
  1332. cd .. && sed -i s/'^.'/''/ files.list
  1333. status
  1334. echo -n "Compressing the fs... "
  1335. cd $WOK/$PACKAGE/work
  1336. find fs -print | cpio -o -H newc > fs.cpio
  1337. gzip fs.cpio &&
  1338. rm -rf $WOK/$PACKAGE/work/fs
  1339. echo -n "Creating full cpio archive... "
  1340. find . -print | cpio -o -H newc > $PACKAGES_REPOSITORY/$PACKAGE-$VERSION.swaret
  1341. echo -n "Restoring original package tree... "
  1342. gzip -d fs.cpio.gz && cpio -id < fs.cpio
  1343. rm fs.cpio && cd ..
  1344. echo "================================================================================"
  1345. echo "$PACKAGE-$VERSION.swaret (done)" >> $LOG
  1346. echo "Package $PACKAGE ($VERSION) generated."
  1347. rm -rf $WOK/$PACKAGE/work
  1348. rm -rf $WOK/$PACKAGE/$PACKAGE-$VERSION
  1349. rm -rf $WOK/$PACKAGE/$TARBALL
  1350. }
  1351.  
  1352. # === Main =====================================================================
  1353.  
  1354. case "$COMMAND" in
  1355. add)
  1356. check_root
  1357. check_for_package_on_cmdline
  1358. check_for_package_file
  1359. add
  1360. ;;
  1361. block)
  1362. check_root
  1363. check_for_package_on_cmdline
  1364. block
  1365. ;;
  1366. download-only)
  1367. check_for_package_on_cmdline
  1368. check_for_packages_list
  1369. check_for_package_in_list
  1370. get
  1371. ;;
  1372. get-list)
  1373. check_root
  1374. get_list
  1375. ;;
  1376. install)
  1377. check_root
  1378. check_for_package_on_cmdline
  1379. check_for_packages_list
  1380. get_install
  1381. ;;
  1382. list)
  1383. list
  1384. ;;
  1385. remove)
  1386. check_root
  1387. check_for_package_on_cmdline
  1388. remove
  1389. ;;
  1390. unblock)
  1391. check_root
  1392. check_for_package_on_cmdline
  1393. unblock
  1394. ;;
  1395. upgrade)
  1396. check_root
  1397. check_for_packages_list
  1398. upgrade
  1399. ;;
  1400. update)
  1401. check_root
  1402. update
  1403. ;;
  1404. cook)
  1405. cook_package
  1406. ;;
  1407. gen-list)
  1408. gen_list
  1409. ;;
  1410. cook-list)
  1411. check_root
  1412. check_for_list
  1413. for pkg in $LIST
  1414. do
  1415. compile_pkg $pkg
  1416. generate_pkg $pkg
  1417. done
  1418. ;;
  1419. usage|*)
  1420. usage
  1421. ;;
  1422. esac
  1423.  
  1424. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement