500-opkg 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/lua
  2. local fs = require 'nixio.fs'
  3. local site = require 'gluon.site_config'
  4. local util = require 'gluon.util'
  5. local subst = {}
  6. local f = io.popen('. /etc/openwrt_release; echo "$DISTRIB_CODENAME"; echo "$DISTRIB_RELEASE"; echo "$DISTRIB_TARGET"; echo "$DISTRIB_ARCH"')
  7. subst['%%n'] = f:read()
  8. subst['%%v'] = f:read():gsub('-SNAPSHOT', '')
  9. subst['%%S'] = f:read()
  10. subst['%%A'] = f:read()
  11. f:close()
  12. subst['%%GS'] = site.site_code
  13. subst['%%GV'] = util.trim(fs.readfile('/lib/gluon/gluon-version'))
  14. subst['%%GR'] = util.trim(fs.readfile('/lib/gluon/release'))
  15. function replace_patterns(url)
  16. for k, v in pairs(subst) do
  17. url = url:gsub(k, v)
  18. end
  19. return url
  20. end
  21. local prefix = subst['%%n'] .. '_'
  22. if fs.access('/etc/opkg/distfeeds.conf') then
  23. local distfeeds = {}
  24. for line in io.lines('/etc/opkg/distfeeds.conf') do
  25. table.insert(distfeeds, line)
  26. end
  27. local f = io.open('/etc/opkg/distfeeds.conf', 'w')
  28. for _, line in ipairs(distfeeds) do
  29. local name = line:match('^src/gz%s' .. prefix .. '(%S+)%s')
  30. if name == 'core' then
  31. f:write('# ' .. line .. '\n')
  32. elseif name and site.opkg and site.opkg.lede then
  33. f:write(string.format('src/gz %s %s/%s\n', prefix .. name, replace_patterns(site.opkg.lede), name))
  34. else
  35. f:write(line .. '\n')
  36. end
  37. end
  38. f:close()
  39. if site.opkg and site.opkg.extra and next(site.opkg.extra) then
  40. local f = io.open('/etc/opkg/gluon.conf', 'w')
  41. for k, v in pairs(site.opkg.extra) do
  42. f:write(string.format('src/gz %s %s\n', k, replace_patterns(v)))
  43. end
  44. f:close()
  45. else
  46. os.remove('/etc/opkg/gluon.conf')
  47. end
  48. end