Howto? build a module from clean source against kernel26-headers

I'm trying to create a package for a patched psmouse kernel module. (https://aur.archlinux.org/packages.php?ID=49284). However, I can't quite get the module built correctly.
I'm trying various make options like -C $KDIR, M=,.... and various make targets like prepare, modules_pepare, and explicitly giving a module.
Forgetting about the patch for a moment? How am I supposed to do this? I thought something like:
make -C /usr/src/linux-$(uname -r) M=drivers/input/mouse psmouse.ko
would work, but I think it's trying to write to the headers directory.
Thanks for any help.

What’s the error in particular? Are you trying to build the module source code from inside the kernel tree or separately? Look for similar module packages for examples?
If you’re trying to do an external build, perhaps try giving the absolute path in your M=drivers/input/mouse parameter; otherwise the -C option tells Make to change directory and it forgets what the original directory was.
I have an external module with me that has its own Make file and calls the kernel’s Make files with this if it’s any help:
make -C $(KDIR) SUBDIRS=$(PWD) modules

Similar Messages

  • How to get information from ODBC sources to Forms Builder environment

    Hi,
    Could anyone help me, to get some examples or more information, that how can I get information from ODBC sources to Forms Builder environment. I have a need to read data for example to LOV.

    If you are on Forms 6i you install the Oracle Client Adaptor from the Forms CD. You then have a way of connecting to ODBC datasources.
    To connect to ODBC at the same time as you are connected to Oracle you can use the EXEC_SQL package to create a second connection via odbc and issue select statements against that datasource.

  • Building 32bit wine from source

    Anyone know if it is possible to build 32bit wine from source on 64bit arch? There are patches I would like to apply to wine but currently the only way I can install wine on 64bit arch is via bin32-wine which uses the 32bit binary.
    Other distributions this is very easy. It is just a matter of installing all of the 32bit libraries as well as the 64 bit libraries. I used to do this all the time with debian. Now with arch, even installing all of the 32bit libraries it does not seem to work at all. Has anyone been able to do this?
    If someone can point me in the right direction on how to get 32bit wine to compile, i will try to make and maintain a package on the AUR which will do this.

    I needed this a couple of months back but I couldn't find any documentation on this, other than building a chroot. Which seemed too much for me. So instead I booted ubuntu ;(
    But it seems easy now: http://wiki.archlinux.org/index.php/Arc … _Arch64.3F

  • Build Solaris 8 from source only?

    I just downloaded the source for Solaris 8 and wanted to build the system from it, only it appears I need the Operating Environment to perform this and the OE is no longer available for download. Is there anyway to build the system with the source alone?

    Yuechen wrote:
    Hi
    I understand that my requirement is kinda weird. However, I really wonder whether it is possible sometimes.
    I have built ssh successfully both on solaris 8 and solaris 10. Now the problem is the binary built on solaris 8 can work on solaris 10, but the binary built on solaris 10 can not work on solaris 8.That is expected. Binaries should have forward compatibility and run on later versions of the OS.
    Build on 8, run on 8 through 10.
    Darren

  • Howto stop the application module from using a DB

    Hello,
    Maybe and unusual question, but is there a way to stop the application module from connect to a DB? I know its purpose is to do so. But currently we are using ‘stub’ views and entities.
    In the executequery and dodml we wrote our own code to access data from webservices.
    We did this because we are also using JHeadStart which requires BC.
    It all works fine, but the application module needs a valid connection to a DB, although it will never query anything there.
    So is there a method which I can overwrite to make the application module think its connected to the DB but it actually isn’t?
    A second problem is most likely its state table.
    Anton

    Example #96 on my blog does this. It might have some useful clues.

  • [SOLVED] nVidia 87.76 Drivers installer fails to build kernel module

    Hey,
    I have a nVidia GeForce2 Integrated graphics card on my Asus A7N266 motherboard. According to the nVidia site, http://www.nvidia.com/object/IO_32667.html, the most recent driver that supports this is the 96.xx series. Yet as shown here, http://www.nvnews.net/vbulletin/showthread.php?t=87332, many people have found that the 96.xx series drivers cause graphical corruption when using a GeForce2 IGP.
    Before coming to Arch, I had used Xubuntu 7.04 and managed to compile the last known working drivers, version 87.76, following the instructions here: http://kmandla.wordpress.com/2007/03/25 … 20-12-386/
    That all went well but now I'm using Arch. I tried using the nvidia-96.xx driver in the repos just for testing sake but I still got the same graphical corruption.
    Thus I have been trying to install the 87.76 drivers on Arch, but it always fails at the kernel module building stage. I had first applied this patch here, http://www.nvnews.net/vbulletin/showthr … ost1086669, before compling as the plain driver wont compile against recent kernels.
    Here is the output from the installer:
    nvidia-installer log file '/var/log/nvidia-installer.log'
    creation time: Sun Aug 5 11:57:53 2007
    option status:
    license pre-accepted : false
    update : false
    force update : false
    expert : false
    uninstall : false
    driver info : false
    precompiled interfaces : true
    no ncurses color : false
    query latest version : false
    OpenGL header files : true
    no questions : false
    silent : false
    no recursion : false
    no backup : false
    kernel module only : false
    sanity : false
    add this kernel : false
    no runlevel check : false
    no network : false
    no ABI note : false
    no RPMs : false
    no kernel module : false
    force SELinux : default
    force tls : (not specified)
    X install prefix : (not specified)
    X library install path : (not specified)
    X module install path : (not specified)
    OpenGL install prefix : (not specified)
    OpenGL install libdir : (not specified)
    utility install prefix : (not specified)
    utility install libdir : (not specified)
    doc install prefix : (not specified)
    kernel name : (not specified)
    kernel include path : (not specified)
    kernel source path : (not specified)
    kernel output path : (not specified)
    kernel install path : (not specified)
    proc mount point : /proc
    ui : (not specified)
    tmpdir : /tmp
    ftp mirror : ftp://download.nvidia.com
    RPM file list : (not specified)
    Using: nvidia-installer ncurses user interface
    -> License accepted.
    -> No precompiled kernel interface was found to match your kernel; would you li
    ke the installer to attempt to download a kernel interface for your kernel f
    rom the NVIDIA ftp site (ftp://download.nvidia.com)? (Answer: Yes)
    -> No matching precompiled kernel interface was found on the NVIDIA ftp site;
    this means that the installer will need to compile a kernel interface for
    your kernel.
    -> Performing CC sanity check with CC="cc".
    -> Performing CC version check with CC="cc".
    -> Kernel source path: '/lib/modules/2.6.22-ARCH/build'
    -> Kernel output path: '/lib/modules/2.6.22-ARCH/build'
    -> Performing rivafb check.
    -> Performing nvidiafb check.
    -> Cleaning kernel module build directory.
    executing: 'cd ./usr/src/nv; make clean'...
    rm -f -f nv.o nv-vm.o os-agp.o os-interface.o os-registry.o nv-i2c.o nv.o nv
    -vm.o os-agp.o os-interface.o os-registry.o nv-i2c.o nvidia.mod.o
    rm -f -f build-in.o nv-linux.o *.d .*.{cmd,flags}
    rm -f -f nvidia.{o,ko,mod.{o,c}} nv_compiler.h *~
    rm -f -f stprof stprof.o symtab.h
    rm -f -rf .tmp_versions
    -> Building kernel module:
    executing: 'cd ./usr/src/nv; make module SYSSRC=/lib/modules/2.6.22-ARCH/bui
    ld SYSOUT=/lib/modules/2.6.22-ARCH/build'...
    NVIDIA: calling KBUILD...
    make CC=cc KBUILD_VERBOSE=1 -C /lib/modules/2.6.22-ARCH/build SUBDIRS=/home
    /kris/Source/nVidia GLX 87.76 Driver/NVIDIA-Linux-x86-1.0-8776-pkg1/usr/src/
    nv modules
    test -e include/linux/autoconf.h -a -e include/config/auto.conf || ( \
    echo; \
    echo " ERROR: Kernel configuration is invalid."; \
    echo " include/linux/autoconf.h or include/config/auto.conf are mis
    sing."; \
    echo " Run 'make oldconfig && make prepare' on kernel src to fix it
    echo; \
    /bin/false)
    make[2]: *** No rule to make target `GLX'. Stop.
    NVIDIA: left KBUILD.
    nvidia.ko failed to build!
    make[1]: *** [mdl] Error 1
    make: *** [module] Error 2
    -> Error.
    ERROR: Unable to build the NVIDIA kernel module.
    ERROR: Installation has failed. Please see the file
    '/var/log/nvidia-installer.log' for details. You may find suggestions
    on fixing installation problems in the README available on the Linux
    driver download page at www.nvidia.com.
    Any ideas as to how I can get the kernel module to build?
    I am using 'kernel26 2.6.22.1-4' with the 'kernel-headers 2.6.22.1-1' from the testing repo.
    Last edited by Nameless One (2007-08-10 07:08:38)

    make CC=cc  KBUILD_VERBOSE=1 -C /lib/modules/2.6.22-ARCH/buildSUBDIRS=/home/kris/Source/nVidia GLX 87.76 Driver/NVIDIA-Linux-x86-1.0-8776-pkg1/usr/src/
    The name of the directory you placed the driver in contains spaces. That is  why you get the no rule to make target GLX error.
    It would be better not to circumvent pacman. I am using the following PKGBUILDs for the 8776 driver:
    nvidia-8776:
    pkgname=nvidia-8776
    pkgver=1.0.8776
    _nver=1.0-8776
    _kernver='2.6.22-ARCH'
    pkgrel=1
    pkgdesc="NVIDIA drivers for Arch kernel."
    arch=(i686 x86_64)
    [ "$CARCH" = "i686" ] && ARCH=x86
    [ "$CARCH" = "x86_64" ] && ARCH=x86_64
    url="http://www.nvidia.com/"
    depends=(kernel26 nvidia-8776-utils)
    conflicts=('nvidia' 'nvidia-96xx' 'nvidia-71xx' 'nvidia-legacy')
    install=nvidia.install
    source=(http://download.nvidia.com/XFree86/Linux-$ARCH/${_nver}/NVIDIA-Linux-$ARCH-${_nver}-pkg0.run NVIDIA_kernel-1.0-8776-20061203.diff.txt)
    md5sums=('93ad45fe7b974a5a80348e1890f9b7c9' '70e669f06ee4881c2583261672de292a')
    [ "$CARCH" = "x86_64" ] && md5sums=('f5340e4bbce811add994b1685cdea03b' '70e669f06ee4881c2583261672de292a')
    build()
    # Extract
    cd $startdir/src/
    sh NVIDIA-Linux-$ARCH-${_nver}-pkg0.run --extract-only
    cd NVIDIA-Linux-$ARCH-${_nver}-pkg0
    # Any extra patches are applied in here...
    patch -p0 < $startdir/NVIDIA_kernel-1.0-8776-20061203.diff.txt ||return 1
    cd usr/src/nv/
    ln -s Makefile.kbuild Makefile
    make SYSSRC=/lib/modules/$_kernver/build module || return 1
    # install kernel module
    mkdir -p $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/
    install -m644 nvidia.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/
    sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
    Place the patch (NVIDIA_kernel-1.0-8776-20061203.diff.txt) and nvidia.install in the same directory as the PKGBUILD.
    nvidia-utils:
    pkgname=nvidia-8776-utils
    pkgver=1.0.8776
    _nver=1.0-8776
    pkgrel=1
    pkgdesc="NVIDIA drivers utilities and libraries."
    arch=(i686 x86_64)
    [ "$CARCH" = "i686" ] && ARCH=x86
    [ "$CARCH" = "x86_64" ] && ARCH=x86_64
    url="http://www.nvidia.com/"
    depends=(xorg-server)
    conflicts=('libgl' 'libgl-dri' 'ati-fglrx-utils' 'nvidia-legacy-utils' 'nvidia-71xx-utils' 'nvidia-96xx-utils')
    provides=('libgl' )
    #install=nvidia.install
    source=(http://download.nvidia.com/XFree86/Linux-$ARCH/${_nver}/NVIDIA-Linux-$ARCH-${_nver}-pkg0.run)
    md5sums=('93ad45fe7b974a5a80348e1890f9b7c9')
    [ "$CARCH" = "x86_64" ] && md5sums=('f5340e4bbce811add994b1685cdea03b')
    build()
    # override nvida install routine and do it the long way.
    cd $startdir/src/
    sh NVIDIA-Linux-${ARCH}-${_nver}-pkg0.run --extract-only
    cd NVIDIA-Linux-${ARCH}-${_nver}-pkg0/usr/
    mkdir -p $startdir/pkg/usr/{lib,bin,share/applications,share/pixmaps,man/man1}
    mkdir -p $startdir/pkg/usr/lib/xorg/modules/{extensions,drivers}
    mkdir -p $startdir/pkg/usr/share/licenses/nvidia/
    install `find lib/ -iname \*.so\*` $startdir/pkg/usr/lib/
    install lib/tls/* $startdir/pkg/usr/lib
    install share/man/man1/* $startdir/pkg/usr/man/man1/
    rm $startdir/pkg/usr/man/man1/nvidia-installer.1.gz
    install X11R6/lib/libXv* $startdir/pkg/usr/lib/
    install share/applications/nvidia-settings.desktop $startdir/pkg/usr/share/applications/
    # fix nvidia .desktop file
    sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $startdir/pkg/usr/share/applications/nvidia-settings.desktop
    install share/pixmaps/nvidia-settings.png $startdir/pkg/usr/share/pixmaps/
    install X11R6/lib/modules/drivers/nvidia_drv.so $startdir/pkg/usr/lib/xorg/modules/drivers
    install X11R6/lib/modules/extensions/libglx.so.$pkgver $startdir/pkg/usr/lib/xorg/modules/extensions
    install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $startdir/pkg/usr/bin/
    cd $startdir/pkg/usr/lib/;
    ln -s /usr/lib/libGL.so.$pkgver libGL.so
    ln -s /usr/lib/libGL.so.$pkgver libGL.so.1
    ln -s /usr/lib/libGLcore.so.$pkgver libGLcore.so.1
    ln -s /usr/lib/libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1
    ln -s /usr/lib/libnvidia-tls.so.$pkgver libnvidia-tls.so.1
    cd $startdir/pkg/usr/lib/xorg/modules/extensions;
    ln -s /usr/lib/xorg/modules/extensions/libglx.so.$pkgver libglx.so
    install $startdir/src/NVIDIA-Linux-${ARCH}-${_nver}-pkg0/LICENSE $startdir/pkg/usr/share/licenses/nvidia/
    find $startdir/pkg/usr -type d -exec chmod 755 {} \;
    # phew :)
    Last edited by kappa (2007-08-09 11:14:42)

  • [python] setting a variable in a loaded module from the main script

    Hi,
    I have have two python scripts, one generally controlling my desktop wallpaper, the other downloads the APOD picture from the net and sets it as my wallpaper.
    At the moment I can get the wallpaper script to load the apod script as a module to use its functionality.
    The problem comes when I try to get the module to recognise variables set from the parent script:
    I have both scripts using the variable  'verbose' to control how much output is printed, (which can be set from the command line options).
    How do I get the 'verbose' variable in the imported module to be the same as the variable set by the script?
    I can get it into an imported function using a keyword assignment when called, 'download(verbose=options.verbose)', but this is forgotten when other functions are called.
    I have also tried making it a global variable.
    I assume it is because I am importing the module and setting the default value before the main script sets its value, but I cant see a way round this.
    Any ideas?
    Many thanks,
    Drew

    simplicity:
    test1.py
    #!/usr/bin/python3
    __version__ = 1
    from optparse import OptionParser, OptionGroup, SUPPRESS_HELP
    import test2
    def_msg = 3
    def function1(msg=def_msg):
    print('1 message level here is {0}' .format(msg))
    def function2():
    print('2 message level here is {0}' .format(msg))
    def function3(msg=def_msg):
    msg = def_msg
    print('3 message level here is {0}' .format(msg))
    def function4():
    print('4 message level here is {0}' .format(msg))
    def main(msg=def_msg):
    print('m message level here is {0}' .format(msg))
    function1(msg=msg)
    function2()
    function3()
    function4()
    test2.main(msg=msg)
    function2()
    if __name__ == "__main__":
    parser = OptionParser(usage = "usage: %prog [options] command", version="%prog {0}" .format(__version__),
    description = "Test script 1.")
    parser.set_defaults()
    standard = OptionGroup(parser, "Standard Options")
    ## Standard Options
    standard.add_option("-q", "--quiet",
    action="store_true", dest="quiet", default=False, #help=SUPPRESS_HELP)
    help="only display warnings and errors")
    standard.add_option("-v", "--verbose",
    action="store_true", dest="verbose", default=False, #help=SUPPRESS_HELP)
    help="display all output")
    standard.add_option("--debug",
    action="store_true", dest="debug", default=False, #help=SUPPRESS_HELP)
    help="debug mode: detailed output of commands")
    standard.add_option("--really-quiet",
    action="store_true", dest="reallyquiet", default=False, help=SUPPRESS_HELP)
    #help="only display errors")
    standard.add_option("--silent",
    action="store_true", dest="silent", default=False, help=SUPPRESS_HELP)
    #help="don't display any output")
    parser.add_option_group(standard)
    (options, args) = parser.parse_args()
    ## message level
    if options.debug == True:
    msg = 5
    elif options.verbose == True:
    msg = 4
    elif options.quiet == True:
    msg = 2
    elif options.reallyquiet == True:
    msg = 1
    elif options.silent == True:
    msg = 0
    else:
    msg = 3
    main(msg=msg)
    test2.py
    #!/usr/bin/python3
    __version__ = 1
    from optparse import OptionParser, OptionGroup, SUPPRESS_HELP
    #from test1 import msg
    def_msg = 3
    #msg = 3
    def function1(msg=def_msg):
    print('1 message level here is {0}' .format(msg))
    def function2(msg=def_msg):
    print('2 message level here is {0}' .format(msg))
    def function3():
    print('3 message level here is {0}' .format(msg))
    def main(msg=def_msg):
    #from test1 import msg
    #import test1
    #msg = test1.msg
    print('m message level here is {0}' .format(msg))
    function1(msg=msg)
    function2()
    function3()
    if __name__ == "__main__":
    parser = OptionParser(usage = "usage: %prog [options] command", version="%prog {0}" .format(__version__),
    description = "Test script 2.")
    parser.set_defaults()
    standard = OptionGroup(parser, "Standard Options")
    ## Standard Options
    standard.add_option("-q", "--quiet",
    action="store_true", dest="quiet", default=False, #help=SUPPRESS_HELP)
    help="only display warnings and errors")
    standard.add_option("-v", "--verbose",
    action="store_true", dest="verbose", default=False, #help=SUPPRESS_HELP)
    help="display all output")
    standard.add_option("--debug",
    action="store_true", dest="debug", default=False, #help=SUPPRESS_HELP)
    help="debug mode: detailed output of commands")
    standard.add_option("--really-quiet",
    action="store_true", dest="reallyquiet", default=False, help=SUPPRESS_HELP)
    #help="only display errors")
    standard.add_option("--silent",
    action="store_true", dest="silent", default=False, help=SUPPRESS_HELP)
    #help="don't display any output")
    parser.add_option_group(standard)
    (options, args) = parser.parse_args()
    ## message level
    if options.debug == True:
    msg = 5
    elif options.verbose == True:
    msg = 4
    elif options.quiet == True:
    msg = 2
    elif options.reallyquiet == True:
    msg = 1
    elif options.silent == True:
    msg = 0
    else:
    msg = 3
    main(msg=msg)
    else:
    msg = def_msg
    I think I understand why it gives the results it does when run as 'test1.py -v'
    I was just wondering if there was an easier way to get the second script to take and remember the variable without having to write variable=value into the function call every single time? However this is the only way I have found so far.
    The actual code:
    wallpaper.py:
    #!/usr/bin/python3
    #Filename: wallpaper.py
    __version__ = '6.2.0'
    import os, sys
    from optparse import OptionParser, OptionGroup, SUPPRESS_HELP
    #import warnings
    import random
    #import apod
    ##### CONFIG #####
    ## Global Variables
    root = '/home/wallpaper'
    feh_wallpaper_file = os.path.expanduser('~/.fehbg')
    filter_file = os.path.expanduser('~/.config/openbox/wallpaper/mask')
    config_path = os.path.expanduser('~/.config/openbox/wallpaper')
    list_default = 'default-list'
    list_alt = 'alt-list'
    menu_default = 'menu-folders'
    menu_alt = 'alt-menu'
    lockfile='/tmp/wallpaper.lock'
    valid_list_list = 'alt-list', 'default-list'
    def_msg = 3
    ##### LOCK v2.2 #####
    def LockScript(fun, lock=lockfile, msg=def_msg):
    """Locks the script before starting a function."""
    if msg >= 5:
    print('Lock :: Locking Script')
    from os import O_CREAT, O_EXCL
    try:
    fd = os.open(lock, O_CREAT+O_EXCL)
    if msg >= 5:
    print('Lock :: created lock file')
    except OSError:
    if msg >= 1:
    print('Error :: Already running function {0}...' .format(fun))
    sys.exit(1)
    try:
    fun(msg=msg)
    finally:
    try:
    os.remove(lock)
    if msg >= 6:
    print('Lock :: Removed Lock File')
    except:
    if msg >= 1:
    print('Lock :: Error :: Lockfile missing')
    ##### CURRENT INFO #####
    def get_filter(msg=def_msg):
    """Retrieves the filter."""
    f = open(filter_file, 'r')
    i = f.read()
    f.close()
    if msg >= 6:
    print('Got Filter :: {0}' .format(i))
    return i
    def get_info(msg=def_msg):
    """Returns the path and name of the current wallpaper."""
    with open(feh_wallpaper_file, 'r') as f:
    a = f.read()
    b = a[15:-1]
    f.close()
    name = os.path.basename(b)
    try:
    import apod
    if name == 'apod':
    path = os.path.join(apod.archive_folder, apod.thisyear)
    w = os.listdir(path)
    w.sort()
    wnum = len(w) -1
    name = w[wnum]
    else:
    path = os.path.dirname(b)
    except:
    path = os.path.dirname(b)
    if msg >= 5:
    print('current wallpaper :: {0} {1}' .format(path, name))
    return path, name
    def get_next(c, z, msg=def_msg):
    """Gets the next number in the sequence of length z."""
    if c == (len(z) - 1):
    n = 0
    else:
    n = c + 1
    if msg >= 6:
    print('next number is {0}' .format(n))
    return n
    def get_prev(c, z, msg=def_msg):
    """Gets the previous number in the sequence of length z."""
    if c == 0:
    p = (len(z) - 1)
    else:
    p = c - 1
    if msg >= 6:
    print('previous number is {0}' .format(p))
    return p
    def current_wallpaper_info(msg=def_msg):
    """Print the details of the current wallpaper."""
    name = get_info(msg=msg)[1]
    path = get_info(msg=msg)[0]
    folder = os.path.basename(path)
    mask = get_filter(msg=msg)
    try:
    import apod
    if path.startswith(apod.archive_folder) or name.startswith('APOD'):
    title = apod.get_name(fname=name, msg=msg)
    print('currently the wallpaper is "{0}", {1}' .format(title, name))
    elif not mask == '':
    print('currently the wallpaper is {0} from folder {1} using mask {2}' .format(name, folder, mask))
    else:
    print('currently the wallpaper is {0} from folder {1}' .format(name, folder))
    except:
    print('currently the wallpaper is {0} from folder {1}' .format(name, folder))
    ##### SET WALLPAPER FUNCTIONS #####
    def set_filter(i=None, msg=def_msg, mask_file=filter_file):
    """Sets the filter."""
    if test:
    f = open(mask_file, 'r')
    else:
    f = open(mask_file, 'w')
    if i == None:
    if msg >= 5:
    print('clearing filter')
    if test:
    print('exec :: Clear filter')
    else:
    f.write('')
    else:
    if msg >= 4:
    print('Setting filter as "{0}"' .format(i))
    if test:
    print('exec :: Writing filter as :: "{0}"' .format(i))
    else:
    f.write(i)
    f.close()
    def set_wallpaper(name, path_in=get_info()[0], msg=def_msg):
    """Set the wallpaper."""
    spath = path_in.split(':')
    path = spath[0]
    try:
    mask = spath[1]
    set_filter(mask, msg=msg)
    except:
    pass
    full = os.path.join(path, name)
    if msg >= 4:
    print("setting {0} as wallpaper" .format(name))
    if test:
    print("exec :: feh --bg-scale {0}" .format(full))
    else:
    os.system("feh --bg-scale {0}" .format(full))
    #def set_default(d=default_file):
    # """Sets the default walllpaper."""
    # set_wallpaper(d[1], d[0])
    def set_wallpaper_last(msg=def_msg):
    """Set the wallpaper as the last image."""
    ## alternativly use "eval `cat ~/.fehbg`"
    full = os.path.join(get_info()[0], get_info()[1])
    if msg >= 4:
    print("setting {0} as wallpaper" .format(full))
    if test:
    print("exec :: feh --bg-scale {0}" .format(full))
    else:
    os.system("feh --bg-scale {0}" .format(full))
    def change_folder(folder0, mask=None, msg=def_msg):
    """Change Wallpaper folder (optional filter) relative from root dir."""
    folder_split = folder0.split(':')
    folder = folder_split[0]
    path = os.path.join(root, folder)
    if not os.path.exists(path): # Path does not exist
    if msg >= 1:
    print('Fatal Error :: path does not exist')
    print('avaliable folders are {0}' .format(avaliable_folders()))
    sys.exit()
    if msg >= 4:
    print('changing folder to {0}' .format(folder))
    f1 = os.listdir(path)
    try:
    if folder_split[1]:
    mask = folder_split[1]
    f2 = []
    for i in f1:
    if i.find(mask) > -1:
    f2.append(i)
    f = f2
    if len(f) == 0:
    if msg >= 2:
    print('Warning :: invalid filter')
    raise
    set_filter(mask, msg=msg)
    else: # print('null mask')
    if msg >= 2:
    print('Warning :: null filter')
    raise
    except:
    if msg >= 5:
    print('No filter used, clearing')
    set_filter(msg=msg)
    f = f1
    if len(f) == 0:
    if msg >= 1:
    print('Fatal Error :: no files in path')
    sys.exit()
    r = random.randrange(0,len(f))
    if msg >= 5:
    print('chosing random number:: {0}' .format(r))
    set_wallpaper(f[r], path, msg=msg)
    def avaliable_folders(r=root, msg=def_msg):
    """Returns a list of avaliable folders in the root wallpaper directory."""
    allfolders = os.listdir(r)
    folders = []
    for f in allfolders:
    if not f.startswith("."):
    folders.append(f)
    return folders
    ##### DEFAULT / ALT SEQUENCE LISTS #####
    def strip_opt(p):
    #q1 = p.replace(' ','')
    #q2 = q1.replace('\t','')
    #q3 = q2.replace('\n','')
    q = p.replace(' ','').replace('\t','').replace('\n','')
    return q
    def check_list(l, path=config_path, dl=list_default, al=list_alt, msg=def_msg, returnF=False):
    """Checks to see (and returns) valid path to list."""
    if l == 'default' or l == 'def' or l == None :
    if msg >= 4:
    print('using default list')
    return os.path.join(path, dl)
    elif l == 'alt':
    if msg >= 4:
    print('using alternative list')
    return os.path.join(path, al)
    else:
    try:
    if not os.path.exists(os.path.join(path, l)):
    if msg >= 1:
    print('Error :: list does not exist')
    raise
    elif not os.path.isfile(os.path.join(path, l)):
    if msg >= 1:
    print('Error :: list not a file')
    raise
    else:
    try:
    c = valid_list_list.index(l)
    if msg >= 6:
    print('list name has been validated')
    except:
    if msg >= 2:
    print('Warnimg :: list used has not been vaildated by script')
    print('Warnimg :: if valid; add to the list of valid lists')
    if msg >= 5:
    print('path exists')
    return os.path.join(path, l)
    except:
    if returnF == True:
    return False
    else:
    if msg >= 2:
    print('Warning :: using default list')
    return os.path.join(config_path, dl)
    def get_seq(msg=def_msg):
    """Returns the sequence of current wallpaper and curr position."""
    mask = get_filter(msg=msg)
    path = get_info(msg=msg)[0]
    name = get_info(msg=msg)[1]
    list1 = os.listdir(path)
    if mask == '':
    list0 = list1
    else:
    list2 = []
    for i in list1:
    if i.find(mask) > -1:
    list2.append(i)
    try: # check the filter is currently being used
    num = list2.index(name)
    #print('wallpaper in filtered list')
    list0 = list2
    except: # filter is out of date
    if msg >= 5:
    print('wallpaper not in filtered list... clearing')
    list0 = list1
    set_filter(msg=msg) # clear filter
    list0.sort()
    try: # needed if current wallpaper has been removed
    num = list0.index(name)
    if msg >= 5:
    print('current wallpaper info ::')
    print('name : {0}, number : {1}' .format(name, num))
    return num, list0
    except:
    if msg >= 1:
    print('Error :: get_seq :: Current wallpaper file missing :: name : {0}' .format(name))
    return 0, list0
    def list_sequence(com='next', seq=None, msg=def_msg):
    cname = get_info(msg=msg)[1]
    if seq == None:
    list_dir = get_info(msg=msg)[0]
    list_file = get_seq(msg=msg)[1]
    if msg >= 4:
    print('Changing wallpaper in sequence using current folder:mask')
    else:
    ## Build a list.
    a = check_list(seq, msg=msg)
    list_dir = []
    list_file = []
    with open(a, 'r') as f:
    for line in f:
    i = line.split(',')
    list_dir.append(os.path.join(root, strip_opt(i[0])))
    list_file.append(strip_opt(i[1]))
    set_filter(msg=msg) # flush mask if using a list
    if msg >= 4:
    print('Changing wallpaper in sequence using list file')
    try:
    c = list_file.index(cname)
    if msg >= 5:
    print('found current wallpaper in list at position {0}' .format(c))
    if com == 'random':
    n = random.randrange(0, len(list_file))
    if msg >= 4:
    print('setting random wallpaper from sequence')
    elif com == 'prev':
    n = get_prev(c, list_file)
    if msg >= 4:
    print('setting previous wallpaper in sequence')
    elif com == 'next':
    n = get_next(c, list_file)
    if msg >= 4:
    print('setting next wallpaper in sequence')
    elif com == 'first':
    if msg >= 4:
    print('setting first wallpaper in sequence')
    n = 0
    else:
    if msg >= 2:
    print('Warning :: Unknown commmand')
    n = 0
    except:
    if msg >= 4:
    print('Warning :: not found current wallpaper in list / folder')
    print('using first file in list / folder')
    n = 0
    if seq == None:
    set_wallpaper(list_file[n], list_dir, msg=msg)
    else:
    set_wallpaper(list_file[n], list_dir[n], msg=msg)
    def toggle_list(d='default', com='toggle', msg=def_msg):
    """Removes the current file from the list."""
    a = check_list(d, msg=msg)
    file_list = []
    mod_file = []
    cname = get_info(msg=msg)[1]
    cpath = get_info(msg=msg)[0]
    if os.path.dirname(cpath) == root:
    cdir = os.path.basename(cpath)
    elif os.path.dirname(os.path.dirname(cpath)) == root:
    cdir = os.path.join(os.path.basename(os.path.dirname(cpath)), os.path.basename(cpath))
    else:
    print('error')
    sys.exit()
    cmask = get_filter(msg=msg)
    if cmask == '':
    cdmask = cdir
    else:
    cdmask = '{0}:{1}' .format(cdir, cmask)
    in_list = False
    with open(a) as f:
    for line in f:
    i = line.split(',')
    if cname == strip_opt(i[1]):
    if msg >= 6:
    print('file in list')
    in_list = True
    else:
    if msg >= 6:
    print('file not in list')
    file_list.append(strip_opt(i[1]))
    mod_file.append('{0} , {1} \n' .format(strip_opt(i[0]), strip_opt(i[1])))
    if in_list and com != 'rmfile' :
    if msg >= 3:
    print('Removed file from list')
    if test:
    for j in mod_file:
    print('writing newline: {0}' .format(j))
    else:
    with open(a, 'w') as newf:
    for j in mod_file:
    newf.writelines(j)
    elif not in_list and com != 'addfile':
    mod_file.append('{0} , {1} \n' .format(cdmask, cname))
    if msg >= 3:
    print('Added wallpaper to list')
    if test:
    for j in mod_file:
    print('writing newline: {0}' .format(j))
    else:
    with open(a, 'w') as newf:
    for j in mod_file:
    newf.writelines(j)
    else:
    if com == 'addfile':
    if msg >= 2:
    print('Warning :: File already in list')
    elif com == 'rmfile':
    if msg >= 2:
    print('Warning :: File not in list')
    else:
    if msg >= 1:
    print('Error :: UNKNOWN :: TOG LIST FUNCTION')
    ##### OPENBOX MENU #####
    def gen_obmenu():
    import oblib
    for i in avaliable_folders():
    oblib.item(i, 'wallpaper.py --silent --change {0}' .format(i))
    def gen_obmenu_simple(name=None, i=None):
    import oblib
    if name == None:
    oblib.pipe_start()
    else:
    oblib.menu_start(name, i)
    oblib.item('Deafult', 'wallpaper.py --silent --default')
    oblib.sep()
    oblib.item('APOD', 'wallpaper.py --silent --apod')
    oblib.item('APOD Save', 'wallpaper.py --silent --apod-save')
    oblib.item('Random', 'wallpaper.py --silent --random')
    if name == None:
    oblib.pipe_end()
    else:
    oblib.menu_end()
    def gen_obmenu_standard():
    import oblib
    oblib.pipe_start()
    oblib.item('Deafult', 'wallpaper.py --silent --default')
    oblib.sep()
    oblib.item('APOD', 'wallpaper.py --silent --apod')
    oblib.item('APOD Save', 'wallpaper.py --silent --apod-save')
    oblib.sep()
    oblib.menu_start('Change Set')
    obmenu_change_set()
    oblib.menu_end()
    apod.obmenu_archive_folders(t='menu')
    oblib.item('Toggle List', 'wallpaper.py --silent --toggle')
    oblib.item('Random', 'wallpaper.py --silent --random')
    oblib.pipe_end()
    def gen_obmenu_alt():
    import oblib
    oblib.pipe_start()
    oblib.sep('Alt Menu')
    obmenu_change_set('alt')
    oblib.pipe_end()
    def obmenu_change_set(a='default', dl=menu_default, al=menu_alt):
    import oblib
    menu = check_list(a, dl=dl, al=al, returnF=True)
    if menu != False:
    f = open(menu, 'r')
    for line in f:
    i = line.split(',')
    oblib.item(strip_opt(i[0]), 'wallpaper.py --change {0}' .format(strip_opt(i[1])))
    f.close()
    else:
    for i in avaliable_folders():
    oblib.item(i, 'wallpaper.py --change {0}' .format(i))
    ##### TEST FUNCTIONS #####
    def parser_options():
    print('Options are: {0}' .format(options))
    print('Args are : {0}' .format(args))
    print('Command is : {0}' .format(command))
    def meta_info():
    if options.meta_source == None:
    print('No source specifieed')
    else:
    print('Script launched from source :: {0}' .format(options.meta_source))
    def test_module():
    #pass
    #print(check_list(args[0]))
    new_mod()
    def new_mod():
    #if path == None:
    # print('No path specified, using pwd')
    # path = os.curdir
    #need_new_name = False
    #print('Checking filenames in {0}' .format(path))
    #for name in os.listdir(path):
    # if name.find(" ") > -1:
    # print("Warning :: > < in {0}" .format(name))
    # need_new_name = True
    # if name.find("'") > -1:
    # print("Warning :: >'< in {0}" .format(name))
    # need_new_name = True
    # if name.find("&") > -1:
    # print("Warning :: >&< in {0}" .format(name))
    # need_new_name = True
    # if name.find('"') > -1:
    # print('Warning :: >"< in {0}' .format(name))
    # need_new_name = True
    # if need_new_name:
    # new_name = name.replace('"', "").replace(" ", "_").replace("&", "and").replace("'", "")
    # if re_name:
    # print("Renaming to new name:: {0}" .format(new_name))
    # os.rename(os.path.join(path, name), os.path.join(path, new_name))
    # else:
    # print("Suggested new name:: {0}" .format(new_name))
    # need_new_name = False
    pass
    ##### SANITISE WALLPAPER FILE NAMES #####
    def sane_names(path=None, re_name=False, msg=def_msg):
    """Check file names in a path."""
    if path == None:
    print('No path specified, using pwd')
    path = os.curdir
    need_new_name = False
    print('Checking filenames in {0}' .format(path))
    for name in os.listdir(path):
    if name.find(" ") > -1:
    print("Warning :: > < in {0}" .format(name))
    need_new_name = True
    if name.find("'") > -1:
    print("Warning :: >'< in {0}" .format(name))
    need_new_name = True
    if name.find("&") > -1:
    print("Warning :: >&< in {0}" .format(name))
    need_new_name = True
    if name.find('"') > -1:
    print('Warning :: >"< in {0}' .format(name))
    need_new_name = True
    if need_new_name:
    new_name = name.replace('"', "").replace(" ", "_").replace("&", "and").replace("'", "")
    if re_name:
    print("Renaming to new name:: {0}" .format(new_name))
    os.rename(os.path.join(path, name), os.path.join(path, new_name))
    else:
    print("Suggested new name:: {0}" .format(new_name))
    need_new_name = False
    print('File name check complete')
    ##### MAIN FUNCTION #####
    def Main(msg=def_msg):
    """Chooses which command to run."""
    if options.direction != None: # a dircetion has been set
    list_sequence(com=options.direction, seq=options.whichlist, msg=msg)
    elif command == 'last':
    set_wallpaper_last(msg=msg)
    elif command == 'info':
    current_wallpaper_info(msg=msg)
    ## change folder
    elif options.newfolder != None:
    change_folder(options.newfolder, msg=msg)
    ## apod
    elif command == 'apod':
    #apod.download2(msg=msg, test=test)
    try:
    import apod
    apod.download2(msg=msg, test=test)
    except:
    pass
    elif command == 'apod-save':
    #apod.apod_save('today', msg=msg, test=test)
    try:
    import apod
    apod.apod_save('today', msg=msg, test=test)
    except:
    pass
    ## list management
    elif options.toggle != None:
    toggle_list(options.whichlist, com=options.toggle, msg=msg)
    ## openbox menu
    elif command == 'obmenu':
    gen_obmenu_standard()
    elif command == 'obmenu-simple':
    gen_obmenu_simple()
    elif command == 'obmenu-alt':
    gen_obmenu_alt()
    ## filename check
    elif command == 'sane-name':
    sane_names(path=options.sane_path, re_name=options.sane_rename, msg=msg)
    ## cycle
    elif command == 'cycle':
    print('ERROR :: function not implemented')
    elif command == 'testmod':
    test_module()
    elif options.whichlist != None: # a list but no direction specified
    list_sequence(seq=options.whichlist, msg=msg)
    elif command == "TestNone":
    print('Test mode null op[tion')
    elif command == None: ## no command specified
    pass
    else:
    print('Error :: no valid command found')
    ##### SCRIPT STARTUP #####
    if __name__ == "__main__":
    # def parse_change(option, opt_str, value, parser):
    # parser.values.command = 'change'
    # parser.values.newfolder = value
    # def parse_smask(option, opt_str, value, parser):
    # parser.values.command = 'set-mask'
    # parser.values.mask = value
    def parse_cycle(option, opt_str, value, parser):
    parser.values.command = 'cycle'
    parser.values.interval = value
    def parse_msglevel(option, opt_str, value, parser):
    parser.values.msg = value
    # def parse_addfile(option, opt_str, value, parser):
    # parser.values.command = 'addfile'
    # parser.values.whichlist = value
    # def parse_rmfile(option, opt_str, value, parser):
    # parser.values.command = 'rmfile'
    # parser.values.whichlist = value
    parser = OptionParser(usage = "usage: %prog [options] command", version="%prog {0}" .format(__version__),
    description = "Drews Script to the manage wallpapers using feh.")
    parser.set_defaults(command=None, whichlist=None, direction=None, toggle=None, newfolder=None)
    standard = OptionGroup(parser, "Standard Options")
    metaopt = OptionGroup(parser, "Meta Info Options", "Further datails about the script startup useful for debugging")
    gapod = OptionGroup(parser, "APOD Options", "Controls for the Astronomy Picture of the Day. ")
    obmenu = OptionGroup(parser, "Openbox Menu", "Support for openbox xml menu generation. ")
    #groupalt = OptionGroup(parser, "Alternative Wallpapers")
    gplist = OptionGroup(parser, "List Support")
    namecheck = OptionGroup(parser, "Filename Support")
    direction = OptionGroup(parser, "Direction Commands")
    ## Standard Options
    standard.add_option("-q", "--quiet",
    action="store_true", dest="quiet", default=False, #help=SUPPRESS_HELP)
    help="only display warnings and errors")
    standard.add_option("-v", "--verbose",
    action="store_true", dest="verbose", default=False, #help=SUPPRESS_HELP)
    help="display all output")
    standard.add_option("--debug",
    action="store_true", dest="debug", default=False, #help=SUPPRESS_HELP)
    help="debug mode: detailed output of commands")
    standard.add_option("--really-quiet",
    action="store_true", dest="reallyquiet", default=False, help=SUPPRESS_HELP)
    #help="only display errors")
    standard.add_option("--silent",
    action="store_true", dest="silent", default=False, help=SUPPRESS_HELP)
    #help="don't display any output")
    standard.add_option('-t', "--test",
    action="store_true", dest="test", default=False, #help=SUPPRESS_HELP)
    help="test mode :: only print output")
    standard.add_option("--test-mod",
    action="store_const", const="testmod", dest="command", #help=SUPPRESS_HELP)
    help="test mode :: use test function module")
    standard.add_option("--test-none",
    action="store_const", const="TestNone", dest="command", #help=SUPPRESS_HELP)
    help="test mode :: no command specified")
    parser.add_option("--info", '-i',
    action="store_const", const="info", dest="command",
    help="Displays information about the current wallpaper.")
    parser.add_option("--last", '-l',
    action="store_const", const="last", dest="command",
    help="Sets the wallpaper as the last picture")
    direction.add_option('-n', "--next",
    action="store_const", const="next", dest="direction",
    help="Sets the next wallpaper in the sequence")
    direction.add_option('-p', "--prev", '--previous',
    action="store_const", const="prev", dest="direction",
    help="Sets the previous wallpaper in the sequence")
    direction.add_option('-r', '--rand', "--random",
    action="store_const", const="random", dest="direction",
    help="Sets a random wallpaper from the sequence")
    direction.add_option('-1', '--first', "--safe",
    action="store_const", const="first", dest="direction",
    help="Sets the first wallpaer in the sequence")
    gplist.add_option('-d', "--default",
    action="store_const", const="default", dest="whichlist",
    help="Uses the wallpapers from the default file list")
    gplist.add_option("--alt",
    action="store_const", const="alt", dest="whichlist",
    help="Uses the wallpapers from the alternative list")
    parser.add_option("--change", '-c',
    metavar="Folder[:Filter]", dest="newfolder",
    help="Changes the wallpaper folder, optional filter.")
    gapod.add_option('-a', "--apod",
    action="store_const", const="apod", dest="command",
    help="downloads and sets the wallpaper as todays APOD picture")
    gapod.add_option("--apod-save",
    action="store_const", const="apod-save", dest="command",
    help="Saves todays APOD picture")
    # gapod.add_option("--apod-last",
    # action="store_const", const="apod-last", dest="command",
    # help="Sets the wallpaper as yesterdays APOD picture")
    # gapod.add_option("--apod-force",
    # action="store_const", const="apod-force", dest="command",
    # help="force the download of todays APOD picture")
    gplist.add_option("--add-to-list",
    action="store_const", const='rmfile', dest='toggle',
    help="Adds the current wallpaper to the list.")
    gplist.add_option("--remove-from-list",
    action="store_const", const='addfile', dest='toggle',
    help="Removes the current wallpaper from a list.")
    gplist.add_option("--toggle-list", '--toggle',
    action="store_const", const='toggle', dest='toggle',
    help="Adds/Removes the current wallpaper from a list.")
    gplist.add_option("--list",
    metavar="LIST", dest='whichlist',
    help="Sets which list to use.")
    obmenu.add_option("--obmenu",
    action="store_const", const="obmenu", dest="command",
    help="Prints the standard openbox menu.")
    obmenu.add_option("--obmenu-simple",
    action="store_const", const="obmenu-simple", dest="command",
    help="Prints the simple openbox menu.")
    obmenu.add_option("--obmenu-alt",
    action="store_const", const="obmenu-alt", dest="command", #help=SUPPRESS_HELP)
    help="Prints the alternative openbox menu.")
    namecheck.add_option("--name-check",
    action="store_const", const="sane-name", dest="command",
    help="Checks if wallpaper names are valid.")
    namecheck.add_option("--name-path",
    metavar="PATH", dest="sane_path", default=None,
    help="Which folder to check.")
    namecheck.add_option("--rename",
    action="store_true", dest="sane_rename", default=False,
    help="If to rename invalid files.")
    metaopt.add_option("--meta-from",
    metavar="Source", dest='meta_source', default=None,
    help="Details from where the script was launched from")
    parser.add_option_group(direction)
    parser.add_option_group(gplist)
    parser.add_option_group(gapod)
    parser.add_option_group(obmenu)
    #parser.add_option_group(standard)
    #parser.add_option_group(metaopt)
    #parser.add_option_group(namecheck)
    (options, args) = parser.parse_args()
    test = options.test
    #debug = options.debug
    #verbose = options.verbose
    #quiet = options.quiet
    ## message level
    if options.debug == True:
    msg = 5
    elif options.verbose == True:
    msg = 4
    elif options.quiet == True:
    msg = 2
    elif options.reallyquiet == True:
    msg = 1
    elif options.silent == True:
    msg = 0
    else:
    msg = 3
    #if options.command == None:
    # try: # try and find a command
    # command = args[0]
    # except:
    # pass
    #else:
    # command = options.command
    command = options.command
    if options.debug:
    parser_options()
    meta_info()
    LockScript(Main, msg=msg) # start the script
    else:
    pass
    apod.py
    #!/usr/bin/python3
    #Filename: apod.py
    __version__ = '3.2.0'
    import os, sys
    from optparse import OptionParser, OptionGroup, SUPPRESS_HELP
    import shutil
    from datetime import date
    #print('loaded apod')
    ##### VARIABLES #####
    ## Files and Paths
    #apod_archive_folder = '/home/wallpaper/apod_archive'
    archive_folder = '/home/wallpaper/apod_archive'
    save_folder = '/home/wallpaper/Space'
    tmpdir = '/tmp/wallpaper/apod'
    html_file = os.path.join(tmpdir, 'apod-html')
    img_file = os.path.join(tmpdir, 'apod-img')
    index_file = os.path.join(tmpdir, 'apod-index')
    work = os.path.expanduser('~/.config/openbox/apod')
    date_file = os.path.join(work, 'apod-date')
    apodfile = os.path.join(work, 'apod')
    apodlast = os.path.join(work, 'apod-last')
    namefile = os.path.join(work, 'apod-names')
    video_dir = os.path.join(work, 'apod-videos')
    errs = os.path.join(work, 'archive-errors')
    dtoday = str(date.today()) # todays date
    thisyear = dtoday[:4]
    saveprefix = 'APOD-'
    ## Defaults
    def_test = False
    def_msg = 3
    def_command = None
    def_apodset = True
    def_archive_apod = True # Keep all APOD pictures
    def_clear_apod = False
    def_force_apod = False
    def_cutoff = None
    store_file_list = ''
    ##### LOCK v2 #####
    ## Lock v2
    def LockScript(fun, lock='/tmp/apod.lock', msg=def_msg):
    """Locks the script before starting a function."""
    from os import O_CREAT, O_EXCL
    try: # lock the function
    fd = os.open(lock, O_CREAT+O_EXCL)
    #print('created lock file')
    except OSError:
    print('Already running function {0}...' .format(fun))
    sys.exit(1)
    try:
    fun(msg)
    finally:
    try: # release lock
    os.remove(lock)
    except:
    print('Error :: Lockfile missing !!!')
    ##### DEFINITIONS #####
    def get_date(dfile=date_file):
    check_file(dfile, create=True, msg=1)
    f = open(dfile)
    return f.read()
    def check_dir(d, create=False, msg=def_msg):
    """Check if path exists."""
    if not os.path.exists(d):
    if msg > 3:
    print('Error : folder missing...')
    if create:
    try:
    os.makedirs(d)
    if msg > 3 :
    print('...created folder')
    return True
    except:
    print('Fatal Error :: could not create directory {0}' .format(d))
    sys.exit()
    else:
    return False
    elif not os.path.isdir(d):
    print('Fatal Error :: this is not a directory')
    sys.exit()
    else:
    return True
    def check_file(f, create=False, msg=def_msg):
    """Check if path exists."""
    if not os.path.exists(f):
    #if msg > 3:
    # print('Error : file missing...')
    if create:
    check_dir(os.path.dirname(f), create=create, msg=msg)
    if msg > 5:
    print('creating file {0}' .format(f))
    try:
    q = open(f, 'w')
    q.write('')
    q.close()
    return True
    except:
    if msg >= 1:
    print('Fatal Error :: could not create file {0}' .format(f))
    sys.exit()
    else:
    if msg >= 5:
    print('file {0} does not exist' .format(f))
    return False
    else:
    if msg >= 5:
    print('file {0} exists' .format(f))
    return True
    def copy_file(ffrom, fto, msg=def_msg, test=def_test):
    """Copy files, from to (with test option)."""
    if test:
    print('[[copy command: {0} to {1}]]' .format(ffrom, fto))
    else:
    try:
    shutil.copy(ffrom, fto)
    except:
    if not os.path.exists(ffrom):
    print('Warning: error copying file, does not exist')
    elif os.path.isdir(ffrom):
    print('Fatal Error :: file being copied is a directory!')
    sys.exit()
    else:
    print('Fatal Error :: UNKNOWN ERROR during copy')
    sys.exit()
    def download_files(hfile=html_file, ifile=img_file, datefile=date_file, msg=def_msg, test=def_test, apodset=def_apodset, day='today', archive_apod=def_archive_apod):
    """Download the APOD html and img."""
    import urllib.request
    import socket
    timeout = 10
    socket.setdefaulttimeout(timeout)
    if day == 'today':
    url = 'http://antwrp.gsfc.nasa.gov/apod/astropix.html'
    name = dtoday
    year = thisyear
    else:
    url = 'http://antwrp.gsfc.nasa.gov/apod/ap{0}.html' .format(day)
    name = day
    if day[:1] == '9' :
    name = '19{0}-{1}-{2}' .format(day[:2], day[2:4], day[4:])
    else:
    name = '20{0}-{1}-{2}' .format(day[:2], day[2:4], day[4:])
    year = name[:4]
    try:
    response = urllib.request.urlopen(url)
    html = response.read()
    if msg > 3:
    print('downloaded html data for {0}' .format(day))
    check_file(hfile, create=True, msg=msg)
    f = open(hfile, 'wb')
    f.write(html)
    f.close()
    except:
    if msg >= 1:
    print('ERROR :: page not found :: exiting.')
    sys.exit(1)
    if day == 'today':
    t = open(datefile, 'w')
    t.write(dtoday)
    t.close()
    if msg > 3:
    print('updated date file with todays date')
    if msg > 3:
    print('copying over yesterdays APOD image')
    copy_file(apodfile, apodlast, msg=msg, test=test)
    found_img = False
    with open(hfile, 'r', encoding='latin-1') as g:
    for line in g:
    if 'IMG SRC' in line:
    i = line.split('"')
    if msg > 4:
    print('found image : {0}' .format(i[1]))
    found_img = True
    try:
    img_responce = urllib.request.urlopen(os.path.join('http://antwrp.gsfc.nasa.gov/apod/', i[1]))
    img_data = img_responce.read()
    except:
    print('error in img download')
    check_dir(errs, create=True, msg=1)
    check_file(os.path.join(errs, name), create=True, msg=0)
    else:
    if msg >= 5:
    print('read img data')
    check_file(ifile, create=True, msg=0)
    if msg >= 5:
    print('created img file')
    with open(ifile, 'wb') as l:
    l.write(img_data)
    if msg >= 3:
    print('downloaded image for {0}' .format(day))
    if day == 'today':
    copy_file(ifile,apodfile, msg=msg, test=test)
    if archive_apod:
    apod_archive(msg=msg, test=test, dfile=ifile, year=year, name=name)
    if not found_img :
    if msg >= 3:
    print('video :: not found image line in file from {0}' .format(i))
    check_file(os.path.join(video_dir, name), create=True, msg=0)
    if day == 'today':
    print('Warning : no image line in html file')
    copy_file(apodlast,apodfile, msg=msg, test=test)
    os.remove(hfile)
    os.remove(ifile)
    def apod_archive(dfile=img_file, msg=def_msg, test=def_test, year=thisyear, name=dtoday):
    """Archive APOD picture."""
    arch_file = os.path.join(archive_folder, year, name)
    check_dir(os.path.join(archive_folder, year), msg=msg, create=True)
    if check_file(arch_file, create=False, msg=msg):
    if msg > 3:
    print('APOD picture already archived')
    else:
    if msg > 3:
    print('Archiving APOD picture')
    copy_file(dfile, arch_file, msg=msg, test=test)
    def apod_save(day='current', sfolder=save_folder, msg=def_msg, test=def_test, prefix=saveprefix):
    """Save APOD picture as best of APOD."""
    with open(os.path.expanduser('~/.fehbg'), 'r') as f:
    a = f.read()
    b = a[15:-1]
    f.close()
    if day == 'today' or b[-4:] == 'apod':
    source = apodfile
    sfile = prefix + dtoday
    elif day == 'current':
    if not (os.path.dirname(b) == archive_folder or os.path.dirname(os.path.dirname(b)) == archive_folder ):
    print('picture is not in the recognised apod archive folder')
    sys.exit()
    source = b
    sfile = prefix+ b[-10:]
    else:
    if msg >= 1:
    print('unknown file specified')
    sys.exit(1)
    if msg > 3:
    print('Saving APOD picture to Save folder')
    copy_file(source, os.path.join(sfolder, sfile), msg=msg, test=test)
    def set_apod(a=apodfile, msg=def_msg, test=def_test, apodset=def_apodset ):
    """Sets the APOD wallpaper."""
    if not apodset:
    if msg > 3:
    print('Skipping setting APOD picture')
    else:
    if msg > 3:
    print('Setting APOD picture')
    if test:
    print("exec :: feh --bg-scale {0}" .format(a))
    else:
    os.system("feh --bg-scale {0}" .format(a))
    def clear_date(msg=def_msg, test=False):
    """Clears the date file."""
    if msg > 3:
    print('reseting date')
    if not test:
    t = open(datefile, 'w')
    t.write('')
    t.close()
    ##### APOD NAMES #####
    def get_name(fname=None, names=namefile, msg=def_msg, rerun=True, prefix=saveprefix):
    """Returns the name of an APOD file."""
    name_index = []
    title_index = []
    with open(names, 'r') as f:
    for line in f:
    i = line.split(',', 3)
    name_index.append(i[0])
    title_index.append(i[3])
    if fname == None:
    if msg >= 4:
    print('getting todays date')
    date = get_date()
    elif fname.startswith(prefix):
    if msg >= 4:
    print('removing save prefix from name')
    date = fname[len(prefix):]
    else:
    date = fname
    try:
    c = name_index.index(date)
    return title_index[c][:-2]
    except:
    if rerun:
    if msg >= 2:
    print('Warning :: name not in index, recreating')
    download_apod_index(msg=msg)
    build_name_list(msg=msg)
    get_name(fname=fname, names=names, msg=msg, rerun=False)
    else:
    if msg >= 1:
    print('Error :: name not in index, please recreate')
    def regen_index(msg=def_msg, cutoff=None):
    download_apod_index(msg=msg)
    build_name_list(msg=msg, cutoff=cutoff)
    def file_status(date, msg=def_msg, cutoff=None):
    """Status of an APOD Picture."""
    downloaded_files = [] # files in main apod download folder
    archive_files = [] # files in sub folder
    archive_download = [] # files from archive download
    videolist = []
    for i in os.listdir(archive_folder):
    if os.path.isdir(os.path.join(archive_folder,i)):
    for j in os.listdir(os.path.join(archive_folder, i)):
    j1 = j[2:]
    j2 = j1.replace('-','')
    archive_files.append(j2)
    else:
    i1 = i[2:]
    i2 = i1.replace('-','')
    downloaded_files.append(i2)
    for i in os.listdir(video_dir):
    videolist.append(i)
    if date[:1] == '9' :
    tdate = '19{0}' .format(date)
    else:
    tdate = '20{0}' .format(date)
    if cutoff == None:
    cutoff = '1995' # apod started 1995 06 16
    if tdate <= cutoff:
    return 'cut-off'
    try:
    downloaded_files.index(date)
    if msg >= 5:
    print('picture has been downloaded')
    return 'downloaded' #print('picture from {0} has already been downloaded' .format(pagedate))
    except:
    pass
    try:
    archive_files.index(date)
    if msg >= 5:
    print('picture has been downloaded')
    return 'archived' #print('picture from {0} has already been downloaded' .format(pagedate))
    except:
    pass
    try:
    archive_download.index(date)
    if msg >= 5:
    print('picture has been downloaded by archive retrieval')
    return 'retrieved'
    except:
    pass
    try:
    videolist.index(date)
    if msg >= 5:
    print('picture is a video')
    return 'video file'
    except:
    if msg >= 5:
    print('picture is missing')
    return 'missing'
    def download_apod_index(msg=def_msg, index=index_file):
    """Downloads the apod index file."""
    import urllib.request
    try:
    response = urllib.request.urlopen('http://antwrp.gsfc.nasa.gov/apod/archivepix.html')
    html = response.read()
    if msg > 3:
    print('downloaded apod index')
    check_file(index, create=True, msg=msg)
    f = open(index, 'wb')
    f.write(html)
    f.close()
    except:
    if msg >= 1:
    print('Fatal Error :: index page not found')
    sys.exit()
    def build_name_list(msg=def_msg, index=index_file, names=namefile, cutoff=None):
    """Builds a name list."""
    check_file(names, create=True, msg=msg)
    data = []
    with open(index, 'r') as f:
    for line in f:
    if '<a href="ap' in line:
    i = line.split(':', 1)
    imgdate = i[1][13:19]
    imgname = i[1][26:-9]
    status = file_status(date=imgdate, msg=msg, cutoff=None)
    if imgdate[:1] == '9' :
    imgfile = '19{0}-{1}-{2}' .format(imgdate[:2], imgdate[2:4], imgdate[4:])
    else:
    imgfile = '20{0}-{1}-{2}' .format(imgdate[:2], imgdate[2:4], imgdate[4:])
    if msg >= 3:
    print('found file : date = {0} : status = {1} : filename = {2}' .format(imgdate, status, imgfile))
    data.append('{0},{1},{2},{3} \n' .format(imgfile, imgdate, status, imgname))
    if msg >= 4:
    print('finished parsing index file')
    with open(namefile, 'w') as newf:
    for j in data:
    newf.writelines(j)
    if msg >= 4:
    print('written new name list')
    ##### MACROS #####
    def download2(msg=def_msg, test=def_test, apodset=def_apodset, force_apod=def_force_apod, clear_apod=def_clear_apod, archive_apod=def_archive_apod):
    """Downloads and sets APOD picture."""
    if clear_apod:
    clear_date(msg=msg, test=test)
    if force_apod:
    if msg >= 3:
    print('download forced')
    if get_date() != dtoday or force_apod:
    download_files(msg=msg, test=test, archive_apod=archive_apod)
    else:
    if msg >= 2:
    print('apod has already been downloaded today')
    set_apod(msg=msg, test=test, apodset=apodset) # #set apod picture
    def archive_download(msg=def_msg, newindex=False, cutoff=None, test=def_test):
    """Search and download missing pictures from the APOD archive pages"""
    if newindex:
    regen_index(msg=msg, cutoff=cutoff)
    target_dates = []
    with open(namefile, 'r') as g:
    for line in g:
    i = line.split(',')
    if i[2] == 'missing':
    if file_status(date=i[1], msg=msg) == 'missing':
    target_dates.append(i[1])
    if msg >= 4:
    print('target list built')
    target_dates.sort()
    for j in target_dates:
    if msg >= 4:
    print('')
    download_files(msg=msg, test=test, day=j, archive_apod=True)
    ##### OPENBOX MENU #####
    def gen_obmenu_standard():
    import oblib
    oblib.pipe_start()
    oblib.item('APOD', 'apod.py --update')
    oblib.item('APOD Save', 'apod.py --save')
    oblib.item('APOD Force', 'apod.py --force')
    oblib.pipe_end()
    def obmenu_archive_folders(t='pipe'):
    import oblib
    years = []
    for i in os.listdir(archive_folder):
    if os.path.isdir(os.path.join(archive_folder,i)):
    years.append(i)
    years.sort()
    years.reverse()
    if t == 'pipe':
    oblib.pipe_start()
    else:
    oblib.menu_start('Apod Archive')
    for k in years:
    oblib.item('Apod: {0}' .format(k), 'wallpaper.py --change {0}/{1}' .format(archive_folder, k))
    if t == 'pipe':
    oblib.pipe_end()
    else:
    oblib.menu_end()
    ##### TEST FUNCTIONS #####
    def parser_options():
    print('Options are: {0}' .format(options))
    print('Args are : {0}' .format(args))
    print('Command is : {0}' .format(options.command))
    def meta_info():
    if options.meta_source == None:
    print('No source specifieed')
    else:
    print('Script launched from source :: {0}' .format(options.meta_source))
    def test_module(msg=def_msg):
    pass
    #gen_obmenu_arfolders()
    #unicode_test()
    #apod_archive_download(msg=msg)
    #print(check_list(args[0]))
    #regen_index(msg=msg)
    #print(get_name(fname=None, msg=msg))
    #print(len(saveprefix))
    ##### MAIN FUNCTION #####
    def Apod_Main(msg=def_msg):
    """Main functions."""
    command = options.command
    check_dir(work, create=True, msg=msg)
    if options.regen_index :
    regen_index(msg=msg, cutoff=options.cutoff)
    if command == None:
    command = 'pass'
    if command == "download":
    if msg > 3:
    print('Updating APOD')
    download2(msg=msg, test=options.test, apodset=options.apodset, force_apod=options.force, clear_apod=options.clear, archive_apod=options.archive)
    elif command == "download-only":
    if msg > 3:
    print('Downloading APOD picture only')
    download2(msg=msg, test=options.test, apodset=False, force_apod=options.force, clear_apod=options.clear, archive_apod=False)
    elif command == "last":
    if msg > 3:
    print('Setting last APOD')
    set_apod(apodlast, msg=msg, test=options.test, apodset=options.apodset)
    elif command == "save-today":
    apod_save('today', msg=msg, test=options.test)
    elif command == "save":
    apod_save('current', msg=msg, test=options.test)
    elif command == "set":
    if msg > 3:
    print('Setting APOD')
    set_apod(msg=msg, test=options.test, apodset=options.apodset)
    elif command == "restore":
    if msg > 3:
    print('Restoreing yesterdays APOD picture.')
    copy_file(apodlast, apodfile, msg=msg, test=options.test)
    set_apod(msg=msg, test=options.test, apodset=options.apodset)
    elif command == 'retrieve':
    archive_download(msg=msg, newindex=options.newindex, cutoff=options.cutoff)
    elif command == 'testmod':
    test_module(msg=msg)
    elif command == "TestNone":
    print('Test mode null op[tion')
    elif command == "pass":
    if msg >= 4:
    print('pass option has been called')
    elif not command == None:
    if msg >= 2:
    print('Warning :: Unrecognised command specified')
    #pass
    else:
    if msg >= 2:
    print('Warning :: no commands found, using default option')
    set_apod(msg=msg, test=options.test, apodset=options.apodset)
    ##### SCRIPT STARTUP #####
    if __name__ == "__main__":
    parser = OptionParser(usage = "usage: %prog [download options] [command]", version="%prog {0}" .format(__version__),
    description = "Script to manage APOD wallpapers.")
    parser.set_defaults(archive=def_archive_apod, apodset=def_apodset, command=None)
    standard = OptionGroup(parser, "Standard Options")
    doptions = OptionGroup(parser, "Download Options")
    aoptions = OptionGroup(parser, "Archive Options")
    metaopt = OptionGroup(parser, "Meta Info Options", "Further datails about the script startup useful for debugging")
    standard.add_option("-q", "--quiet",
    action="store_true", dest="quiet", default=False,
    help="only display warnings and errors")
    standard.add_option("-v", "--verbose",
    action="store_true", dest="verbose", default=False,
    help="display all output")
    standard.add_option("--debug",
    action="store_true", dest="debug", default=False,
    help="debug mode: detailed output of commands")
    standard.add_option("--really-quiet",
    action="store_true", dest="reallyquiet", default=False, help=SUPPRESS_HELP)
    #help="only display errors")
    standard.add_option("--silent",
    action="store_true", dest="silent", default=False, help=SUPPRESS_HELP)
    #help="don't display any output")
    standard.add_option('-t', "--test",
    action="store_true", dest="test", default=False, help=SUPPRESS_HELP)
    #help="test mode :: only print output")
    standard.add_option("--test-mod",
    action="store_const", const="testmod", dest="command", help=SUPPRESS_HELP)
    #help="test mode :: use test function module")
    standard.add_option("--test-none", "--pass",
    action="store_const", const="TestNone", dest="command", help=SUPPRESS_HELP)
    #help="test mode :: no command specified")
    parser.add_option('-a', '-u', '--update',
    action="store_const", const="download", dest="command",
    help="Downloads and sets the wallpaper as todays APOD picture")
    parser.add_option("--save",
    action="store_const", const="save", dest="command",
    help="Saves the curent APOD wallpaper")
    parser.add_option("--set",
    action="store_const", const="set", dest="command",
    help="Sets wallpaper as APOD")
    parser.add_option('--download-only',
    action="store_const", const="download-only", dest="command",
    help="Only downloads todays APOD picture")
    parser.add_option("--last",
    action="store_const", const="last", dest="command",
    help="Sets the wallpaper as yesterdays APOD picture")
    parser.add_option("--restore",
    action="store_const", const="restore", dest="command", help=SUPPRESS_HELP)
    #help="Restores yesterdays APOD picture as todays.")
    aoptions.add_option("--retrieve", '--populate',
    action="store_const", const="retrieve", dest="command",
    help="Retrives archive APOD images from the APOD archive")
    aoptions.add_option("--regen-index",
    action="store_true", dest="regen_index", default=False,
    help="Regenerates the APOD index file")
    aoptions.add_option("--no-index",
    action="store_false", dest="newindex", default=True, help=SUPPRESS_HELP)
    #help="Do not build a nex index")
    aoptions.add_option("--cut-off",
    metavar="Date", dest='cutoff', default=def_cutoff,
    help="Cut off date for downloading archive pictures")
    # parser.add_option("--get-name",
    # metavar="NAME", dest="getname", default=None,
    # help="Returns the name of a pictures name")
    doptions.add_option("--force",
    action="store_true", dest="force", default=def_force_apod,
    help="Force the download of todays APOD picture")
    doptions.add_option("--clear",
    action="store_true", dest="clear", default=def_clear_apod, help=SUPPRESS_HELP)
    #help="resets the date of last APOD download.")
    doptions.add_option("--archive",
    action="store_true", dest="archive",
    help="If to archive a picture after download")
    doptions.add_option("--no-archive",
    action="store_false", dest="archive",
    help="If to archive a picture after download")
    doptions.add_option("--force-set",
    action="store_true", dest="apodset", help=SUPPRESS_HELP)
    #help="If to set the wallpaper as APOD.")
    doptions.add_option("--no-set",
    action="store_false", dest="apodset", help=SUPPRESS_HELP)
    #help="Skips setting APOD as wallpaper")
    metaopt.add_option("--meta-from",
    metavar="Source", dest='meta_source', default=None,
    help="Details from where the script was launched from")
    parser.add_option_group(doptions)
    parser.add_option_group(aoptions)
    parser.add_option_group(standard)
    #parser.add_option_group(metaopt)
    (options, args) = parser.parse_args()
    ## message level
    if options.debug == True:
    msg = 5
    elif options.verbose == True:
    msg = 4
    elif options.quiet == True: # warnings
    msg = 2
    elif options.reallyquiet == True: # errors only
    msg = 1
    elif options.silent == True: # no output
    msg = 0
    else:
    msg = 3
    if options.debug:
    parser_options()
    meta_info()
    LockScript(Apod_Main, msg=msg)

  • Building kernel module, works only fine with default kernel26-headers

    I am trying to build the phc-k8 package from the AUR.
    I had to adapt the PKGBUILD a bit. The problem is it seems to want to have certain headers (a lot of headers, actually) in asm/ that are present in asm-generic/ in the kernel26-headers package and are in the same location in my own kernel package (which doesn't have the headers split out).
    This is how the asm* directories look:
    [stijn@hermes phc-k8]$ ls /usr/src/linux-2.6.32-ARCH/include/asm*
    /usr/src/linux-2.6.32-ARCH/include/asm:
    asm-offsets.h bitsperlong.h
    /usr/src/linux-2.6.32-ARCH/include/asm-generic:
    4level-fixup.h bugs.h dma-mapping-common.h ioctl.h local.h param.h sections.h stat.h uaccess.h
    atomic64.h cacheflush.h emergency-restart.h ioctls.h memory_model.h parport.h segment.h string.h uaccess-unaligned.h
    atomic.h cache.h errno-base.h io.h mman-common.h pci-dma-compat.h sembuf.h swab.h ucontext.h
    atomic-long.h checksum.h errno.h iomap.h mman.h pci.h serial.h syscall.h unaligned.h
    audit_change_attr.h cmpxchg.h fb.h ipcbuf.h mm_hooks.h percpu.h setup.h syscalls.h unistd.h
    audit_dir_write.h cmpxchg-local.h fcntl.h irqflags.h mmu_context.h pgalloc.h shmbuf.h system.h user.h
    audit_read.h cputime.h futex.h irq.h mmu.h pgtable.h shmparam.h termbits.h vga.h
    audit_signal.h current.h getorder.h irq_regs.h module.h pgtable-nopmd.h siginfo.h termios-base.h vmlinux.lds.h
    audit_write.h delay.h gpio.h Kbuild msgbuf.h pgtable-nopud.h signal-defs.h termios.h xor.h
    auxvec.h device.h hardirq.h Kbuild.asm mutex-dec.h poll.h signal.h timex.h
    bitops div64.h hw_irq.h kdebug.h mutex.h posix_types.h socket.h tlbflush.h
    bitops.h dma-coherent.h ide_iops.h kmap_types.h mutex-null.h resource.h sockios.h tlb.h
    bitsperlong.h dma.h int-l64.h libata-portmap.h mutex-xchg.h rtc.h spinlock.h topology.h
    bug.h dma-mapping-broken.h int-ll64.h linkage.h page.h scatterlist.h statfs.h types.h
    /usr/src/linux-2.6.32-ARCH/include/asm-x86:
    asm-offsets.h bitsperlong.h
    [stijn@hermes phc-k8]$ ls /usr/src/linux-2.6.31.12-server/include/asm*
    /usr/src/linux-2.6.31.12-server/include/asm:
    asm-offsets.h
    /usr/src/linux-2.6.31.12-server/include/asm-generic:
    4level-fixup.h bugs.h dma-mapping-common.h ioctl.h local.h param.h sections.h stat.h uaccess.h
    atomic64.h cacheflush.h emergency-restart.h ioctls.h memory_model.h parport.h segment.h string.h uaccess-unaligned.h
    atomic.h cache.h errno-base.h io.h mman-common.h pci-dma-compat.h sembuf.h swab.h ucontext.h
    atomic-long.h checksum.h errno.h iomap.h mman.h pci.h serial.h syscall.h unaligned.h
    audit_change_attr.h cmpxchg.h fb.h ipcbuf.h mm_hooks.h percpu.h setup.h syscalls.h unistd.h
    audit_dir_write.h cmpxchg-local.h fcntl.h irqflags.h mmu_context.h pgalloc.h shmbuf.h system.h user.h
    audit_read.h cputime.h futex.h irq.h mmu.h pgtable.h shmparam.h termbits.h vga.h
    audit_signal.h current.h getorder.h irq_regs.h module.h pgtable-nopmd.h siginfo.h termios-base.h vmlinux.lds.h
    audit_write.h delay.h gpio.h Kbuild msgbuf.h pgtable-nopud.h signal-defs.h termios.h xor.h
    auxvec.h device.h hardirq.h Kbuild.asm mutex-dec.h poll.h signal.h timex.h
    bitops div64.h hw_irq.h kdebug.h mutex.h posix_types.h socket.h tlbflush.h
    bitops.h dma-coherent.h ide_iops.h kmap_types.h mutex-null.h resource.h sockios.h tlb.h
    bitsperlong.h dma.h int-l64.h libata-portmap.h mutex-xchg.h rtc.h spinlock.h topology.h
    bug.h dma-mapping-broken.h int-ll64.h linkage.h page.h scatterlist.h statfs.h types.h
    /usr/src/linux-2.6.31.12-server/include/asm-x86:
    asm-offsets.h
    Apart from the asm-x86 dir the contents are identical (I checked the file listing of both asm-generic dirs and diff shows no difference between them). If I build the package with the default 2.6.32-ARCH kernel specified, it works. It finds all the headers and it compiles beautifully. However, when I build it with my own kernel (2.6.31.12-server), it spits out a sh*tload of errors (amongst which, in the beginning, all those asm files it can't find):
    [stijn@hermes phc-k8]$ grep bestaat log
    include/linux/linkage.h:5:25: fout: asm/linkage.h: Bestand of map bestaat niet
    include/linux/types.h:4:23: fout: asm/types.h: Bestand of map bestaat niet
    include/linux/posix_types.h:47:29: fout: asm/posix_types.h: Bestand of map bestaat niet
    include/linux/bitops.h:17:24: fout: asm/bitops.h: Bestand of map bestaat niet
    include/linux/param.h:4:23: fout: asm/param.h: Bestand of map bestaat niet
    include/linux/kernel.h:20:27: fout: asm/byteorder.h: Bestand of map bestaat niet
    include/linux/kernel.h:21:21: fout: asm/bug.h: Bestand of map bestaat niet
    include/linux/kernel.h:62:24: fout: asm/div64.h: Bestand of map bestaat niet
    include/linux/errno.h:4:23: fout: asm/errno.h: Bestand of map bestaat niet
    include/linux/prefetch.h:14:27: fout: asm/processor.h: Bestand of map bestaat niet
    include/linux/prefetch.h:15:23: fout: asm/cache.h: Bestand of map bestaat niet
    include/linux/list.h:7:24: fout: asm/system.h: Bestand of map bestaat niet
    include/linux/string.h:21:24: fout: asm/string.h: Bestand of map bestaat niet
    include/linux/thread_info.h:56:29: fout: asm/thread_info.h: Bestand of map bestaat niet
    include/linux/smp.h:36:21: fout: asm/smp.h: Bestand of map bestaat niet
    include/linux/stat.h:6:22: fout: asm/stat.h: Bestand of map bestaat niet
    include/linux/spinlock_types.h:13:33: fout: asm/spinlock_types.h: Bestand of map bestaat niet
    include/linux/spinlock.h:88:27: fout: asm/spinlock.h: Bestand of map bestaat niet
    include/linux/spinlock.h:364:24: fout: asm/atomic.h: Bestand of map bestaat niet
    include/linux/wait.h:26:25: fout: asm/current.h: Bestand of map bestaat niet
    include/linux/mmzone.h:20:22: fout: asm/page.h: Bestand of map bestaat niet
    include/linux/rwsem.h:22:65: fout: asm/rwsem.h: Bestand of map bestaat niet
    include/linux/topology.h:34:26: fout: asm/topology.h: Bestand of map bestaat niet
    include/linux/elf.h:7:21: fout: asm/elf.h: Bestand of map bestaat niet
    include/linux/module.h:20:23: fout: asm/local.h: Bestand of map bestaat niet
    include/linux/module.h:22:24: fout: asm/module.h: Bestand of map bestaat niet
    include/linux/device.h:26:24: fout: asm/device.h: Bestand of map bestaat niet
    include/linux/timex.h:170:23: fout: asm/timex.h: Bestand of map bestaat niet
    include/linux/kmemtrace.h:12:31: fout: trace/events/kmem.h: Bestand of map bestaat niet
    include/linux/auxvec.h:4:24: fout: asm/auxvec.h: Bestand of map bestaat niet
    include/linux/mm_types.h:16:21: fout: asm/mmu.h: Bestand of map bestaat niet
    include/linux/sched.h:65:24: fout: asm/ptrace.h: Bestand of map bestaat niet
    include/linux/sched.h:66:25: fout: asm/cputime.h: Bestand of map bestaat niet
    include/linux/ipc.h:21:24: fout: asm/ipcbuf.h: Bestand of map bestaat niet
    include/linux/sem.h:35:24: fout: asm/sembuf.h: Bestand of map bestaat niet
    include/linux/signal.h:4:24: fout: asm/signal.h: Bestand of map bestaat niet
    include/linux/signal.h:5:25: fout: asm/siginfo.h: Bestand of map bestaat niet
    include/linux/percpu.h:10:24: fout: asm/percpu.h: Bestand of map bestaat niet
    include/linux/seccomp.h:8:25: fout: asm/seccomp.h: Bestand of map bestaat niet
    include/linux/resource.h:71:26: fout: asm/resource.h: Bestand of map bestaat niet
    include/linux/io.h:22:20: fout: asm/io.h: Bestand of map bestaat niet
    include/linux/delay.h:14:23: fout: asm/delay.h: Bestand of map bestaat niet
    /home/stijn/pkgbuilds/phc-k8/src/phc-k8_v0.4.2/phc-k8.c:39:21: fout: asm/msr.h: Bestand of map bestaat niet
    include/acpi/platform/aclinux.h:64:22: fout: asm/acpi.h: Bestand of map bestaat niet
    include/linux/ioctl.h:4:23: fout: asm/ioctl.h: Bestand of map bestaat niet
    include/linux/fcntl.h:4:23: fout: asm/fcntl.h: Bestand of map bestaat niet
    'Fout' meaning 'error' and 'Bestand of map bestaat niet' 'File or directory does not exist'.
    This is how the PKGBUILD looks:
    # Contributor: fs4000 <matthias_dienstbier[at]yahoo[dot]de>
    pkgname=phc-k8-server
    pkgver=0.4.2
    _kernver="2.6.31.12-server"
    pkgrel=1
    pkgdesc="frequency driver for AMD K8 with undervolting feature"
    url="http://www.linux-phc.org"
    arch=('i686' 'x86_64')
    license=('GPL')
    [ `uname -r` = 2.6.32-ARCH ] && makedepends=('kernel26-headers=2.6.32')
    provides=('linux-phc')
    [ "$pkgname" = "phc-k8" ] && backup=('etc/modprobe.d/phc-k8.conf')
    install=phc-k8.install
    source=(phc-k8-$pkgver.tar.gz::$url/forum/download/file.php?id=83)
    depends=(kernel26server)
    build() {
    sed "s/depmod.*/depmod $_kernver/" -i ../$install
    cd phc-k8_v$pkgver
    sed -i 's# /etc/modprobe.d/phc-k8.conf# ${DESTDIR}/etc/modprobe.d/phc-k8.conf#' Makefile
    sed -i 's#\([^=]\) /lib/modules/#\1 ${DESTDIR}/lib/modules/#' Makefile
    sed -i 's/^\tdepmod $(KERNELVERSION) -a/#\tdepmod $(KERNELVERSION) -a/' Makefile
    make KERNELSRC=/usr/src/linux-$_kernver/ || return 1
    install -d "$pkgdir/etc/modprobe.d"
    make DESTDIR="$pkgdir" install || return 1
    if [ "$pkgname" = "phc-k8" ]; then
    install -d "$pkgdir/usr/share/doc/phc-k8/"
    install -m644 {Changelog,README} "$pkgdir/usr/share/doc/phc-k8/"
    else
    # delete the config if we build for another kernel
    rm -r "$pkgdir/etc"
    fi
    sha1sums=('3f526f90d0f0a2defa24802787546117fdc3e1e8')
    Any clues?

    It's a bash check ([), it tells the script to add a conditional makedepends (if the kernel has that name, add that package as a dependency to build). It's optional, so it doesn't do any harm.
    Thanks for looking though .

  • [Solved] How to build a module that's not in repos or AUR?

    I am trying to follow the ABS instructions to build a module. I have the source code from GitHub. However, I cannot find anything that says what to do if the module has not already been built somewhere in Arch. It is not in the abs tree and it is not in the AUR. Maybe I just don't understand the ABS instructions, but I seem to need a PKGBUILD to use it. All I have is the source code for the module.
    On Debian, I just run make, then make install. For some reason, that fails in Arch:
    gcc: error: -pg and -fomit-frame-pointer are incompatible
    The recommendations I have found to work around that error say to keep -fomit-frame-pointer and remove -pg. However, -pg is not actually in the Makefile, it is apparently coming from some default location. If I can't find it, I can't remove it.
    In case anyone knows another way to find Arch modules, the one I need is rtl8192du. It is for a USB wireless adapter dongle. https://github.com/lwfinger/rtl8192du
    Tim
    Last edited by ratcheer (2014-06-12 20:49:34)

    Trilby wrote:
    The results of `git describe` will not be sequential (nor monotonically increasing which is really the requirement).  The wiki suggests using tags, if they are present.  But as I rarely use tags myself, I usually use something like the following:
    $(git rev-list --count HEAD).$(git describe --always)
    This does provide the "describe" hash, but before that is a monotonically increasing number so new commits always show as upgrades.
    That fails for me:
    ==> Validating source files with md5sums...
    rtl8192du ... Skipped
    ==> Extracting sources...
    -> Creating working copy of rtl8192du git repo...
    Cloning into 'rtl8192du'...
    done.
    ==> Starting pkgver()...
    /scratch/rtl8192du-git/PKGBUILD: line 20: 251.e627694: command not found

  • [SOLVED] Building VCS packages from AUR fails

    Hello,
    Whenever I try to build a git or svn package from AUR, build fails with the error in a clean chroot enviroment:
    ==> ERROR: Unknown download protocol: svn
    Aborting...
    When the build starts, makepkg actually downloads source files properly. Any clues?
    Last edited by yuan_modu (2015-04-02 16:31:03)

    Trilby wrote:How many packages has this happened with?  Can you give an example of one that produces this error?  If the download proceeds when the build starts, it sounds like the PKGBUILD is outdated and is manually grabbing the source in the build function (in pacman<4.0 style).
    I was building https://aur.archlinux.org/packages/uefi-shell-svn: a popular and up-to-date PKGBUILD.
    Indeed I didn't merge the conf files of  clean chroot. There was a makepkg.conf.pacnew, the lacking part in my old makepkg.conf was:
    VCSCLIENTS=('bzr::bzr'
    'git::git'
    'hg::mercurial'
    'svn::subversion')
    and some small changes. Everything works fine now. Was my bad. Sorry for incovenience and thanks for your help.
    Last edited by yuan_modu (2015-04-02 13:08:21)

  • [SOLVED] Can't build vboxdrv module

    I can't build vboxdrv module with latest kernel 2.6.32.When I run vbox_build_module, I get
    Makefile:152: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again. Stop.
    make[1]: Leaving directory `/opt/VirtualBox/src/vboxdrv'
    make: *** [all] Error 2
    but, when I run
    KERN_DIR=/usr/src/linux-2.6.32-ARCH vbox_build_module
    I get this error
    Makefile:179: *** Error: unable to find the include directory for your current Linux kernel. Specify KERN_INCL=<directory> and run Make again. Stop.
    make[1]: Leaving directory `/opt/VirtualBox/src/vboxdrv'
    make: *** [all] Error 2
    What is the problem here?
    Last edited by na12 (2009-12-31 09:26:34)

    Also using Virtualbox here and was able to build the modules against the new kernel using this procedure:
    Update kernel 31 --> 32
    install kernel26-headers (seems to me you have the wrong kernel-headers package)
    reboot
    rebuild mkinitcpio (KMS)
    reboot
    rebuild vbox modules
    modprobe them or reboot
    Last edited by ulukai (2009-12-31 08:38:07)

  • Where can i download the weblogic modules for apache (source/precompiled)

    I have wandered the wonderfull world of the BEA website for 2 full days now and still am not an inch closer to de download site for the weblogic module for apache. That is, i have apache and need to add the weblogic module to it.
    Complications are Solaris 10 and apache 2.0.55. So the latest versions of OS and webserver. Is there a precompiled module available or can i get the sources somewhere?
    I do have a working module for apache 2.0.53 if someone can confirm that this is supported for 55 that would be fine by me.

    At times when the sources were available I tried to build it on a "new" platform (Solaris x86 32bit) and I can tell you: it's NOTHING that is obvious. Building OpenOffice or Mozilla may appear like an easy task. It took me months to get there and to be able to just build the 'build tools'.
    On top, many of the sources are (historically) written in a Pascal dialect and are transferred to C with an own precompiler so there are three languages used (C, C++ and Pascal)  - so it's a pretty hard (next to impossible) job to learn some algorithms from those sources.
    See also here:
    http://cjcollier.livejournal.com/177628.html
    http://home.snafu.de/~dittmar/sapdbdev/
    and just to get an idea of the modules and their structure:
    http://home.snafu.de/~dittmar/sapdbdev/sapdbModules.txt
    Markus

  • [cisco VPN] Can't build kernel module with 2.6.9-ARCH

    I need to setup a vpn tunnel to my university in order to gain acces to their resources and be able to surf when I am on the campus. With 2.6.8.1 I used the Cisco VPN client 4.0.5 k9. After my upgrade to 2.6.9 I had to rebuild the module, but now it fails to build. Anyone knows how to solve this? Or does anyone know another vpn client that is compatible with Cisco. This piece of software is essential to me. Please help. Here is the output:
    Cisco Systems VPN Client Version 4.0.5 (Rel) Linux Installer
    Copyright (C) 1998-2001 Cisco Systems, Inc. All Rights Reserved.
    By installing this product you agree that you have read the
    license.txt file (The VPN Client license) and will comply with
    its terms.
    Directory where binaries will be installed [/usr/local/bin] /usr/bin
    Automatically start the VPN service at boot time [yes] no
    In order to build the VPN kernel module, you must have the
    kernel headers for the version of the kernel you are running.
    For RedHat 6.x users these files are installed in /usr/src/linux by default
    For RedHat 7.x users these files are installed in /usr/src/linux-2.4 by default
    For Suse 7.3 users these files are installed in /usr/src/linux-2.4.10.SuSE by default
    Directory containing linux kernel source code [/lib/modules/2.6.9-ARCH/build]
    * Binaries will be installed in "/usr/bin".
    * Modules will be installed in "/lib/modules/2.6.9-ARCH/CiscoVPN".
    * The VPN service will *NOT* be started automatically at boot time.
    * Kernel source from "/lib/modules/2.6.9-ARCH/build" will be used to build the module.
    Is the above correct [y] y
    Making module
    make -C /lib/modules/2.6.9-ARCH/build SUBDIRS=/home/luk/sources/vpnclient modules
    make[1]: Entering directory `/usr/src/linux-2.6.9-ARCH'
    CC [M] /home/luk/sources/vpnclient/interceptor.o
    /home/luk/sources/vpnclient/interceptor.c: In function `add_netdev':
    /home/luk/sources/vpnclient/interceptor.c:59: sorry, unimplemented: inlining failed in call to 'supported_device': function body not available
    /home/luk/sources/vpnclient/interceptor.c:245: sorry, unimplemented: called from here
    make[2]: *** [/home/luk/sources/vpnclient/interceptor.o] Error 1
    make[1]: *** [_module_/home/luk/sources/vpnclient] Error 2
    make[1]: Leaving directory `/usr/src/linux-2.6.9-ARCH'
    make: *** [default] Error 2
    Failed to make module "cisco_ipsec.ko".

    I modified the pkgbuild posted here by someone (thank you!) so it includes all relevant files (meaning also vpnc-connect and vpnc-disconnect and vpnc.conf).
    pkgname=vpnc
    pkgver=0.2
    pkgrel=1
    pkgdesc="Client for Cisco3000 VPN Concentrator"
    url="http://www.unix-ag.uni-kl.de/~massar/vpnc/"
    license="GPL"
    depends=(libgcrypt)
    source=(http://www.unix-ag.uni-kl.de/~massar/vpnc/vpnc-0.2-rm+zomb.1.tar.gz)
    md5sums=(ded67de747874c4245ed8405146dc94a)
    build() {
    cd $startdir/src/vpnc-0.2-rm+zomb.1
    # We want the CFLAGS specified in makepkg.conf to be used
    mv Makefile Makefile.old
    sed -e 's/-W -Wall -O -g/$(MYCFLAGS)/g' -e 's/LDFLAGS=-g /LDFLAGS=/g' Makefile.old > Makefile
    export MYCFLAGS=$CFLAGS
    make
    install -d $startdir/pkg/usr/sbin
    install vpnc $startdir/pkg/usr/sbin
    install vpnc-connect $startdir/pkg/usr/sbin
    install vpnc-disconnect $startdir/pkg/usr/sbin
    install -d $startdir/pkg/etc
    install vpnc.conf $startdir/pkg/etc
    Guess what, it works
    I can reproduce my steps.
    - makepkg
    - pacman -A vpnc-xxxxxx.tar.gz
    - add tun to the daemons array in rc.conf
    - Modify /etc/vpnc.conf
    - vpnc-connect

  • Windows Easy Transfer (WET) Issues with External Hard Drive - "Can't read from the source file or disk"

    I work for Office Depot, in the tech department. Basically, one of our associates was supposed to do a data backup, and re-install Windows 7, then transfer the files back. He used Windows Easy Transfer and compacted everything into a 163 GB file. 
    Now comes the hard part. When we try to put it back on his computer ((drag-and-drop to the desktop) which has been wiped back to factory settings using the recovery partition), it stops at 79.5 GB remaining (you know how it doesn't give you a % of completion,
    it just shows how many GB are remaining) and then says "Can't read from the source file or disk" and gives you an option to try again, or cancel. It gets hung up on the same point each time.
    Normally, this wouldn't be a huge issue, but the contents on the drive are his wife's architect blueprints and interior design stuff, along with wedding photos, etc, which are the only copies they have. On top of those, they have court documents and other
    important files that we are unable to access now.
    I wasn't involved with this transfer, so I'm trying to clean up the mess as best I can. I remembered that the customer's wife was Russian, and had some files typed with a Russian keyboard, so on and so forth. I wonder if that's the issue? If not, I really
    have no idea how to manually extract things from a ".mig" file, or how to diagnose what area is potentially corrupted.
    In light of this situation, we tried using "Recuva" to recover the files post-wipe, but everything was corrupted or unable to be opened, and it also extracted and recovered all of the "useless" photos, such as the skype logos, up and
    down arrows for browsers, etc (it was 160,000+ photos).
    Trying to avoid a potential lawsuit, unhappy customer, and costing the company lots of money to see if professionals can get into this external hard drive.
    Other relevant information:
    We used a Toshiba 500 GB (465 GB) external hard drive.
    Customer's computer is an HP Pavilion P6000 Series (Model No. p6520y) running Windows 7 Home Premium 64-bit Service Pack 1.
    Any other information that is needed can be provided, thanks in advance, and hopefully we can find a solution to this issue quickly!
    -John

    I think there's a lack of understanding somewhere.
    "If you even can't start the process, please unplug it from your new PC. Then head back to your new computer and plug
    the external drive back in to your new computer. "
    Unplug from new, head back to new, plug it back in? That doesn't make much sense! Haha.
    I knew what you meant though, somewhat. When I search through the drives after clicking yes (Has windows easy transfer
    already saved your files blah blah blah) I click on the transfer file and it says "Windows Easy Transfer could not open the file".
    Rather than drag-and-drop the file to the desktop, I now tried to double-click on the file itself while it was plugged
    into the computer. It opened, and it started transferring until it was about 70% completed, and then an error popped up saying "WET can't open the easy transfer file, make sure your USB device is plugged in or check your internet connection". 
    I checked, and the USB hard drive's light wasn't on. Now, I unplug it and plug it back in, and the light comes back on,
    so I click Retry, and it resets the bar back to nothing and says "Transfer time: 1 minute".
    Rather than continue trying, I clicked "Cancel" instead of Retry, and it says "Your transfer did not complete successfully."
    It says to click "view report" for more information, but there's no "view report button".
    At the moment, I am scanning the External Drive for bad sectors using the check disk tool in properties. It's frozen
    at "0 USN bytes processed".

  • Error when extracting data from Data Source

    Hi All,
    I have a Generic datasource in BW which is based on a Function Module.When I am extracting the data from this source in RSA3 it is ending up in Run time error.
    the error message is
    The current ABAP program "SAPLYBWPU" had to be terminated because one of the
    statements could not be executed.
    and the error analysis is
    You wanted to add an entry to table "\FUNCTION-POOL=YBWPU\DATA=GT_HIERTAB2", which you declared with a UNIQUE KEY. However, there was already an entry with the same key.
    This may have been in an INSERT or MOVE statement, or within a
    SELECT ... INTO statement.
    In particular, you cannot insert more than one initial line into a
    table with a unique key using the INSERT INITIAL LINE... statement.
    Can anybody explain me how can I resolve this
    Thanks
    Sreeja

    Hello
    You can refer following link.
    http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/a0f46157-e1c4-2910-27aa-e3f4a9c8df33&overridelayout=true

Maybe you are looking for