swupdate.inc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. SUMMARY="Image updater for Yocto projects"
  2. DESCRIPTION = "Application for automatic software update from USB Pen"
  3. SECTION="swupdate"
  4. DEPENDS = "libconfig"
  5. LICENSE = "GPLv2+"
  6. LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
  7. inherit cml1 update-rc.d systemd pkgconfig
  8. SRC_URI = "git://github.com/sbabic/swupdate.git;protocol=https \
  9. file://defconfig \
  10. file://swupdate \
  11. file://swupdate.service \
  12. file://swupdate-usb.rules \
  13. file://swupdate-usb@.service \
  14. file://swupdate-progress.service \
  15. file://systemd-tmpfiles-swupdate.conf \
  16. "
  17. INSANE_SKIP_${PN} = "ldflags"
  18. PACKAGES =+ "${PN}-www ${PN}-lua"
  19. FILES_${PN}-lua += "${libdir}/lua/"
  20. FILES_${PN}-www = "/www/*"
  21. FILES_${PN} += "${libdir}/tmpfiles.d"
  22. S = "${WORKDIR}/git/"
  23. EXTRA_OEMAKE += " HOSTCC="${BUILD_CC}" HOSTCXX="${BUILD_CXX}" LD="${CC}" DESTDIR="${D}" V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX} SKIP_STRIP=y"
  24. DEPENDS += "kern-tools-native"
  25. # returns all the elements from the src uri that are .cfg files
  26. def find_cfgs(d):
  27. return [s for s in src_patches(d, True) if s.endswith('.cfg')]
  28. python () {
  29. try:
  30. defconfig = bb.fetch2.localpath('file://defconfig', d)
  31. except bb.fetch2.FetchError:
  32. return
  33. try:
  34. configfile = open(defconfig)
  35. except IOError:
  36. return
  37. features = configfile.readlines()
  38. configfile.close()
  39. if 'CONFIG_REMOTE_HANDLER=y\n' in features:
  40. depends = d.getVar('DEPENDS', False)
  41. d.setVar('DEPENDS', depends + ' zeromq')
  42. if 'CONFIG_ENCRYPTED_IMAGES=y\n' in features or 'CONFIG_MONGOOSESSL=y\n' in features or 'CONFIG_HASH_VERIFY=y\n' in features or 'CONFIG_SURICATTA_SSL=y\n' in features:
  43. depends = d.getVar('DEPENDS', False)
  44. d.setVar('DEPENDS', depends + ' openssl')
  45. if 'CONFIG_JSON=y\n' in features:
  46. depends = d.getVar('DEPENDS', False)
  47. d.setVar('DEPENDS', depends + ' json-c')
  48. if 'CONFIG_SYSTEMD=y\n' in features:
  49. depends = d.getVar('DEPENDS', False)
  50. d.setVar('DEPENDS', depends + ' systemd')
  51. if 'CONFIG_ARCHIVE=y\n' in features:
  52. depends = d.getVar('DEPENDS', False)
  53. d.setVar('DEPENDS', depends + ' libarchive')
  54. if 'CONFIG_LUA=y\n' in features:
  55. depends = d.getVar('DEPENDS', False)
  56. d.setVar('DEPENDS', depends + ' lua')
  57. if 'CONFIG_UBOOT=y\n' in features:
  58. depends = d.getVar('DEPENDS', False)
  59. if 'CONFIG_UBOOT_NEWAPI=y\n' in features:
  60. d.setVar('DEPENDS', depends + ' libubootenv')
  61. else:
  62. d.setVar('DEPENDS', depends + ' u-boot-fw-utils')
  63. if 'CONFIG_DOWNLOAD=y\n' in features or 'CONFIG_SURICATTA=y\n' in features:
  64. depends = d.getVar('DEPENDS', False)
  65. d.setVar('DEPENDS', depends + ' curl')
  66. if 'CONFIG_MTD=y\n' in features:
  67. depends = d.getVar('DEPENDS', False)
  68. d.setVar('DEPENDS', depends + ' mtd-utils')
  69. if 'CONFIG_CFI=y\n' in features:
  70. depends = d.getVar('DEPENDS', False)
  71. d.setVar('DEPENDS', depends + ' mtd-utils')
  72. if 'CONFIG_UBIVOL=y\n' in features:
  73. depends = d.getVar('DEPENDS', False)
  74. d.setVar('DEPENDS', depends + ' mtd-utils')
  75. if 'CONFIG_UCFWHANDLER=y\n' in features:
  76. depends = d.getVar('DEPENDS', False)
  77. d.setVar('DEPENDS', depends + ' libgpiod')
  78. if 'CONFIG_RDIFFHANDLER=y\n' in features:
  79. depends = d.getVar('DEPENDS', False)
  80. d.setVar('DEPENDS', depends + ' librsync')
  81. if 'CONFIG_MONGOOSE_WEB_API_V2=y\n' in features:
  82. d.setVar('SWUPDATE_WWW', 'webapp')
  83. if 'CONFIG_BOOTLOADER_EBG=y\n' in features:
  84. depends = d.getVar('DEPENDS', False)
  85. d.setVar('DEPENDS', depends + ' efibootguard')
  86. }
  87. do_configure () {
  88. cp ${WORKDIR}/defconfig ${S}/.config
  89. merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
  90. cml1_do_configure
  91. }
  92. do_compile() {
  93. unset LDFLAGS
  94. oe_runmake swupdate_unstripped progress_unstripped
  95. cp swupdate_unstripped swupdate
  96. cp progress_unstripped progress
  97. }
  98. do_install () {
  99. oe_runmake install
  100. install -m 0755 -d ${D}/www
  101. if [ -d ${S}/web-app ];then
  102. cp -R --no-dereference --preserve=mode,links -v ${S}/examples/www/v2/* ${D}/www
  103. else
  104. install -m 0755 ${S}/www/* ${D}/www
  105. fi
  106. install -d ${D}${sysconfdir}/init.d
  107. install -m 755 ${WORKDIR}/swupdate ${D}${sysconfdir}/init.d
  108. install -d ${D}${systemd_unitdir}/system
  109. install -m 644 ${WORKDIR}/swupdate.service ${D}${systemd_unitdir}/system
  110. install -m 644 ${WORKDIR}/swupdate-usb@.service ${D}${systemd_unitdir}/system
  111. install -m 644 ${WORKDIR}/swupdate-progress.service ${D}${systemd_unitdir}/system
  112. if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
  113. install -d ${D}${libdir}/tmpfiles.d
  114. install -m 0644 ${WORKDIR}/systemd-tmpfiles-swupdate.conf ${D}${libdir}/tmpfiles.d/swupdate.conf
  115. install -d ${D}${sysconfdir}/udev/rules.d
  116. install -m 0644 ${WORKDIR}/swupdate-usb.rules ${D}${sysconfdir}/udev/rules.d/
  117. fi
  118. }
  119. INITSCRIPT_NAME = "swupdate"
  120. INITSCRIPT_PARAMS = "defaults 70"
  121. SYSTEMD_SERVICE_${PN} = "swupdate.service"
  122. SYSTEMD_SERVICE_${PN} += "swupdate-usb@.service swupdate-progress.service"