500-opkg 1.5 KB

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