IPK Creator 5.0 (Java) By Persian Prince

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • IPK Creator 5.0 (Java) By Persian Prince

      thx @Persian Prince für die Erlaubnis, die aktuelle Version hier im VTi-Forum posten zu dürfen :thumbsup:

      Die Version 5.0 läuft auf Windoof 7/10, macOS, Linux und hat entsprechende Starter in den Verzeichnissen mit dabei.

      Installation :
      • Java > v1.8x sollte auf dem Rechner installiert sein.
      • das ZIP irgendwohin entpacken
      • evtl. das Verzeichnis "How to use ..." ansehen :whistling:
      • entweder die .jar starten oder in den Verzeichnissen der Betriebssysteme den jeweiligen Starter , IPKCreator-x64 oder IPKCreator-x86
      hier die "Release Notes"

      Version 5.0
      - Windows, Linux, macOS binaries added (x86/x64)
      - "Recommends" added
      - "armv7ahf-neon" and "cortexa9hf-neon" architectures added
      - no check for characters so you can create anything
      - less required fields in red
      - lots of fixes/improvements
      - clean and rebuild using JDK 8u102/NetBeans 8.1

      Ich hab meine Verzeichnisstruktur mal angehängt, wenn man nämlich nicht höllisch aufpasst, kann es vorkommen, dass die control-Dateien mit aufs System kopiert werden (meist unter root = "/"). Daher :
      • für jedes IPK lege ich ein neues Verzeichnis an (hier z.B. "iFlatFHD_setup")
      • in diese Verzeichnis kommen die control, pre-/postinst/rm scripte ... die Dateien muss ich natürlich anlegen / von anderen IPKs kopieren + anpassen. Hinweis : sind UNIX-Dateien, also UTF-8 + LF
      • in diesem Verzeichnis lege ich einen neuen Ordner an : "files"
      • in "files" befinden sich dann die Dateien für die Box mit den Dateipfaden angefangen von "/", meist also "usr/..."
      • im UI vom IPK-Creator bei Folder - Open wähle ich immer "files" aus ... dann werden die Infos aus controll automatisch gelesen.
      have fun creating IPKs :D
      Files

      The post was edited 1 time, last by gordon55 ().

    • Ich bekomme beim erstellen eines IPK plugins diese Fehlermeldung
      ich bin nach der Anleitung gegangen.
      das plugin was ich oben eingefügthabe, liegt in usr/lib/enigma2/python/pluginsExtensions/
      was mache ich falsch?
      Files
      • Unbenannt.png

        (232.89 kB, downloaded 184 times, last: )

      The post was edited 2 times, last by awesome User ().

    • Bin jetzt vorm Testen, mit stellt sich aber die Frage: Woher weiss das Tool, welche Rechte die einzelnen Dateien haben müssen?
      Ausführbare Dateien müssen ja 755 bekommen, wie kann man das einstellen mit einem Windows PC?
      ┌─────────────────────────────────────────────────────┐
      "Zwei unterschiedliche Kanäle zur selben Zeit. Wahnsinn. Moderne Zeiten." M. Reif
      └─────────────────────────────────────────────────────┘
    • In Windows gibt es die Rechte ja nicht. Deswegen die Frage.
      ┌─────────────────────────────────────────────────────┐
      "Zwei unterschiedliche Kanäle zur selben Zeit. Wahnsinn. Moderne Zeiten." M. Reif
      └─────────────────────────────────────────────────────┘
    • Das Tool weiß das nicht.
      Du schreibst ein Miniscript postinst, das die Rechte setzt und fügst das Script mit komplettem Pfad in das Feld postinst ein

      Source Code

      1. #!/bin/sh
      2. chmod 755 /usr/bin/oscam
      Es wird dann nach der Installation ausgeführt.
    • Neben der Möglichkeit von hgdo Script-Befehle, die die Rechte anpassen in die postinst zu schreiben, gibt es natürlich noch andere Wege.


      Vor allem bei großen Paketen wird es sinnvoller sein, auf dem Zielsystem (also der Box) eine tar-Datei zu erstellen und diese dann in die ipk zu packen.
      Die "blabla.tar" wird auf der Box ins tmp-Verzeichnis installiert und in der "postinst" steht dann passend dazu ein zusätzlicher Entpackbefehl z.B. "tar -xPf /tmp/Blabla.tar".


      Ich erstelle ipk-Dateien auch ausschließlich unter Window, verwende allerdings einen ganz einfachen selbstgestickten Windows-Ipk-Creator, da haben Dateien nach dem Auspacken grundsätzlich Defaultrechte.
      Rechtesensible Dateien auf dem Testsystem gleich mit den richtigen Rechten einzupacken, hat sich in der Praxis als der einfachste, aber vor allem als der Weg erwiesen, bei dem die wenigsten Fehler beim Einpacken passieren.

      The post was edited 1 time, last by n020222 ().

    • n020222 wrote:

      Vor allem bei großen Paketen wird es sinnvoller sein, auf dem Zielsystem (also der Box) eine tar-Datei zu erstellen und diese dann in die ipk zu packen.
      Die "blabla.tar" wird auf der Box ins tmp-Verzeichnis installiert und in der "postinst" steht dann passend dazu ein zusätzlicher Entpackbefehl z.B. "tar -xPf /tmp/Blabla.tar".
      Hmm, diese Methode hat für mich den wesentlichen Nachteil, dass bei einer De-Installation des IPK die Dateien des zusätzlichen tar-Archivs NICHT vom System gelöscht werden, da sie nicht im Paketmanagement verwaltet werden. Wird z.B. bei einigen Skin-IPKs verwendet und dann bleiben nach der Deinstallation die ganzen Converter / Renderer auf dem System ... Mag vielleicht so beabsichtigt sein, bei mir jedoch in der Regel nicht.
      Daher finde ich persönlich den Vorschlag von @hgdo eigentlich besser.

      Hat schon jemand den IPK-Creator unter Linux ausprobiert bez. der Datei-Rechte ?
    • unter linux/macos braucht man den kram nicht!

      da reicht das script:

      Shell-Script

      1. #!/bin/sh
      2. set -e
      3. #for macOS - remove mac only files before we create the IPK
      4. sudo find . -name ".DS_Store" -depth -exec rm {} \;
      5. sudo find . -name "._*" -depth -exec rm {} \;
      6. ipkg_extract_value() {
      7. sed -e "s/^[^:]*:[[:space:]]*//"
      8. }
      9. required_field() {
      10. field=$1
      11. value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value`
      12. if [ -z "$value" ]; then
      13. echo "ipkg-build: Error: $CONTROL/control is missing field $field" ;
      14. PKG_ERROR=1
      15. fi
      16. echo $value
      17. }
      18. pkg_appears_sane() {
      19. local pkg_dir=$1
      20. local owd=`pwd`
      21. cd $pkg_dir
      22. PKG_ERROR=0
      23. if [ ! -f "$CONTROL/control" ]; then
      24. echo "ipkg-build: Error: Control file $pkg_dir/$CONTROL/control not found."
      25. cd $owd
      26. return 1
      27. fi
      28. pkg=`required_field Package`
      29. version=`required_field Version | sed 's/.*://;'`
      30. arch=`required_field Architecture`
      31. required_field Maintainer >/dev/null
      32. required_field Description >/dev/null
      33. if echo $pkg | grep '[^a-z0-9.+-]'; then
      34. echo "ipkg-build: Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])"
      35. PKG_ERROR=1;
      36. fi
      37. local bad_fields=`sed -ne 's/^\([^[:space:]][^:[:space:]]\+[[:space:]]\+\)[^:].*/\1/p' < $CONTROL/control | sed -e 's/\\n//'`
      38. if [ -n "$bad_fields" ]; then
      39. bad_fields=`echo $bad_fields`
      40. echo "ipkg-build: Error: The following fields in $CONTROL/control are missing a ':'"
      41. echo " $bad_fields"
      42. echo "ipkg-build: This may be due to a missing initial space for a multi-line field value"
      43. PKG_ERROR=1
      44. fi
      45. for script in $CONTROL/preinst $CONTROL/postinst $CONTROL/prerm $CONTROL/postrm; do
      46. if [ -f $script -a ! -x $script ]; then
      47. echo "ipkg-build: Error: package script $script is not executable"
      48. PKG_ERROR=1
      49. fi
      50. done
      51. if [ -f $CONTROL/conffiles ]; then
      52. for cf in `cat $CONTROL/conffiles`; do
      53. if [ ! -f ./$cf ]; then
      54. echo "ipkg-build: Error: $CONTROL/conffiles mentions conffile $cf which does not exist"
      55. PKG_ERROR=1
      56. fi
      57. done
      58. fi
      59. cd $owd
      60. return $PKG_ERROR
      61. }
      62. ###
      63. # ipkg-build "main"
      64. ###
      65. case $# in
      66. 1)
      67. dest_dir=.
      68. ;;
      69. 2)
      70. dest_dir=$2
      71. ;;
      72. *)
      73. echo "Usage: ipkg-build <pkg_directory> [<destination_directory>]" ;
      74. exit 1
      75. ;;
      76. esac
      77. pkg_dir=$1
      78. if [ ! -d $pkg_dir ]; then
      79. echo "ipkg-build: Error: Directory $pkg_dir does not exist"
      80. exit 1
      81. fi
      82. # CONTROL is second so that it takes precedence
      83. CONTROL=
      84. [ -d $pkg_dir/DEBIAN ] && CONTROL=DEBIAN
      85. [ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL
      86. if [ -z "$CONTROL" ]; then
      87. echo "ipkg-build: Error: Directory $pkg_dir has no CONTROL subdirectory."
      88. exit 1
      89. fi
      90. if ! pkg_appears_sane $pkg_dir; then
      91. echo "Please fix the above errors and try again."
      92. exit 1
      93. fi
      94. tmp_dir=$dest_dir/IPKG_BUILD.$$
      95. mkdir $tmp_dir
      96. #tar -C $pkg_dir -czf $tmp_dir/data.tar.gz . --exclude=$pkg_dir/CONTROL
      97. #
      98. # gutemine's fix for --exclude bug
      99. #
      100. FILESWITHOUTCONTROL=`cd $pkg_dir; ls -1 | grep -v CONTROL`
      101. #echo $FILESWITHOUTCONTROL
      102. tar --exclude=.DS_Store -C $pkg_dir -czf $tmp_dir/data.tar.gz $FILESWITHOUTCONTROL
      103. tar --exclude=.DS_Store -C $pkg_dir/$CONTROL -czf $tmp_dir/control.tar.gz .
      104. echo "2.0" > $tmp_dir/debian-binary
      105. pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
      106. if [ -f /usr/bin/enigma2 ]; then
      107. if [ ! -f /usr/local/bin/ar ]; then
      108. BUSYBOX=`ls -F /usr/bin/ar | grep @ | wc -l`
      109. if [ $BUSYBOX -eq 1 ]; then
      110. echo ar seems to be from busybox - not capable to create archive
      111. echo Install ar from binutils at /usr/local/bin
      112. echo or replace link from /usr/bin/ar to busybox with real ar binary
      113. exit 0
      114. fi
      115. fi
      116. fi
      117. cd $tmp_dir
      118. ar -r $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz
      119. mv $pkg_file ..
      120. cd ..
      121. rm -r -f $tmp_dir
      122. echo "Packaged content was moved at $pkg_dir into $pkg_file"
      Display All
      VMC
      EPG Share
      VU Alexa Skill
      Fluid Next
      Global Search

      Spenden sind immer herzlich willkommen... einfach hier klicken und das ganze an sbeatz76@googlemail.com schicken
    • Nutze wieder ipkg-build, aber nicht mehr direkt auf der Box, sondern in Ubuntu, wo ich auch kompiliere.
      Da brauch man keine Scripte, um die Rechte nachträglich anzupassen.
      ┌─────────────────────────────────────────────────────┐
      "Zwei unterschiedliche Kanäle zur selben Zeit. Wahnsinn. Moderne Zeiten." M. Reif
      └─────────────────────────────────────────────────────┘
    • Habe ich nicht; aber ipk's sind so einfach aufgebaut, dass man das alles mit (fast jedenfalls) Bordmitteln der Box machen kann. Dafür braucht es auf der Box ein funktionierendes "ar" (das busybox-"ar" funktioniert nicht, ich habe aber ein funktionierendes echtes "ar" für ARM aus meinem gcc-Paket), ein "tar" und einen Texteditor sowie das Wissen, was in die control-Datei sowie die control.tar.gz reingehört Dafür habe ich mir für meine Projekte im Projektverzeichnis jeweils ein Shellscript gebaut; ansonsten finde ich ist das wichtigste ein Template für die control-Datei.

      Mein Template für das Shell-Script (Linux und Mac OS) ist (für mein OscamSkydeStatus-Plugin):


      Shell-Script

      1. # Das meta-Verzeichnis beinhaltet die control-Datei sowie die debian-binary-Datei
      2. cd meta
      3. version=$(grep Version control|cut -d " " -f 2)
      4. package=$(grep Package control|cut -d " " -f 2)
      5. # Das plugin-Verzeichnis für das data.tar.gz-File noch einmal unter meta bereitstellen
      6. mkdir -p usr/lib/enigma2/python/Plugins/Extensions/OscamSkydeStatus
      7. cp -r ../plugin/* usr/lib/enigma2/python/Plugins/Extensions/OscamSkydeStatus
      8. tar -cvzf data.tar.gz usr
      9. tar -cvzf control.tar.gz control # preinst postinst
      10. rm -f ../${package}_${version}_all.ipk
      11. ar -r ../${package}_${version}_all.ipk debian-binary control.tar.gz data.tar.gz
      12. rm -fr control.tar.gz data.tar.gz usr
      Display All
      Damit kann ich auf der Box auch ganz schnell ein ipk bauen.
    • gordon55 wrote:

      Hmm, diese Methode hat für mich den wesentlichen Nachteil, dass bei einer De-Installation des IPK die Dateien des zusätzlichen tar-Archivs NICHT vom System gelöscht werden, da sie nicht im Paketmanagement verwaltet werden.

      Mag vielleicht so beabsichtigt sein, bei mir jedoch in der Regel nicht.
      Es gibt doch eine "postrm", um das Deinstallieren perfekt zu machen. :D

      Aber es ist schon richtig .. bei mir ist es tatsächlich bei vielen Dateien beabsichtigt, denn meine ipk-Dateien enthalten sehr viele Dateien, die eigentlich zu anderen Paketen gehören und sie nur Verändern bzw. Überschreiben. Die normale Installation ist in diesem Fall sowieso nicht funktional.

      Aber, wenn man das Paketmanagement zum automatischen Entfernen nutzen will, dann enthält die IPK eben die Dateien doppelt also einmal normal (ggf. sogar nur als Dummy) und einmal in der *.tar. So überschreibt man die (Dummy)-Dateien durch die postinst dann mit den richtigen Rechten.

      Wie gesagt, so gibt es praktisch keine Fehler, die Dateien haben immer die richtigen Rechte und den richtigen Besitzer.

      Fazit: Wer unter Windows arbeiten will, muss sich eben etwas einfallen lassen.
    • hgdo wrote:

      Du schreibst ein Miniscript postinst, das die Rechte setzt und fügst das Script mit komplettem Pfad in das Feld postinst ein
      Da ich ipks auch nur unter Windows erstelle mach ich das mit der rechtevergabe (wenn mal benötigt) auch nur so.
      „In Deutschland ist die höchste Form der Anerkennung der Neid.“

      Zitat von Arthur Schopenhauer
    • was soll das zusammenfügen denn bringen ? jedes IPK ist wohl für einen eigenen Zweck mit eigener control-Datei inkl. evtl. Abhängigkeiten. Das nachträglich zu mischen ist eigentlich kompletter Unsinn, dann kannste auch gleich mit dem IPK-Creator nur EINE IPK erzeugen.

      Und über "opkg update" werden eigene IPKs nicht installiert, nur Updates vom Feed.