Ebuild development (end of mentoring) quiz Revision 1.4.1 - 23 Mar 2010 Answer in whatever length necessary for completeness. Review documentation. Consult your mentor if you're unable to locate answers. This quiz is based largely on ciaranm's bash quiz -- much thanks to him for the original and for extensive helpful feedback. 1. You are writing an ebuild for the foomatic package. Upstream calls the current version "1.3-7b" (but this is _not_ a beta release). How would the ebuild be named? What's wrong with the ebuild snippet below and how should this be written to aid maintainability? SRC_URI="http://foomatic.example.com/download/foomatic-1.3-7b.tar.bz2" S=${WORKDIR}/foomatic-1.3-7b docs: devmanual 2. You have a patch for foomatic which adds SSL support that is optional at build time. Assuming that foomatic uses an autotools based build system provide most probable changes required in an EAPI="0" ebuild. What should be done for the ebuild in case it uses EAPI="2"? docs: devmanual 3. What's the difference between local and global scope in an ebuild? docs: handbook 4. Why should an external application (for example sed/grep) not be called in global scope? What alternative methods can be used? docs: devmanual 5. What is wrong with using $(somecommand) or `somecommand` or $ARCH inside SRC_URI, DEPEND, etc? docs: devmanual 6. Explain what's incorrect about the following code snippets and suggest an alternative. 6.a # This ebuild doesn't like the -mcpu=ultrasparc CFLAG, so drop to v9 CFLAGS=${CFLAGS/-mcpu=ultrasparc/-mcpu=v9} docs: devmanual 6.b # Upstream don't support user-specified CFLAGS unset CFLAGS docs: devmanual 6.c # Extra settings for when SSL is enabled if [ "`use ssl `" ] ; then # blah fi docs: devmanual 6.d # Extra options for configure use jpeg && myconf="--enable-jpeg" \ || myconf="--disable-jpeg" use png && myconf="${myconf} --enable-png" \ || myconf="${myconf} --disable-png" use gif && myconf="${myconf} --enable-gif89a" \ || myconf="${myconf} --disable-gif89a" econf ${myconf} docs: devmanual 6.e # If we USE foo, we need to DEPEND upon libfoo. Unfortunately # foo is completely broken on some archs DEPEND="!x86? ( !amd64? ( !ppc? ( foo? ( >=dev-libs/libfoo-1.2 ) ) ) )" docs: devmanual 6.f # If USE=fnord is enabled, make extra targets: use fnord && ( emake fnordification || die "it broke" ) docs: devmanual 7. Explain briefly the purpose of the following tools: grep, cut, sed, cat, wc, awk docs: devmanual 8. Why are 'head -5' and 'tail -5' bad? What should be used instead? docs: 9. You're writing an ebuild and init script for a server application that needs networking to be available when started and can also use a system logger if one is available. How should this be written in the init script? docs: devmanual 10. What is the 'Gentoo Way' of allowing the user to pass other options to the previously mentioned server application? docs: devmanual 11. What is the 'Gentoo Way' of globally setting environment variables for all users? docs: devmanual 12. What directory should be used for application-generated non-temporary data? docs: devmanual 13. Which directory should manual (man) pages be in and how should they be installed from an ebuild? docs: handbook 14. On Gentoo Linux systems, what is the purpose of /usr/local/bin? docs: devmanual 15. When should you use || die "msg" with commands/functions? Could || die always be moved inside those functions/commands? docs: devmanual 16. You are committing a new package to the tree. What will you have in the KEYWORDS variable? docs: devmanual 17. You are bumping foomatic's ebuild from version 1.2 to version 1.3. The new release contains bugfixes and new functionality. The current KEYWORDS for 1.2 are "x86 sparc ~mips amd64" -- what will KEYWORDS be for the new 1.3 ebuild? docs: devmanual 18. You are bumping foomatic's ebuild from version 1.3 to 1.4. The new release extends functionality and introduces a new dependency on libfnord version 1.2 or later. The KEYWORDS for foomatic-1.3 are "x86 sparc ~mips amd64" and the KEYWORDS for libfnord-1.2 are "x86 ~sparc" -- what will you do? docs: devmanual 19. You are bumping foomatic's ebuild from version 1.4 to 1.5. This release introduces new optional support for the libgerbil library, which you are controlling via the gerbil global USE flag. Unfortunately libgerbil is full of code which doesn't work properly on big endian systems, and so has "-sparc -mips" in the KEYWORDS. How will you handle this? docs: devmanual 20. You are bumping foomatic's ebuild from version 1.5 to version 2.0. This new version is a massive rewrite which introduces huge changes to the build system, the required libraries and how the code works. What will you do for KEYWORDS here? docs: devmanual