Resest Arch Linux to it's factory state?

Over the past months of testing Arch Linux, it has become I mess - I've installed and uninstalled loads of window managers which is making problems for E17, half the programs aren't installed correctly and I have an ill-configured Server and MythTV setup.
So, I decided to re-install Arch Linux and start from scratch again (this time, I know what I'll be doing), the only problem is that I have no Blank CD's. Is there any way I can reset Arch Linux back to it's factory settings?

tomk wrote:
1. List packages in the base (and optionally base-devel) group.
2. pacman -Rscn all installed packages that are not in that list.
3. There is no 3.
/me wonders where the Arch factory is.....
eh this has been an issue for ever and ever. There are packages which make config files in /etc and other root folders ..samba is an example which used to do it and if you have edited some .conf files (in the past and then forgotten) then when you do "pacman -Rscn samba" it will not delete the .conf file (this is how it is supposed to be) But then there is no effective way to clean the littered configuration files from these important folders.
I have been trying to figure this for years here but there has not been any smooth solutions.
P.S I do know deleting user edited .conf files is a horrible idea...but what I was hoping is to find some viable way of cleaning the system with a BIG disclaimer, but the problem is that as soon as you edit these files pacman stops managing these files and disassociates the files from the package. All i wish is for an option.
P.P.S maybe brtfs snapshot will be a solution where you can go back to the clean install.
P.P.P.S Seems pacman tips page has been updated since I last used it, I am thinking it has a comprehensive list of tips to get to factory state. Still not very easy ...but hey this is Arch
Last edited by venky80 (2011-12-19 20:57:03)

Similar Messages

  • Backpac: A package state snapshot and restore tool for Arch Linux

    backpac:
    A package state snapshot and restore tool for Arch Linux with config file save/restore support.
    https://aur.archlinux.org/packages.php?ID=52957
    https://github.com/altercation/backpac (see readme on the github repository for more information)
    Summary & Features
    It's a common method of setting up a single system: take some notes about what packages you've installed, what files you've modified.
    Backpac creates those notes for you and helps back up important configuration files. Specifically, backpac does the following:
    maintains a list of installed groups (based on 80% of group packages being installed)
    maintains a list of packages (including official and aur packages, listed separately)
    maintains a list of files (manually created)
    backs up key config files as detailed in the files list you create
    The package, group and files lists along with the snapshot config files allows system state to be easily committed to version control such as git.
    Backpac can also use these lists to install packages and files. Essentially, then, backpac takes a snapshot of your system and can recreate that state from the files and lists it archives.
    Use Cases
    Ongoing system state backup to github
    Quick install of new system from existing backpac config
    Conform current system to given state in backpac config
    Backpac is a very, very lightweight way of saving and restoring system state.
    It's not intended for rolling out and maintaining multiple similar systems, it's designed to assist individual users in the maintainance of their own Arch Linux box.
    Status
    Alpha, release for testing among those interested. Passing all tests right now but will continue to rework and refine. Bug reports needed.
    Why?
    There are a lot of 'big-iron' solutions to maintaining, backing up and restoring system state. Setting these up for a single system or a handful of personal systems has always seemed like overkill.
    There are also some existing pacman list making utilities around, but most of them seem to list either all packages or don't separate the official and aur packages the way I wanted. Some detect group install state, some don't. I wanted all these features in backpac.
    Finally, whatever tool I use, I'd like it to be simple (c.f. the Arch Way). Lists that are produced should be human readable, human maintainable and not different from what I'm using in non-automated form. Backpac fulfills these requirements.
    Regarding files, I wanted to be able to backup arbitrary system files to a git repository. Tools like etckeeper are interesting but non /etc files in that case aren't backed up (without some link trickery) and there isn't any automatic integration with pacman, so there is no current advantage to using a tool like that. I also like making an explicit list of files to snapshot.
    Sample Output
    This is the command line report. Additionally, backpac saves this information to the backpac groups, packages and files lists and the files snapshot directory.
    $ backpac -Qf
    backpac
    (-b) Backups ON; Files will be saved in place with backup suffix.
    -f Force mode ON; No prompts presented (CAUTION).
    (-F) Full Force mode OFF; Prompt displayed before script runs.
    (-g) Suppress group check OFF; Groups will be checked for currency.
    (-h) Display option and usage summary.
    (-p) Default backpac: /home/es/.config/backpac/tau.
    -Q Simple Query ON; Report shown; no changes made to system.
    (-R) Auto-Remove OFF; Remove/Uninstall action default to NO.
    (-S) System update OFF; No system files will be updated.
    (-U) backpac config update OFF; backpac files will not be updated.
    Sourcing from backpac config directory: /home/es/.config/backpac/tau
    Initializing.................Done
    GROUPS
    ============================================================================
    /home/es/.config/backpac/tau/groups
    GROUPS UP TO DATE: group listed in backpac and >80% local install:
    base base-devel xfce4 xorg xorg-apps xorg-drivers xorg-fonts
    GROUP PACKAGES; MISSING?: group member packages not installed:
    (base: nano)
    (xfce4: thunar xfdesktop)
    PACKAGES
    ============================================================================
    /home/es/.config/backpac/tau/packages
    PACKAGES UP TO DATE: packages listed in backpac also installed on system:
    acpi acpid acpitool aif alsa-utils augeas cowsay cpufrequtils curl dialog
    firefox gamin git ifplugd iw mesa mesa-demos mutt netcfg openssh rfkill
    rsync rxvt-unicode sudo terminus-font vim wpa_actiond wpa_supplicant_gui
    xmobar xorg-server-utils xorg-twm xorg-utils xorg-xclock xorg-xinit xterm
    yacpi yajl youtube-dl zsh
    AUR UP TO DATE: aur packages listed in backpac also installed on system:
    flashplugin-beta freetype2-git-infinality git-annex haskell-json
    package-query-git packer wpa_auto xmonad-contrib-darcs xmonad-darcs
    AUR NOT IN backpac: installed aur packages not listed in backpac config:
    yaourt-git
    FILES
    ============================================================================
    /home/es/.config/backpac/tau/files
    MATCHES ON SYSTEM/CONFIG:
    /boot/grub/menu.lst
    /etc/acpi/handler.sh
    /etc/rc.conf
    /etc/rc.local

    firecat53 wrote:I think your plan for handling an AUR_HELPER is good. If AUR_HELPER is defined by the user, then either you might need a list of major AUR helpers and their command line switches so you can pick the correct switch for what needs to be done (most use some variation of -S for installing, but not all), or have the user define the correct switch(es) somehow for their chosen AUR helper.
    That's a good idea. I'll add that to my AUR refactoring todo.
    I also found directory tracking to be a weakness in other dotfile managers that I tried. I think you would definitely have to recursively list out the contents of a tracked directory and deal with each file individually. Wildcard support would be nice...I just haven't personally found a use case for it yet.
    I've been thinking that I could just add the directory and scan through it for any non-default attribute files. If those are found then they get automatically added to the files list. That's pretty close to what etckeeper does.
    Edit: I just compiled the dev version and removed my comments for already fixed things...sorry!
    The master branch should have those fixes as well, but I didn't update the version number in the package build. I'll have to do that.
    1. Still apparently didn't handle the escaped space for this item: (the file does exist on my system)
    Ok, good to know. This wildcard directory business will require some new code and refactoring so I'll also rework my filenames handling.
    2. Suggestion: you should make that awesome README into a man page!
    I was working on one (the pkgbuild has a commented out line for the man page) but I had to leave it for later. Definitely want a man page. Once this stabilizes and I'm sure there aren't any big structural changes, I'll convert it to man format.
    3. Suggestion: add the word 'dotfile' into your description somewhere on this page, the github page, and in the package description so people looking for dotfile managers will find it. You could also consider modularizing the script into a dotfile manager and the package manager, so people on other distros could take advantage of your dotfile management scheme.
    I actually have a different script for dotfile management that doesn't touch packages, but there is definitely overlap with this one. That script isn't released yet, though, and if people find this useful for dotfile management that's great. I'll add that in.
    4. Suggestion: since -Q is a read-only operation, why not just make it run with -f automatically to avoid the prompt?
    Originally, running backpac without any command line options produced the Query output. I was concerned that since it is a utility that can potentially overwrite system files, it is important to give users a clear statement prior to execution about what will be done. Since the Query output is essentially the same as the Update and System reports in format and content, I wanted to be explicit about the Query being a passive no-change operation. The current command line options aren't set in stone though. If you feel strongly about it being different, let me know.
    Long answer to a short question
    5. Another suggestion: any thought to providing some sort of 'scrub' function to remove private information from the stored files if desired? This would be cool for publishing public dotfiles to github. Perhaps a credentials file (I did this with python for my own configs). Probably detecting email addresses and passwords without a scrub file would be rather difficult because dotfiles come in so many flavors.
    Yes, absolutely. In fact, if you look at the lib/local file (pretty sure it's in both master and dev branches in this state) you'll see some references to a sanitize function. The idea there is that the user will list out bash associative arrays like this:
    SANITIZE_WPA_=(
    [FILE]='/etc/wpa_supplicant.conf'
    [CMD]='sed s/expungepattern/sanitizedoutput/g'
    Question: am I missing an obvious option to remove a file from the files.d directory if I delete it from the files list? Or do I have to delete it manually? It might be helpful to add a section to the README on how to update and delete dotfiles from being tracked, and also a more detailed description of what the -b option does (and what is actually created when it's not used).
    You are only missing the function I didn't finish. There should be either dummy code or a TODO in the backpac main script referencing garbage collection, which isn't difficult but I just haven't finished it. The idea being another loop of "hey I found these old files in your files.d, mind if I delete them?" It's on my list and I'll try to get it in asap.
    And finally, just out of curiosity, why did you choose to actually copy the files instead of symlink like so many other dotfile managers do?
    git not following symlinks, hardlinks also out for permissions issues (git wouldn't be able to read the files, change them, etc.)
    I definitely would prefer to not make an entire copy of the file, but I haven't come up with a better option. Shout with ideas, though. Also, if there is a way around the link issues I noted above, let me know. I don't see one but that doesn't mean it's not there.
    edit: I think a Seattle area Arch meetup would be cool! Perhaps coffee someplace? Bellevue? U-district? Anyone else? BYOPOL (bring your own pimped out laptop)
    A general meetup sounds good. I was also thinking it would be fun to do a mini archcon with some demos.

  • [SOLVED]Arch Linux / UEFI / BTRFS using Grub2 & Windows 8 in a 2nd HDD

    PROBLEM:
    ====================================================================================
    Dear fellas
    I just purchased an new HP TouchSmart 17.3" laptop that comes with Windows 8.1 pro (1 tb HDD + small SSD for cache only ) and still have space for one more HDD or SSD.
    I Google a lot and read a lot but many questions emerged since seems that no one has the same scenario (maybe I pick the wrong choices) like me.
    The problem is.. I didn't wish to re-install Windows 8.1 since it came with from factory.. so I purchased a 750 gb hdd and put it into the free slot to install Arch Linux in a different HDD.
    As I am not familiar with UEFI what I did was to reorder the hdds. I just put the Windows HDD as second disk and the new disk (For Arch Linux) as primary and changed into Bios from UEFI to compatibility mode and installed Arch Linux into the primary one.
    I reaaaally need help to add to grub the correct "path" to Windows 8.1 disk that came with UEFI..
    Anyone could please help me?
    Thanks in advance!
    ====================================================================================
    SOLUTION:
    A huge thanks to @TheSaint and other users for their help and assistance!
    More sources:
    http://www.kossboss.com/linux---arch-in … -grub-boot
    https://www.youtube.com/watch?v=METZCp_JCec#t=146
    https://bbs.archlinux.org/viewtopic.php … 1#p1390741
    Step by Step Summary:
    Use gdisk to create partitions on /dev/sda:
        - 512MB - EF02 type partition (for EFI boot)
        - 690GB - Linux partition for the BTRFS.
    - Create an EF00 (ESP) with 512mb
    - Create a Linux System partition with the rest of space
    Make the FAT 32 system for EFI boot:
    # mkfs.vfat -F32 /dev/sda1
    Make the BTRFS partition. If it complains about existing filesystems just add a "-f":
    # mkfs.btrfs -L arch -f /dev/sda2
    We will make out a root subvolume for sda1, this will be a folder called root located at the root of sda2. The way we will design this is that When the system boots we will not see /root, we will be inside root. Inside root you will have all of your etc,sys,proc,whatever folders etc.
    # mount /dev/sda2 /mnt
    # cd /mnt
    # btrfs subvolume create /mnt/root
    This should show you your root
    # btrfs subvolume list -a /mnt
    Something like this: ID 256 gen 5 top level 5 path root
    # cd /
    # umount /dev/sda2
    Now we will mount sda2 root subvolume as /mnt and we will dump the arch system into there with pacman. We will also enable compress to utilize btrfs compress feature.
    # mount -o defaults,compress=lzo,subvol=root /dev/sda2 /mnt
    NOTE: the command "mount" will not show which subvolume is mounted, to see how subvolumes are mounted you need to look inside proc (cat /proc/self/mountinfo):
    # cat /proc/self/mountinfo | egrep sda2
    The line for the mount of sda2 looks like this:
    43 21 0:34 /root /mnt rw,relatime shared:30 - btrfs /dev/sda2 rw,compress=zlib,ssd,space_cache
    We can see that the subvolume /root is mounted to /mnt from the device /dev/sda3
    Notice how with regular mount command its missing:
    # mount | egrep sda2
    /dev/sda3 on /mnt type btrfs (rw,relatime,compress=zlib,ssd,space_cache)
    Pacman will dump stuff into a boot folder, so we better mount our sda1 EFI boot partition to it. Or else all of the boot stuff will go to sda3 instead of sda1:
    # cd /
    # pacstrap -i /mnt base base-devel
    Let us create the directory and mount the EFI partition
    # cd /mnt
    # mkdir -p /mnt/boot/efi
    # mount /dev/sda1 /mnt/boot/efi
    Let us generate the FSTAB:
    # genfstab -p /mnt >> /mnt/etc/fstab
    Let us chroot into the arch installation:
    # arch-chroot /mnt /bin/bash
    Change password:
    # passwd
    Then pick the right one like this and associate it with a link to /etc/localtime
    # ln -s /usr/share/zoneinfo/US/Pacific /etc/localtime
    Let us generate the initial RAM disk
    # mkinitcpio -p linux
    Let us setup the bootloader (GRUB)
    # pacman -Syu grub efibootmgr
    Let us generate the grub configuration
    # grub-mkconfig -o /boot/grub/grub.cfg
    Let us install grub into the HDD
    # grub-install /dev/sda
    # umount -R /mnt
    # umount /mnt
    # reboot
    From this step you can go straight and forward with the https://wiki.archlinux.org/index.php/Beginners%27_guide
    Last edited by erickwill (2014-11-21 20:41:06)

    TheSaint wrote:As UEFI BIOS is a boot loader itself. You should make on each HDD an ESP.
    When you want to start win8 you go to BIOS and chose its entry, so will do for Arch the same.
    For this way I suggest you write to boot the kernel directly from the BIOS. It just take some reading on this topic
    Other option you set on you second ESP the boot loader of your liking and it will try to find win8 partition.
    Thanks for your reply.
    For the second option, may I use the compatibility mode and install the booloader into the first partition along with Arch?
    Or in case the first option is still the better option, could you pleaaaase give me some directions from the scratch? Do you have Google Hangout?
    Thanks in advance.
    Last edited by erickwill (2014-11-18 19:54:26)

  • Troubles with HP OfficeJet 6500 E710n-z on Arch Linux

    Recently, I have tried to use my printer after five months break. It used to run smoothly on Arch Linux with hplip. However, now, I have not managed to make it print properly with hplip again. This is my configuration, as seen from the CUPS web interface:
        Driver: HP Officejet 6500 e710n-z hpijs, 3.12.11 (color, 2-sided printing)
        Connection: hp:/net/Officejet_6500_E710n-z?ip=192.168.1.4
    After trying to print some test page, the jobs listing in the CUPS web interface showed me a error message "Filter failed". I deleted my .cups and .hplip directories in my home folder and reinstalled cups and hplip. The same symptoms appeared again after restarting and a fresh installation.
        HP_Officejet_6500_E710n-z-400     Unknown     Withheld     98k     Unknown     pending since Sat 05 Jan 2013 04:22:46 PM CET     "Filter failed"
    My Arch system is up-to-date. I heard that it might have become necessary to install the hplip-plugin somewhen in the last month for some HP printer models. If I understand the table at the bottom of http://hplipopensource.com/hplip-web/mo … 10n-z.html correctly, then the hplip-plugin is neither required nor available for my printer model. I tested also installing it from AUR, just because it was worth a try (https://aur.archlinux.org/packages/hplip-plugin/), but this made matters worse, having my printer to madly produce almost-empty paper with some crap characters at each page top. As expected, the hplip-plugin was a dead-end, and I uninstalled it to continue some experimentation with printing test pages (all on the same page, mind the trees!). Resuming the printer, CUPS prints
    ***** Unable to open the initial device, quitting.
    Looking at the number of hits on Google, this seems to be one of the favourite error messages. I looked at the output in /var/cups/error_log
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Spooler: cups
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Printer: HP_Officejet_6500_E710n-z
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Shell: /bin/bash
    D [05/Jan/2013:16:39:10 +0100] [Job 407] PPD file: /etc/cups/ppd/HP_Officejet_6500_E710n-z.ppd
    D [05/Jan/2013:16:39:10 +0100] [Job 407] ATTR file:
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Printer model: HP Officejet 6500 e710n-z hpijs, 3.12.11
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Job title: Leafpad job 5
    D [05/Jan/2013:16:39:10 +0100] [Job 407] File(s) to be printed:
    D [05/Jan/2013:16:39:10 +0100] [Job 407] <STDIN>
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Ghostscript extra search path ('GS_LIB'): /usr/share/cups/fonts
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Printing system options:
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'number-up=1'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Unknown option number-up=1.
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'job-uuid=urn:uuid:ac6ebe82-17e5-3f8f-49ec-01820c35ea2e'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Unknown option job-uuid=urn:uuid:ac6ebe82-17e5-3f8f-49ec-01820c35ea2e.
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'job-originating-host-name=localhost'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Unknown option job-originating-host-name=localhost.
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'time-at-creation=1357400341'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Unknown option time-at-creation=1357400341.
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'time-at-processing=1357400341'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Unknown option time-at-processing=1357400341.
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Options from the PPD file:
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'InputSlot=Default'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'Quality=FromPrintoutMode'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'MediaType=Plain'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'PageSize=Letter'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'PrintoutMode=Normal'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'DryTime=Zero'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Pondering option 'Duplex=DuplexNoTumble'
    D [05/Jan/2013:16:39:10 +0100] [Job 407] ================================================
    D [05/Jan/2013:16:39:10 +0100] [Job 407] File: <STDIN>
    D [05/Jan/2013:16:39:10 +0100] [Job 407] ================================================
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Filetype: PDF
    D [05/Jan/2013:16:39:10 +0100] [Job 407] PID 28827 (/usr/lib/cups/filter/pdftopdf) exited with no errors.
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Storing temporary files in /var/spool/cups/tmp
    D [05/Jan/2013:16:39:10 +0100] [Job 407] File contains 1 pages
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Starting renderer with command: gs -dFirstPage=1 -q -dBATCH -dPARANOIDSAFER -dQUIET -dNOPAUSE -sDEVICE=ijs -sIjsServer=hpijs -dDEVICEWIDTHPOINTS=612 -dDEVICEHEIGHTPOINTS=792 -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="HP Color LaserJet 2600n" -dDuplex=true -dTumble=false -r300 -sIjsParams=Quality:Quality=0,Quality:ColorMode=2,Quality:MediaType=0,Quality:PenSet=2,PS:MediaPosition=7 -dIjsUseOutputFD -sOutputFile=- /var/spool/cups/tmp/foomatic-3lyFKy
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Starting process "kid3" (generation 1)
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Starting process "kid4" (generation 2)
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Starting process "renderer" (generation 2)
    D [05/Jan/2013:16:39:10 +0100] [Job 407] JCL: %-12345X@PJL
    D [05/Jan/2013:16:39:10 +0100] [Job 407] <job data>
    D [05/Jan/2013:16:39:10 +0100] [Job 407] prnt/hpijs/hpijs.cpp 269: unable to set device=HP Color LaserJet 2600n, err=48
    D [05/Jan/2013:16:39:10 +0100] [Job 407] prnt/hpijs/hpijs.cpp 290: unable to set device=HP Color LaserJet 2600n, err=48
    D [05/Jan/2013:16:39:10 +0100] [Job 407] renderer exited with status 1
    D [05/Jan/2013:16:39:10 +0100] [Job 407] prnt/hpijs/hpijs.cpp 697: unable to read client data err=-2
    D [05/Jan/2013:16:39:10 +0100] [Job 407] Possible error on renderer command line or PostScript error. Check options.Kid3 exit status: 3
    D [05/Jan/2013:16:39:10 +0100] [Job 407] STATE: +connecting-to-device
    D [05/Jan/2013:16:39:10 +0100] [Job 407] PID 28828 (/usr/lib/cups/filter/foomatic-rip) stopped with status 9.
    Indeed, some errors show up. I find it strange that ghostscript is called with a parameter -sDeviceModel="HP Color LaserJet 2600n" -dDuplex=true even though I clearly have an inkjet printer and no laser printer – and also specified the correct printer model. Also later, I can see the two lines
    D [05/Jan/2013:16:39:10 +0100] [Job 407] prnt/hpijs/hpijs.cpp 269: unable to set device=HP Color LaserJet 2600n, err=48
    D [05/Jan/2013:16:39:10 +0100] [Job 407] prnt/hpijs/hpijs.cpp 290: unable to set device=HP Color LaserJet 2600n, err=48
    which to the best of my knowledge indicates some internal mess. Raising the debug level in cups.conf did not tell me anything new.
    Notably, using the hpcups driver at least makes the printer print pages properly, but the wonderful (mind the trees) duplex-mode seems to only be available when using hpijs when selecting the PPD file in the add printer wizard. That is why I want to stay with the driver mentioned above.
    The trouble for me is that the printing pipeline is so complex and so many components are involved that I have no real good starting point to where exactly post bug reports. I would appreciate if some fellows with the same printer and the same errors could confirm my description. Or even point out how to get that organism to paint ink properly on the paper. Any ideas where to start? Or references to better resources regarding the combo of HP OfficeJet 6500 E710n-z and Arch? Is it just an regression bug and will be fixed? Is my system corrupted in some way? There is lots of open questions I don't quite feel able to answer all by myself. Any hints for troubleshooting appreciated!
    Edit:
    After some more reading and troubleshooting, I have filed the following two bug reports at hplip:
    https://bugs.launchpad.net/hplip/+bug/1096418
    https://bugs.launchpad.net/hplip/+bug/1096421
    Last edited by jeadorf (2013-01-05 19:30:19)

    SCAN ISSUE SOLVED!!!!
    I have an HP Photosmart 6500a Plus printer that is connected via USB to a less than 1 year old Dell XPS 8300 tower running Win 7 64bit Home Premium Edition.  The print function worked fine but scans would halt mid-way through the scan and eventually the software would indicate that it had lost connection with the scanner. 
    After EXTENSIVE testing, I determined that the problem was with the Dell tower and NOT THE PRINTER.  I hooked the printer up to a Dell Inspiron mni-tower running Vista and had NO PROBLEM scanning.  I hooked the printer up to a Gateway laptop running Win 7 Pro and had NO PROBLEM scanning.
    On a hunch, I inserted a POWERED USB hub in between the Dell XPS 8300 tower and the HP Photosmart 6500a Plus and was rewarded with a, first time ever on the XPS 8300, complete and flawless scan.
    I surmise that the HP Photosmart 6500a Plus was not getting the required voltage from the USB on the Dell XPS 8300 tower and that was causing the scan to fail.
    WOOHOO!
    Been chasing this one for several months...

  • [Solved]How can I create a bootable backup of my arch linux partition?

    I'm trying to get my arch linux installation to have a gui, specifically KDE. I downloaded Xorg and the nvidia proprietary driver 340.24. After installing the nvidia driver and rebooting, my screen stays black and I can't see my console. I can still login and reboot but I just can't see my screen. I've also tried booting into the arch linux fallback listed in the grub bootloader but that also had a black screen. At this point, I just reinstalled Arch Linux since I didn't really have anything on it anyway but this time I hope not to run into this problem. I will try installing a different driver but if I do run into the same problem, I want to be able to just copy over a backup of my OS and just boot off of that instead of completely reinstalling the system. Thanks in advance.
    Edit: I read up a bit on the dd command and learned that it can effectively copy an entire partition including the master boot record. Could this be the possible solution? I just wanted to post this edit here to make sure.
    Last edited by Firephyz (2014-07-19 20:06:00)

    Backing up using dd
    When you clone your entire disk the MBR will also be copied over. The wiki just states you can back up just the MBR itself if need be.
    I strongly do not recommend just reinstalling your system in the future unless it's needed, you learn nothing from it and it can drive away other users from helping you. Especially if its just and issue to do with Xorg.
    Last edited by Kartious (2014-07-18 10:20:23)

  • Debtap - A script to convert .deb packages to Arch Linux packages

    I wrote this script in my free time to help people who, for any reason, want to convert a .deb to an Arch Linux package. It works in a similar way with alien (which converts .deb packages to .rpm packages and vice versa), but, unlike alien, it is focused on accuracy of conversion, trying to translate Debian/Ubuntu packages names to the correct Arch Linux packages names and store them in the dependencies fields of the .PKGINFO metadata in the final package. In other words, it won't only create an Arch package with the data of the original .deb package, but also it will try to create a valid and as accurate as possible .PKGINFO metadata file in the converted package. It uses pkgfile and pacman utilities to achieve this accuracy. The final package can be installed like any local Arch Linux package. Debtap is now available on AUR!
    FAQ
    Q: What "debtap" stands for?
    A: DEB To Arch (Linux) Package
    Q: Isn't better to download an official package or write a PKGBUILD in case I need to compile a package or convert a .deb package to an Arch Linux package?
    A: Sure it is, and I truely encourage you to do so. Debtap was written to create packages that either cannot be compiled (closed source packages) or cannot be built from AUR for various reasons (error during compiling or unavailable files), as a quick 'n' dirty solution and an extra option for creating Arch Linux packages for Arch Linux users.
    Q: So debtap will help me only in case I need to convert specific .deb packages to Arch Linux packages?
    A: No. In case you need to write a new PKGBUILD for a package that already exists in the Debian/Ubuntu distributions, by converting its .deb package to Arch package with debtap, thanks to the packages names translator function inside the script, it can help you determine which dependencies are needed for the package you write the PKGBUILD for and complete the necessary fields.
    Q: What are the minimum requirements to run this script?
    A: You need to have installed these dependencies: bash, binutils (provides ar utility for extracting .deb package), pkgfile, and fakeroot. You must run at least once (preferably recently) "debtap -u" to create/update pkgfile and debtap database (you do this with root privileges).
    Q: Debtap needs a lot of time to convert a package. So, why this is happening?
    A: Like I said, debtap is focused on accuracy. It won't just unpack a .deb package and then repackage its data to an Arch Linux package, ignoring metadata. Depending on the speed of your processor and the package itself, conversion can take from a few seconds to several minutes.
    Q: During conversion I get several warning messages, why?
    A: Debtap cannot be 100% accurate for several reasons,  the main reason for this is the complexity of packages names. If you want to check the freshly generated .PKGINFO and .INSTALL (this is optional file) metadata files or even fix the untranslated packages names inside .PKGINFO, debtap offers you the option to edit these files before compressing the final package.
    Q: How do I use debtap?
    A: The syntax is quite simple actually: debtap [option] package_filename
    For example: debtap world-of-goo-demo_1.0_i386.deb
    Any recommendations or questions for debtap are welcomed!
    Last edited by helix (2015-05-21 22:54:17)

    Hi helix. I've had trouble trying to use your script with ubuntu software from The Open University
    debtap OpenUniversity-ubuntu-0.1.3.20130104.deb
    ==> Extracting package data...
    ==> Fixing possible directories structure differencies...
    ==> Generating .PKGINFO file...
    debtap OpenUniversity-ubuntu-0.1.3.20130104.deb
    ==> Extracting package data...
    ==> Fixing possible directories structure differencies...
    ==> Generating .PKGINFO file...
    :: Enter Packager name:
    NewPepper2013
    :: Enter package license (you can enter multiple licenses comma seperated):
    closed
    :: If you want to edit .PKGINFO file, press (1) For vi (2) For nano (3) For a cu                                                                                                    stom editor or any other key to continue:
    ==> Generating .MTREE file...
    ==> Creating final package...
    xz: unrecognized option '--1-any.pkg.tar'
    xz: Try `xz --help' for more information.
    mv: cannot stat ‘*.xz’: No such file or directory
    ==> Removing leftover files...
    ==> Package successfully created!
    The software is called NewPepper 2013 but i've not been able to find it online except on the ou website.

  • [SOLVED] VirtualBox: Arch Linux host unable to reach guest over NA...

    Hello everyone,
    I recently installed VirtualBox on my Arch Linux install to tinker with GitLab on a Debian VM. I've set up a standard VM running Debian (wheezy) and made sure it's network settings were set to "NAT". However, I am unable to ping or ssh to this VM (which is running an ssh server among other things). Where this gets a bit weirder is that I'm perfectly able to ping and ssh to my host machine (running Arch).
    I installed the version of VirtualBox available on the official repos and I'm running on the default kernel too.
    I've install VirutalBox by following the infos posted on the wiki. My current user is part of the vboxusers group :
    % groups duane
    disk lp wheel uucp locate rfkill games network video audio optical floppy storage scanner power users vboxusers
    I've added the proper kernel modules to /etc/modules-load.d/virtualbox.conf so that they are loaded automatically on boot time :
    vboxdrv
    vboxnetadp
    vboxnetflt
    vboxpci
    % lsmod | grep vbox
    vboxpci 14581 0
    vboxnetflt 17612 0
    vboxnetadp 18355 0
    vboxdrv 264794 5 vboxnetadp,vboxnetflt,vboxpci
    I must also note that the net-tools package is installed.
    Now, I get the ip adress of my host :
    % ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: enp9s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether f0:4d:a2:48:5b:38 brd ff:ff:ff:ff:ff:ff
    3: wlp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 5c:ac:4c:09:d3:f3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.22/24 brd 192.168.1.255 scope global wlp4s0
    valid_lft forever preferred_lft forever
    inet6 fe80::5eac:4cff:fe09:d3f3/64 scope link
    valid_lft forever preferred_lft forever
    Then I try to ping it from my Debian guest.
    user@debian:~% ping 192.168.1.22 -c 3
    PING 192.168.1.22 (192.168.1.22) 56(84) bytes of data.
    64 bytes from 192.168.1.22: icmp_req=1 ttl=63 time=0.961 ms
    64 bytes from 192.168.1.22: icmp_req=2 ttl=63 time=0.722 ms
    64 bytes from 192.168.1.22: icmp_req=3 ttl=63 time=0.680 ms
    --- 192.168.1.22 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2001ms
    rtt min/avg/max/mdev = 0.680/0.787/0.961/0.127 ms
    Now I get the ip adress of my guest :
    eth0 Link encap:Ethernet HWaddr 08:00:27:77:0e:48
    inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
    inet6 addr: fe80::a00:27ff:fe77:e48/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:69 errors:0 dropped:0 overruns:0 frame:0
    TX packets:93 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:11577 (11.3 KiB) TX bytes:15395 (15.0 KiB)
    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
    And I try to ping my guest from my host :
    % ping 10.0.2.15 -c 3
    PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.
    --- 10.0.2.15 ping statistics ---
    3 packets transmitted, 0 received, 100% packet loss, time 2007ms
    There. I hope I didn't give too much information.
    I don't really understand what's going on there, usually that workfow works immediately in all the distributions I tried before, and on windows as well. I think I followed all the steps to make this work and yet it doesn't, and I'm not sure this problem is related to VirtualBox itself.
    Thanks in advance for any tip or comment on that.
    Last edited by Marneus68 (2014-01-24 10:19:39)

    What I do for all my VB guest VM's is to set 2 network interfaces, one the normal (default) NAT, and the other a host-only interface. That way your guests are completely hidden from the local lan which may be desirable if e.g., your host is a laptop which you move around various places. The guests can access anything outbound and you can still ssh to them from the host (and also, using ssh ProxyCommand via that host if you want to access them remotely).

  • About the future of Arch Linux Newsletter.

    Hi,
    As you may have noticed, I have taken the job to make the Arch Linux weekly newsletter a possibility again. I the time I've been doing them, we speak of about 3 weeks, I have enjoyed writing them and have received very positive comments from the community that reads them. I would like to thank all of you personally for the support, you are the community and yours are the newsletter. But, as you all may have noticed the newsletter has been in an unchanged format for quite a long time. I mean, I just added the Humor section thats all, I know there is an email address to which you can all write your suggestions to, but I find people communicate and express themselves better on the forums.
    So what I will ask of you, dear readers, suggestions of sections I should add/remove/edit, I will appreciate your constructive criticism in general. Express your thoughts in this thread to help me make a better more quality newsletter.
    In other news, the newsletter won't be weekly no more, as Jason Chu and I have talked about, is easier to maintain a 2 time a month newsletter than 4 times a month, also the Arch Linux Developers/Community doesn't make that much noise as the other major distributions, we tend to be a bit quieter. The bright side is, the newsletter will be written with more time at hand, more stuff to write about, and will contribute to a better quality overall.
    What has been suggested so far and I will work out on the next issue of the newsletter?
    * Change the Bugs stats to not reflect the overall percentage but the actual bugs opened and closed that week.
    As Roman Kyrylych points out: "They show a summary of status field "Progress" in open reports, but in 99% this field goes straight from 0% to 100%, so the overall number is always very low and doesn't really show anything".
    So I wait for your suggestions as well.;)

    Hi again,
    I ask for your opinion again on the subject of the stats section in the newsletter, Do you find this an important part that should stay there?
    I mean, this is going to be the most tedious, time-taking and in my opinion useless section I will have to write for the newsletter. I do want to bring a high quality newsletter but I feel this part doesn't contribute to the quality of the newsletter at all, Why?
    * Newsletters that include this section are mostly from distributions that has point releases and not rolling releases.
    * The number will always increase with minimum decrease because as a rolling release system Arch Linux is every package keep being updated everyday to newer versions, opening and closing more bugs by itself.
    * People might not be interested in how many bugs are and how many are closed every week, since this numbers aren't even provided on the bug system itself.
    Please give this a consideration and tell me your opinions.

  • Arch Linux on Distrowatch

    http://www.distrowatch.com/stats.php?section=popularity
    Arch Linux Rankings:
    Last 12 months: 58
    Last 6 months: 56
    Last 3 month: 45
    Last 1 month: 28

    i3839 wrote:Well, theoretically it shouldn't matter if 100 or 1000000 people use a distro for the developers, they still should do the same work. Only thing that really changes is that the community will be much bigger, so there will be more questions and demands, but those should be handled by the community itself imho. A bigger community also means potentially more people willing to write docs and make packages, so the "problem" should be fixed by itself. Only thing that can go wrong is that reality isn't in sync with theory .
    yeah the last sentence is more true than the rest. and the first one is definitely the least accurate. some devs do more work than others and everyone should have the same workload. the TURs should be processing incoming, the TURs should be moving stuff to staging more regularily. ALL devs should be working abit on moving packages from incoming and staging to the repos. alll package maintainers should regularily work on their packages and ideally the workload (ie number of packages maintained) should be equal.
    but for every 200 packages added you need one more maintainer. some devs have way more than 100 packages which is entirely too much. i did 400+ for three months and it drove me nuts. it isn't good to have some overworked while others disappear for months and maintain only a few packages.
    doc developers NEED to be ontop of what is going on inthe community so that anything that is becoming FAQs is incorporated into the docs and does not lie in in three or four different places.
    it would be nice too if the workload was in such a way that releases could be more regular or even incremental so that ugly upgrades can be avoided or installing via ftp.
    and so forth.
    it would be nice if your theory was true but alas i just don't think it is.

  • [SOLVED] Arch Linux Guest Virtual Box OSE problem

    So I am installing my Arch Linux as a Guest in my Ubuntu partition, through Virtual Box OSE (3.2.8). I followed the wiki ( https://wiki.archlinux.org/index.php/Ar … lBox_Guest ) but still have an issue:
    sudo pacman -S kernel26-headers xorg gcc make
    sudo mount /dev/cdrom /mnt/cdrom
    sudo /mnt/cdrom/VBoxLinuxAdditions-x86.run
    But It fails on Shared folders, and cannot recognize X:
    :: Building the VirtualBox Guest Additions Kernel Modules [BUSY]
    :: Building the main Guest Additions module [DONE]
    :: Building the shared folder support module [FAIL]
    (Look at /var/log/vboxadd-install.log to find otu what went wrong)
    :: Warning: Unknown version of the X Window System installed. Not installing X Window System drivers.
    :: Installing graphics libraries and desktop services components [Done]
    /var/log/vboxadd-install.log states:
    /tmp/vbox.0/vfsmod.c:406:9: error: unknown field 'clear_inode' specified in initalizer
    /tmp/vbox.0/vfsmod.c:406:9 warning: initalization from incompatible pointer type.
    Which is strange, because as far as I know, clear_inode is part of the linux headers.
    Any idea why this is happening? Do I just need to update VirtualBox to a newer version?
    Last edited by gralamin (2011-03-11 18:22:14)

    Updating Virtualbox fixed the issue.

  • Arch Linux first impressions

    Hello all,
    I have just recently decided to try arch linux. For a long while I have been running my own LinuxFromScratch system, but I have been looking for a little while for a nice KDE based system *with package management*.
    So here I am now with an Arch KDE 3.5.6 system - what do I think?
    1. KDE looks real nice! Fonts look very good.
    2. nvidia drivers were simple to install and work as advertised, same ~6000fps under glxgears as under LFS
    3. rc.conf, MODULES, DAEMONS, nice and simple!
    4. pacman -S? Very nice. I got caught as a newbie when I didn't do a pacman -Sy before an update, and tried to pull down out-of-date files. Perhaps pacman -S could note that my synch was n weeks ago and warn?
    5. Beginners Guide on the wiki. Very useful step by step to a KDE desktop.
    6. All apps installed and work well, k3b, wesnoth, flashplugin, kmail, konq browsing, qemu + kqemu etc
    The not so good
    1. Twice now I have had a udev error on first boot into arch. Second boot it goes away. I put it down to my windows dual boot leaving some hardware in a dubious state. If I see it again I'll note the exact error message.
    2. For some reason KDE 3.5.6 is not quite so snappy as on LFS. I can watch it paint as windows come up for the first time. Nothing major though.
    3. modules & groups. It really sucks to get tripped up on missing modules (floppy) and groups (storage). Its my hardware let me use it by default I say!
    4. ping myhostname returns unknown host. A little strange I think.
    5. media mounting (usb key, floppy, cdrom) as my user seems a little flakey. Permissions problems preventing "safe removal" of the usb key etc.
    TODO:
    1. OpenOffice (although this seems to be 2.04 via pacman, perhaps I'll wait for 2.1 to arrive)
    2. More learning about Arch....
    A nice system thus far, this Arch Linux...
    Dale

    dale77 wrote:
    codemac wrote:for #4 under the not so good, did you edit your /etc/hosts to reflect your host name?
    Yes, that is what I did to fix it. I guess I would have expected the arch install to handle that detail.
    Dale
    It's a feature, not a bug. As a general rule you cannot count on the Arch installer to do any extra configuration tasks. It offers you the chance to edit the hosts file during setup.

  • Arch Linux (and general Linux) graphics and artists community

    TheBodziO has started a discussion about the (Arch) linux graphics community. That gives me an idea. It would be nice to create an online (sub)community dedicated to graphics, DTP, and photography centered around Arch Linux. For now, I can only offer some ideas, my experience in graphics and DTP, and lots of hosting space on a non-dedicated server.
    The ideas for the (sub)community:
    * an open forum for discussion, not just Arch-related but 'graphics on Linux' in general
    * a wiki for Linux artists
    * a gallery (d'oh!)
    * an Arch LiveCD for graphics artists
    * a dedicated graphics repository
    If you have suggestions and/or are interested to participate, please post below.

    For start I want to say that I'm content that the new thread have been started to discuss the matters of cooperation of designers and developers communities. It's a good sign.
    As foxbunny said the whole idea is *much* more than another art repository. I thought about creating a common ground - a meeting point - for both developers and designers. Developers have the skills to code. Designers have needs and ideas how to speed up/ease their work. Developers create tools that designers use and designers provide feedback and ideas. What I think free software world lacks is an organized way to provide the pan-project and pan-distro connection between these groups.
    To illustrate the whole thing on a simple example: let's assume that I'd love to have a possibility to lock some operations on elements of my project with password. It's because my work will be given to someone else who will be responsible for placing a text in proper places on the design. I don't want to see him to move or delete something accidentally. It's possible that also some other designers will find that feature useful too. Then maybe some developer will be willing to implement that. The trouble is, that if I propose that feature and encourage its implementation in gimp, I would have to repeat the same process for scribus for example. But the idea is common. I want to state it once and see who will catch the bait . To some extent it will promote deeper integration between different projects.
    Today graphic designers have the tools for editing vector graphics, raster graphics some page design tools. These tools often use the same methodologies! There are bezier curves in gimp, inkscape, scribus... whatever yet they are implemented redundantly. Perhaps thanks to one thoughts sharing panel it will be possible to come with some common solutions. Maybe some common libraries or platforms will emerge in time? I think that mentioned meeting point will keep us close to unix philosophy: do it for a single purpose and do it well. In other words I think that it will allow us to have powerful building blocks on which something even better than today state of the art apps could be build.
    I want to at least start some discussion about the issue. Hopefully this will be only a beginning.
    First I want to ask: do you believe that a subcommunity of archers that would be responsible for communication between the developers and designers would be useful? If so then we could more precisely state our goals and code of conduct.
    Designers experience is of the essence if we want to make free software usable for demanding "art" community.
    Last edited by TheBodziO (2007-10-28 20:35:15)

  • Arch Linux Pacman Proxy Script

    Since my Arch box has no internet connection (yes, I'm that much of a masochist), I wrote a bash script to act as a proxy of sorts for pacman, at least as regards downloading. It took a while to get it working (intermittent web access and all) but here it finally is, as promised.
    It works well for me, and I only hope that it will help anyone else in the same situation (if there is anyone else in the same situation).
    The script has various options to explain everything you need to know, but here's a quick word of warning: it only works on POSIX-compatible computers (i.e. no Wintendows, usually) and the proxy box needs to have bash, wget, tar, grep and sed installed. I don't see this as being a problem, but if I'm wrong, tell me all about it.
    #!/bin/bash
    readonly VER="2.1"
    readonly wgetVER=`wget -V|sed '1!d'`
    # DEBUG levels:
    # Set to 0 for ALERT-level messages only
    # Set to 1 for INFO-level messages (I prefer this)
    # Set to 2 for DEBUG-level messages
    # Set to 3 for all messages
    readonly DEBUG=0
    # Set DEBUGLOG=1 to print ALERT, INFO and DEBUG messages to DEBUG.log
    readonly DEBUGLOG=0
    readonly COLOUR=true
    if [[ $COLOUR == true ]] ; then
    readonly red='\e[31m'
    readonly warn='\e[31;7m '
    readonly green='\e[32m'
    readonly lgreen='\e[32;1m'
    readonly yellow='\e[33;1m'
    readonly lblue='\e[34;1m'
    readonly dull='\e[0m' ; fi
    # Sticky details:
    # tar seems very slow (vfat? transform? USB?)
    function bugspray {
    [[ -z $2 ]] && verbosity=1 || verbosity=$2
    if (( DEBUG >= verbosity )) ; then
    (( $2 == 0 )) && intro="${warn}ALERT${dull} | "
    (( $2 == 1 )) && intro=" INFO | "
    (( $2 > 1 )) && intro=" ${yellow}DEBUG${dull} | "
    echo -e "$intro$1"
    (( DEBUGLOG == 1 )) && echo "`date +%F_%T` | $1">>log-alpps/DEBUG.log ; fi ; }
    function compare_versions {
    # Requires two ordinary, untweaked version strings, first local, second distant
    if [[ -z $2 ]] ; then
    bugspray "compare_versions didn't receive two variables." 2 ; fi
    update='no'
    [[ -z $2 ]] && return
    local localversion=(`echo $1|sed -r 's/([[:alpha:]]+)/ \1 /g;s/[\.:~_-]/ /g'`)
    local distantversion=(`echo $2|sed -r 's/([[:alpha:]]+)/ \1 /g;s/[\.:~_-]/ /g'`)
    local max=$((${#distantversion[*]}))
    bugspray "localversion: ${localversion[*]}; distantversion: ${distantversion[*]}" 2
    for (( x=0 ; (( x < $max )) ; $((x++)) )) ; do
    bugspray "local version part: `echo ${localversion[$x]}` | distant version part: `echo ${distantversion[$x]}`" 2
    if [[ `echo ${localversion[$x]}|grep -E '^[0-9]*$'` && `echo ${distantversion[$x]}|grep -E '^[0-9]*$'` ]] ; then
    bugspray "Numerical comparison" 2
    bugspray "localver (${localversion[$x]}) less than distantver (${distantversion[$x]}): $(( 10#${localversion[$x]} < 10#${distantversion[$x]} ))" 3
    # Different compare methods for numbers, single letters and multiple letters.
    if (( 10#${localversion[$x]} < 10#${distantversion[$x]} )) ; then
    update='yes'
    break ; fi ; fi
    if [[ `echo ${localversion[$x]}|grep -E '^[[:alpha:]]$'` && `echo ${distantversion[$x]}|grep -E '^[[:alpha:]]$'` ]] ; then # single letter -> compare
    bugspray "Lexicographical comparison" 2
    bugspray "localver (${localversion[$x]}) less than distantver (${distantversion[$x]}): [[ ${localversion[$x]} < ${distantversion[$x]} ]]" 3
    if [[ ${localversion[$x]} < ${distantversion[$x]} ]] ; then
    update='yes'
    break ; fi ; fi
    if [[ `echo ${localversion[$x]}|grep -E '^[[:alpha:]]+$'` && `echo ${distantversion[$x]}|grep -E '^[[:alpha:]]+$'` ]] ; then # string -> drop
    # cvs / git / beta -> what are the rules?
    bugspray "Sequence of letters. Not treating as version number." 2 ; fi
    done ; }
    function find_dependencies {
    # Determine existence via unique path
    bugspray "+ ${lgreen}Building download list for package \"$1\"${dull}" 1
    local packagename
    local dlfile
    local package_found=no
    if [[ `ls .temp-alpps/*.db/$1-* 2>/dev/null` ]] ; then
    bugspray "Analogous package-name file(s) found" 2
    for x in `ls .temp-alpps/*.db/$1-*/desc` ; do
    bugspray "Checking $x" 2
    packagename=`sed -r '/%NAME%/,+1!d;/%NAME%/d' $x`
    if [[ j$packagename == j$1 ]] ; then
    bugspray "Exact match found: $packagename = $1" 2
    dlfile=`sed '/%FILENAME%/,+1!d;/%FILENAME%/d' $x`
    local distantversion=`sed '/%VERSION%/,+1!d;/%VERSION%/d' $x`
    local package_full=$packagename-$distantversion
    local the_repo=`echo $x|sed -r 's/.temp-alpps\/(.*)\.db.*/\1/'`
    local the_path=`echo $x|sed -r 's/desc//'`
    unplus=`echo $packagename|sed 's/\+/\\\+/g'`
    local local_version=`sed -r '/^'$unplus' /!d;s/.* //' .temp-alpps/snapshot.state`
    package_found=yes
    break ; fi ; done ; fi
    if [[ -z $dlfile ]] ; then
    bugspray "Exact match not found -> looking for replacements." 2
    if ! [[ -z `grep $1 .temp-alpps/*.db/*/depends` ]] ; then
    local provisional=`grep $1 .temp-alpps/*.db/*/depends|sed -r 's/\/depends.*//'`
    for package in $provisional ; do
    local providence=`sed -r '/%PROVIDES%/,/^$/!d;/%PROVIDES%/d;/^$/d;s/>.*//;s/=.*//' $package/depends`
    for y in $providence ; do
    if [[ j$y == j$1 ]] ; then
    # But what about when several packages provide the same thing and ALPPS picks the wrong one? Can it happen?
    local newdep=`sed -r '/%NAME%/,+1!d;/%NAME%/d' $package/desc`
    bugspray " -> Package \"$newdep\" provides \"$1\"." 1
    find_dependencies $newdep
    break 2 ; fi ; done ; done
    if [[ -z $newdep ]] ; then
    bugspray "${warn}Warning:${dull} package \"$1\" not found in database." 0 ; fi ; fi ; fi
    bugspray "package: $1 | package_found = $package_found" 2
    # Add file to download_list if not up to date and if not already present
    if [[ j$package_found == jyes ]] ; then
    local already_got_one=no
    unplus=`echo $dlfile|sed 's/\+/\\\+/g'`
    [[ `echo $download_files|grep $unplus` ]] && already_got_one="yes" && bugspray "${green}Package in queue${dull}" 1
    [[ `ls downloads/$dlfile 2>/dev/null` ]] && already_got_one="yes" && bugspray "${green}Package proxied${dull}" 1
    compare_versions $local_version $distantversion
    bugspray "compare_versions says: $update" 2
    ! [[ -z $local_version || $update == yes ]] && already_got_one="yes" && bugspray "${green}Package already installed and up-to-date${dull}" 1
    if [[ j$already_got_one != jyes ]] ; then
    bugspray "${green}Confirm downloading${dull}" 1
    download_files+="$dlfile "
    download_array[${dlfile}]=$the_repo
    bugspray "Checking for further dependencies" 2
    if [[ -a $the_path/depends && `grep -E '^%DEPENDS%$' $the_path/depends` ]] ; then
    local dependency=`sed -r '/%DEPENDS%/d;/^$/q' $the_path/depends`
    bugspray "Dependencies of \"$packagename\":$dependency" 3
    for x in $dependency ; do
    # Is this dependency already installed? Sort-of the same as higher up; it just saves time here.
    local depname=`echo $x|sed -r 's/>.*//;s/=.*//'`
    local depminver=`echo $x|sed -r 's/.*>//'`
    bugspray "Dependency name: \"$depname\"" 2
    if ! [[ `grep -E '^$depname ' .temp-alpps/snapshot.state` ]] ; then
    find_dependencies $depname ; fi ; done
    else
    bugspray "${lblue}End of the line${dull}: package \"$packagename\" has no dependencies." 2
    true ; fi ; fi ; fi ; }
    function failover_fetch {
    echo "Downloading `echo $1|sed 's/.*\///'`"
    [[ -d log-alpps/ ]] || mkdir log-alpps/
    [[ -z $success ]] || unset success
    for mirror in $(<.temp-alpps/snapshot.mirrorlist) ; do
    # If DEBUG>0, shouldn't redirect output
    url=`echo $mirror|sed 's/$arch/'$arch'/;s/$repo/'${download_array[$1]}'/'`/$1
    bugspray "Connecting to $url" 2
    wget -o .temp-alpps/very-temp-log -U "Arch Linux Pacman Proxy Script version $VER / $wgetVER" -P downloads/ $url && success=true
    cat .temp-alpps/very-temp-log>>log-alpps/download.log
    rm -f .temp-alpps/very-temp-log
    if [[ -n $success ]] ; then
    bugspray "Download: \$success = true" 2
    break ; fi ; done
    if [[ -z $success ]] ; then
    bugspray "${warn}FAIL:${dull} $1 not accessible on known mirrors." 0 ; fi ; }
    case $1 in
    warranty)
    echo
    echo -e " ${green}Warranty${dull}"
    echo -e " ${green}========${dull}"
    echo " This program is free software. It comes without any warranty, to"
    echo " the extent permitted by applicable law. You can redistribute it"
    echo " and/or modify it under the terms of the Do What The Fuck You Want"
    echo " To Public License, Version 2, as published by Sam Hocevar. See"
    echo " http://sam.zoy.org/wtfpl/COPYING for more details."
    echo
    howto)
    echo
    echo -e " ${green}How to use ALPPS${dull}"
    echo -e " ${green}================${dull}"
    echo -e " ${yellow}+ Step 0${dull}: prime the engine"
    echo " On your offline box, copy the ALPPS script onto a removable medium, cd into"
    echo " it's directory, then run it with the \"init\" option. This essentially"
    echo " takes a snapshot of your system, package-wise. Your removable medium is"
    echo " now ready for use!"
    echo -e " ${yellow}+ Step 1${dull}:"
    echo " On the proxy box the first order of business is to download and decompress"
    echo " the current package lists. You can do this with the \"fetchdb\" option."
    echo -e " ${yellow}+ Step 1 alt${dull}:"
    echo " If you want to download the package lists without decompressing them,"
    echo " \"fetchdb simple\" will do this. It's a lot quicker, but please keep"
    echo " in mind that you cannot then do anything in step 2."
    echo -e " ${yellow}+ Step 2${dull}:"
    echo " If you want to download packages (and why wouldn't you?), the easiest way"
    echo " is to prepare a simple text file containing the names of the packages you"
    echo " want, one on each line. Run ALPPS with the option \"fetch <filename>\" and"
    echo " sit back and wait until it's done. Don't worry about dependencies: ALPPS"
    echo " handles them automatically."
    echo -e " ${yellow}+ Step 2 alt${dull}:"
    echo " As a convenience, \"fetch full\" will download all the packages needed to"
    echo " update the offline box."
    echo -e " ${yellow}+ Step 3${dull}:"
    echo " Finally, back on your offline box, run ALPPS again with the \"install\""
    echo " option. This will update the package list and copy the package files into"
    echo " local cache. You can now run \"pacman -S <package names>\" to finish"
    echo " installing the packages."
    # ALPPS no longer installs the packages, just caches them locally.
    # Not entirely sure why; it just felt too klutzy.
    echo -e " ${yellow}+ Step 4${dull}:"
    echo " You will now probably want to delete all the stuff you no longer need. Run"
    echo " ALPPS with the option \"clean\". This won't touch your request file(s). It"
    echo -e " ${red}WILL${dull} delete log files, so if you want to keep them, back them up first."
    echo " Next time you do this, don't forget to run ALPPS with \"init\" again."
    echo
    bugs)
    echo
    echo -e " ${green}Where this goes wrong${dull}"
    echo -e " ${green}=====================${dull}"
    echo " + ALPPS is a bit slow when packages have many dependencies. It's a recursive"
    echo " shell script: what did you expect?"
    echo " + It only uses the settings in /etc/pacman.conf. If your conf file is"
    echo " elsewhere, you're SOL. Similarly, the repositories are all taken from"
    echo " /etc/pacman.d/mirrorlist. If you added any custom repositories in"
    echo " /etc/pacman.conf (or any other file), ALPPS ignores them."
    echo " + As it stands, ALPPS only works when the proxy box has bash, wget, sed,"
    echo " grep and tar installed. The offline box needs bash, pacman and sed (in"
    echo " theory, this shouldn't be a problem...)."
    echo " + There is as yet no way of handling package groups, short of listing every"
    echo " member of the group."
    echo " + I don't think ALPPS will ever be able to handle AUR packages. Of course, if"
    echo " you're compiling AUR packages, you probably won't need something like this!"
    echo
    faq)
    echo
    echo -e " ${green}Frequently Asked Questions${dull}"
    echo -e " ${green}==========================${dull}"
    echo
    echo -e " ${red}Q:${dull} Can I run the whole thing off a USB stick?"
    echo -e " ${lblue}A:${dull} Certainly."
    echo
    echo -e " ${red}Q:${dull} Can I use a non-POSIX computer as a proxy (e.g. Windows)?"
    echo -e " ${lblue}A:${dull} Probably not, unless that computer has a POSIX-compatibility layer"
    echo " installed (such as Cygwin) with bash, wget, tar, sed and grep."
    echo
    echo -e " ${red}Q:${dull} Do I need to download the package list, waste time updating my computer,"
    echo " then go back again to download the packages I want?"
    echo -e " ${lblue}A:${dull} Nope! You can update the packagelist database and download piping-hot"
    echo " fresh packages, all in one sitting."
    echo -e " ${red}Q:${dull} You mean I won't have to futz around with package lists that keep updating"
    echo " ten minutes after I download them?"
    echo -e " ${lblue}A:${dull} Exactly. Nice, isn't it?"
    echo
    echo -e " ${red}Q:${dull} Does this thing handle SSL and signed packages?"
    echo -e " ${lblue}A:${dull} ALPPS uses SSL if:"
    echo " - the mirror has an https address (at present, none do), and"
    echo " - wget on the proxy box is compiled with SSL support"
    echo " Concerning signed packages: no, but then again, it doesn't need to. ALPPS"
    echo " downloads packages; it's pacman's responsibility to verify them. Your"
    echo " system remains safe (or as safe as it ever was, at any rate)."
    echo -e " ${red}Q:${dull} What about gpg keys? I need to get them."
    echo -e " ${lblue}A:${dull} ...maybe later, say, in version 3."
    echo
    echo -e " ${red}Q:${dull} ALPPS says it \`prepares databases´. Can pacman still use them after this?"
    echo -e " ${lblue}A:${dull} Yes, it can. In fact, what ALPPS does is extract the databases into a"
    echo " temp directory, without altering the original .db files."
    echo
    echo -e " ${red}Q:${dull} Where can I contact you?"
    echo -e " ${lblue}A:${dull} For constructive, useful questions and comments: [email protected] and"
    echo " be sure to mention Arch Linux in the subject."
    echo " For flames, trolling, spam and the like, visit your local bitbucket."
    echo
    todo)
    echo
    echo -e " ${green}What's next?${dull}"
    echo -e " ${green}============${dull}"
    echo -e " + I ${red}might${dull} be able to extend the reach of this thing to the AUR."
    echo " Yes, I know I said ALPPS couldn't (in \"bugs\"), but I've learned"
    echo " something new since then. It'll be tricky, though, since the AUR web"
    echo " interface delivers results in python. While this should be a Good Thing,"
    echo " bash isn't very good at handling python-format lists and dicts."
    echo
    -v|ver|version|--ver|--version)
    echo -e "${lgreen}Arch Linux pacman proxy script${dull} | ${yellow}version $VER${dull}"
    dl_list) # Debugging
    (( DEBUG == 0 )) && echo "the \"dl_list\" option is only for debugging" && exit 0
    arch=$(<.temp-alpps/snapshot.architecture)
    unset download_files
    unset download_array
    declare -A download_array
    find_dependencies $2
    bugspray "Download list: $download_files" 3
    echo "Download list v2:"
    for x in $download_files ; do
    bugspray " File \"$x\" from repo \"${download_array[$x]}\"" 3
    echo " Full URL: http://mirror.archlinux.org/${download_array[$x]}/os/$arch/$x" ; done
    verint) # Debugging
    (( DEBUG == 0 )) && echo "the \"verint\" option is only for debugging" && exit 0
    for x in `ls .temp-alpps/*/$2-*/desc` ; do
    packagename=`sed -r '/%NAME%/,+1!d;/%NAME%/d' $x`
    if [[ j$packagename == j$2 ]] ; then
    bugspray "Unique package-name file found: $packagename=$2" 2
    distantversion=`sed '/%VERSION%/,+1!d;/%VERSION%/d' $x`
    dlfile=`sed '/%FILENAME%/,+1!d;/%FILENAME%/d' $x`
    package_full=$packagename-$distantversion
    the_repo=`echo $x|sed -r 's/.temp-alpps\/(.*)\.db.*/\1/'`
    the_path=`echo $x|sed -r 's/desc//'`
    local_version=`sed -r '/^'$packagename' /!d;s/.* //' .temp-alpps/snapshot.state`
    break ; fi ; done
    echo "full package filename: $dlfile"
    echo "Comparing local ($local_version) and distant ($distantversion) versions of $2..."
    compare_versions $local_version $distantversion
    #compare_versions 2.5beta3-2 2.5cvs4-1
    echo "...and the verdict is: $update"
    init)
    x=`uname -m`
    if [[ -x /usr/bin/pacman ]] ; then
    [[ -d .temp-alpps ]] || mkdir .temp-alpps/
    pacman -Q>.temp-alpps/snapshot.state
    sed -r '/^Se/!d;s/Server = //' /etc/pacman.d/mirrorlist>.temp-alpps/snapshot.mirrorlist
    sed -r '/^\[/!d;/options/d;s/\[(.*)\]/\1/' /etc/pacman.conf>.temp-alpps/snapshot.repositories
    sed -r '/^Architecture/!d;s/^.*= //' /etc/pacman.conf>.temp-alpps/snapshot.architecture
    [[ ! -s .temp-alpps/snapshot.architecture || auto == $(<.temp-alpps/snapshot.architecture) ]] && $x>.temp-alpps/snapshot.architecture
    sed -r '/^SyncFirst/!d;s/.*= //;s/ /\n/g' /etc/pacman.conf>.temp-alpps/snapshot.prioritypackages
    echo "Current state recorded."
    else
    echo "You seem to be running ALPPs on an unsupported system."
    echo "ALPPS is the ${lgreen}Arch Linux Pacman Proxy Script${dull} and simply"
    echo "won't run properly on a non-pacman OS (except when proxying)."
    echo "Aborting. Sorry."
    exit 1 ; fi
    fetchdb)
    [[ -d downloads ]] || mkdir downloads
    arch=$(<.temp-alpps/snapshot.architecture)
    declare -A download_array
    for repo in $(<.temp-alpps/snapshot.repositories) ; do
    download_array[${repo}.db]=$repo
    location="${repo}.db"
    failover_fetch $location ; done
    if [[ j$2 != jsimple ]] ; then
    [[ -d log-alpps ]] || mkdir log-alpps
    [[ -a syncfirst ]] && rm -f syncfirst
    echo "Preparing databases for local processing. This might take a while."
    for x in $(<.temp-alpps/snapshot.repositories) ; do
    echo "Preparing $x.db"
    if [[ -a downloads/$x.db ]] ; then
    [[ -d .temp-alpps/$x.db ]] || mkdir .temp-alpps/$x.db/
    tar -xzC .temp-alpps/$x.db/ -f downloads/$x.db --transform 's/:/§/' --no-same-owner && echo "$x database ready for use."
    else
    echo -e "Database $x.db is missing. Skipping. This will probably cause problems." ; fi ; done
    # SyncFirst package warning
    [[ -z $download_list ]] || unset download_list
    [[ -a syncfirst ]] && rm -f syncfirst
    for x in $(<.temp-alpps/snapshot.prioritypackages) ; do
    find_dependencies $x ; done
    bugspray "download_files: $download_files" 2
    if [[ ! -z $download_files ]] ; then
    echo "New version(s) of SyncFirst package(s):"
    for x in $(<.temp-alpps/snapshot.prioritypackages) ; do
    [[ ! -z `echo $download_files|grep $x` ]] && echo "- $x" && echo $x>>syncfirst ; done
    echo "Package names placed in 'syncfirst'. Don't forget to download them!" ; fi ; fi
    fetch)
    for x in $(<.temp-alpps/snapshot.repositories) ; do
    if ! [[ -d .temp-alpps/$x.db/ ]] ; then
    bugspray "You must first download a fresh database with the \"fetchdb\" option" 0
    exit 1 ; fi ; done
    arch=$(<.temp-alpps/snapshot.architecture)
    unset download_array
    declare -A download_array
    unset download_files
    if [[ $2 == full ]] ; then
    echo " Building full upgrade list. This will almost certainly take a while."
    echo " Please wait..."
    for y in `sed -r 's/^(.*) .*/\1/' .temp-alpps/snapshot.state` ; do
    bugspray "Examining $y" 1
    find_dependencies $y ; done
    elif [[ -a $2 ]] ; then
    echo " Determining dependencies. This might take a while. Please wait."
    for y in $(<$2) ; do
    bugspray "Examining $y" 1
    find_dependencies $y ; done
    else
    echo " Error: you should provide a list-file or the keyword \"full\"."
    echo " (see 'alpps.sh howto', step 2)"
    exit 1 ; fi
    if [[ -z $download_files ]] ; then
    echo " No files to download: either none found, or all found are up to date."
    else
    [[ -d downloads ]] || mkdir downloads
    for x in $download_files ; do
    failover_fetch $x ; done ; fi
    install)
    dbpath=`sed -r '/^DBPath/!d;s/^.*= //' /etc/pacman.conf`
    [[ -z $dbpath ]] && dbpath="/var/lib/pacman/"
    bugspray "dbpath: $dbpath" 2
    echo " Updating databases"
    cp -ft ${dbpath}sync/ downloads/*.db
    cachedir=`sed -r '/^CacheDir/!d;s/^.*= //' /etc/pacman.conf`
    [[ -z $cachedir ]] && cachedir="/var/cache/pacman/pkg/"
    echo " Caching packages"
    cp -f downloads/*.pkg.tar.xz $cachedir
    echo
    echo " Don't forget to install/update your packages."
    echo " Exercise proper caution."
    echo " Have fun!"
    clean)
    echo "Cleaning up. This might take a while."
    rm -fr .temp-alpps/ && echo "Buffer directory deleted" || echo "Problem deleting buffer directory '.temp-alpps/'"
    rm -fr log-alpps/ && echo "Log directory deleted" || echo "Problem deleting 'log-alpps/'"
    rm -fr downloads/ && echo "Downloaded packages deleted" || echo "Problem deleting 'downloads/'"
    echo
    echo -e " ${lgreen}Arch Linux pacman proxy script${dull}"
    echo
    echo -e " ${green}Description${dull}"
    echo -e " ${green}===========${dull}"
    echo -e " This is a bash script to fetch and install packages for an offline Arch box"
    echo " using another, online box as a proxy of sorts. So far, this only works if"
    echo " the proxy box has bash, wget, tar, sed and grep installed."
    echo " It's probably also entirely unsafe, incompatible and will destroy your box"
    echo " in a fiery blaze if you try to use it (you know the drill)."
    echo
    echo -e " ${green}Options${dull}"
    echo -e " ${green}=======${dull}"
    echo " init Step 0 (as it were): take a snapshot of your system"
    echo " fetchdb Step 1: download the packagelist database"
    echo " fetch <file> Step 2: download requested packages"
    echo " install Step 3: update your system"
    echo " clean Step 4: delete any unneeded files"
    echo
    echo " howto More detailed instructions"
    echo " bugs Problems and future plans"
    echo " faq As it says"
    echo " warranty (in case it ever becomes necessary)"
    echo " version (to be honest, I wasn't expecting to go beyond v1-rc or so)"
    echo " help You're reading it, doofus :^)"
    echo
    # dl_list Test the find_dependencies function"
    # verint Test the compare_versions function"
    esac

    AnimaInvicta wrote:
    Since my Arch box has no internet connection (yes, I'm that much of a masochist), I wrote a bash script to act as a proxy of sorts for pacman, at least as regards downloading. It took a while to get it working (intermittent web access and all) but here it finally is, as promised.
    It works well for me, and I only hope that it will help anyone else in the same situation (if there is anyone else in the same situation).
    The script has various options to explain everything you need to know, but here's a quick word of warning: it only works on POSIX-compatible computers (i.e. no Wintendows, usually) and the proxy box needs to have bash, wget, tar, grep and sed installed. I don't see this as being a problem, but if I'm wrong, tell me all about it.
    #!/bin/bash
    readonly VER="2.1"
    readonly wgetVER=`wget -V|sed '1!d'`
    # DEBUG levels:
    # Set to 0 for ALERT-level messages only
    # Set to 1 for INFO-level messages (I prefer this)
    # Set to 2 for DEBUG-level messages
    # Set to 3 for all messages
    readonly DEBUG=0
    # Set DEBUGLOG=1 to print ALERT, INFO and DEBUG messages to DEBUG.log
    readonly DEBUGLOG=0
    readonly COLOUR=true
    if [[ $COLOUR == true ]] ; then
    readonly red='\e[31m'
    readonly warn='\e[31;7m '
    readonly green='\e[32m'
    readonly lgreen='\e[32;1m'
    readonly yellow='\e[33;1m'
    readonly lblue='\e[34;1m'
    readonly dull='\e[0m' ; fi
    # Sticky details:
    # tar seems very slow (vfat? transform? USB?)
    function bugspray {
    [[ -z $2 ]] && verbosity=1 || verbosity=$2
    if (( DEBUG >= verbosity )) ; then
    (( $2 == 0 )) && intro="${warn}ALERT${dull} | "
    (( $2 == 1 )) && intro=" INFO | "
    (( $2 > 1 )) && intro=" ${yellow}DEBUG${dull} | "
    echo -e "$intro$1"
    (( DEBUGLOG == 1 )) && echo "`date +%F_%T` | $1">>log-alpps/DEBUG.log ; fi ; }
    function compare_versions {
    # Requires two ordinary, untweaked version strings, first local, second distant
    if [[ -z $2 ]] ; then
    bugspray "compare_versions didn't receive two variables." 2 ; fi
    update='no'
    [[ -z $2 ]] && return
    local localversion=(`echo $1|sed -r 's/([[:alpha:]]+)/ \1 /g;s/[\.:~_-]/ /g'`)
    local distantversion=(`echo $2|sed -r 's/([[:alpha:]]+)/ \1 /g;s/[\.:~_-]/ /g'`)
    local max=$((${#distantversion[*]}))
    bugspray "localversion: ${localversion[*]}; distantversion: ${distantversion[*]}" 2
    for (( x=0 ; (( x < $max )) ; $((x++)) )) ; do
    bugspray "local version part: `echo ${localversion[$x]}` | distant version part: `echo ${distantversion[$x]}`" 2
    if [[ `echo ${localversion[$x]}|grep -E '^[0-9]*$'` && `echo ${distantversion[$x]}|grep -E '^[0-9]*$'` ]] ; then
    bugspray "Numerical comparison" 2
    bugspray "localver (${localversion[$x]}) less than distantver (${distantversion[$x]}): $(( 10#${localversion[$x]} < 10#${distantversion[$x]} ))" 3
    # Different compare methods for numbers, single letters and multiple letters.
    if (( 10#${localversion[$x]} < 10#${distantversion[$x]} )) ; then
    update='yes'
    break ; fi ; fi
    if [[ `echo ${localversion[$x]}|grep -E '^[[:alpha:]]$'` && `echo ${distantversion[$x]}|grep -E '^[[:alpha:]]$'` ]] ; then # single letter -> compare
    bugspray "Lexicographical comparison" 2
    bugspray "localver (${localversion[$x]}) less than distantver (${distantversion[$x]}): [[ ${localversion[$x]} < ${distantversion[$x]} ]]" 3
    if [[ ${localversion[$x]} < ${distantversion[$x]} ]] ; then
    update='yes'
    break ; fi ; fi
    if [[ `echo ${localversion[$x]}|grep -E '^[[:alpha:]]+$'` && `echo ${distantversion[$x]}|grep -E '^[[:alpha:]]+$'` ]] ; then # string -> drop
    # cvs / git / beta -> what are the rules?
    bugspray "Sequence of letters. Not treating as version number." 2 ; fi
    done ; }
    function find_dependencies {
    # Determine existence via unique path
    bugspray "+ ${lgreen}Building download list for package \"$1\"${dull}" 1
    local packagename
    local dlfile
    local package_found=no
    if [[ `ls .temp-alpps/*.db/$1-* 2>/dev/null` ]] ; then
    bugspray "Analogous package-name file(s) found" 2
    for x in `ls .temp-alpps/*.db/$1-*/desc` ; do
    bugspray "Checking $x" 2
    packagename=`sed -r '/%NAME%/,+1!d;/%NAME%/d' $x`
    if [[ j$packagename == j$1 ]] ; then
    bugspray "Exact match found: $packagename = $1" 2
    dlfile=`sed '/%FILENAME%/,+1!d;/%FILENAME%/d' $x`
    local distantversion=`sed '/%VERSION%/,+1!d;/%VERSION%/d' $x`
    local package_full=$packagename-$distantversion
    local the_repo=`echo $x|sed -r 's/.temp-alpps\/(.*)\.db.*/\1/'`
    local the_path=`echo $x|sed -r 's/desc//'`
    unplus=`echo $packagename|sed 's/\+/\\\+/g'`
    local local_version=`sed -r '/^'$unplus' /!d;s/.* //' .temp-alpps/snapshot.state`
    package_found=yes
    break ; fi ; done ; fi
    if [[ -z $dlfile ]] ; then
    bugspray "Exact match not found -> looking for replacements." 2
    if ! [[ -z `grep $1 .temp-alpps/*.db/*/depends` ]] ; then
    local provisional=`grep $1 .temp-alpps/*.db/*/depends|sed -r 's/\/depends.*//'`
    for package in $provisional ; do
    local providence=`sed -r '/%PROVIDES%/,/^$/!d;/%PROVIDES%/d;/^$/d;s/>.*//;s/=.*//' $package/depends`
    for y in $providence ; do
    if [[ j$y == j$1 ]] ; then
    # But what about when several packages provide the same thing and ALPPS picks the wrong one? Can it happen?
    local newdep=`sed -r '/%NAME%/,+1!d;/%NAME%/d' $package/desc`
    bugspray " -> Package \"$newdep\" provides \"$1\"." 1
    find_dependencies $newdep
    break 2 ; fi ; done ; done
    if [[ -z $newdep ]] ; then
    bugspray "${warn}Warning:${dull} package \"$1\" not found in database." 0 ; fi ; fi ; fi
    bugspray "package: $1 | package_found = $package_found" 2
    # Add file to download_list if not up to date and if not already present
    if [[ j$package_found == jyes ]] ; then
    local already_got_one=no
    unplus=`echo $dlfile|sed 's/\+/\\\+/g'`
    [[ `echo $download_files|grep $unplus` ]] && already_got_one="yes" && bugspray "${green}Package in queue${dull}" 1
    [[ `ls downloads/$dlfile 2>/dev/null` ]] && already_got_one="yes" && bugspray "${green}Package proxied${dull}" 1
    compare_versions $local_version $distantversion
    bugspray "compare_versions says: $update" 2
    ! [[ -z $local_version || $update == yes ]] && already_got_one="yes" && bugspray "${green}Package already installed and up-to-date${dull}" 1
    if [[ j$already_got_one != jyes ]] ; then
    bugspray "${green}Confirm downloading${dull}" 1
    download_files+="$dlfile "
    download_array[${dlfile}]=$the_repo
    bugspray "Checking for further dependencies" 2
    if [[ -a $the_path/depends && `grep -E '^%DEPENDS%$' $the_path/depends` ]] ; then
    local dependency=`sed -r '/%DEPENDS%/d;/^$/q' $the_path/depends`
    bugspray "Dependencies of \"$packagename\":$dependency" 3
    for x in $dependency ; do
    # Is this dependency already installed? Sort-of the same as higher up; it just saves time here.
    local depname=`echo $x|sed -r 's/>.*//;s/=.*//'`
    local depminver=`echo $x|sed -r 's/.*>//'`
    bugspray "Dependency name: \"$depname\"" 2
    if ! [[ `grep -E '^$depname ' .temp-alpps/snapshot.state` ]] ; then
    find_dependencies $depname ; fi ; done
    else
    bugspray "${lblue}End of the line${dull}: package \"$packagename\" has no dependencies." 2
    true ; fi ; fi ; fi ; }
    function failover_fetch {
    echo "Downloading `echo $1|sed 's/.*\///'`"
    [[ -d log-alpps/ ]] || mkdir log-alpps/
    [[ -z $success ]] || unset success
    for mirror in $(<.temp-alpps/snapshot.mirrorlist) ; do
    # If DEBUG>0, shouldn't redirect output
    url=`echo $mirror|sed 's/$arch/'$arch'/;s/$repo/'${download_array[$1]}'/'`/$1
    bugspray "Connecting to $url" 2
    wget -o .temp-alpps/very-temp-log -U "Arch Linux Pacman Proxy Script version $VER / $wgetVER" -P downloads/ $url && success=true
    cat .temp-alpps/very-temp-log>>log-alpps/download.log
    rm -f .temp-alpps/very-temp-log
    if [[ -n $success ]] ; then
    bugspray "Download: \$success = true" 2
    break ; fi ; done
    if [[ -z $success ]] ; then
    bugspray "${warn}FAIL:${dull} $1 not accessible on known mirrors." 0 ; fi ; }
    case $1 in
    warranty)
    echo
    echo -e " ${green}Warranty${dull}"
    echo -e " ${green}========${dull}"
    echo " This program is free software. It comes without any warranty, to"
    echo " the extent permitted by applicable law. You can redistribute it"
    echo " and/or modify it under the terms of the Do What The Fuck You Want"
    echo " To Public License, Version 2, as published by Sam Hocevar. See"
    echo " http://sam.zoy.org/wtfpl/COPYING for more details."
    echo
    howto)
    echo
    echo -e " ${green}How to use ALPPS${dull}"
    echo -e " ${green}================${dull}"
    echo -e " ${yellow}+ Step 0${dull}: prime the engine"
    echo " On your offline box, copy the ALPPS script onto a removable medium, cd into"
    echo " it's directory, then run it with the \"init\" option. This essentially"
    echo " takes a snapshot of your system, package-wise. Your removable medium is"
    echo " now ready for use!"
    echo -e " ${yellow}+ Step 1${dull}:"
    echo " On the proxy box the first order of business is to download and decompress"
    echo " the current package lists. You can do this with the \"fetchdb\" option."
    echo -e " ${yellow}+ Step 1 alt${dull}:"
    echo " If you want to download the package lists without decompressing them,"
    echo " \"fetchdb simple\" will do this. It's a lot quicker, but please keep"
    echo " in mind that you cannot then do anything in step 2."
    echo -e " ${yellow}+ Step 2${dull}:"
    echo " If you want to download packages (and why wouldn't you?), the easiest way"
    echo " is to prepare a simple text file containing the names of the packages you"
    echo " want, one on each line. Run ALPPS with the option \"fetch <filename>\" and"
    echo " sit back and wait until it's done. Don't worry about dependencies: ALPPS"
    echo " handles them automatically."
    echo -e " ${yellow}+ Step 2 alt${dull}:"
    echo " As a convenience, \"fetch full\" will download all the packages needed to"
    echo " update the offline box."
    echo -e " ${yellow}+ Step 3${dull}:"
    echo " Finally, back on your offline box, run ALPPS again with the \"install\""
    echo " option. This will update the package list and copy the package files into"
    echo " local cache. You can now run \"pacman -S <package names>\" to finish"
    echo " installing the packages."
    # ALPPS no longer installs the packages, just caches them locally.
    # Not entirely sure why; it just felt too klutzy.
    echo -e " ${yellow}+ Step 4${dull}:"
    echo " You will now probably want to delete all the stuff you no longer need. Run"
    echo " ALPPS with the option \"clean\". This won't touch your request file(s). It"
    echo -e " ${red}WILL${dull} delete log files, so if you want to keep them, back them up first."
    echo " Next time you do this, don't forget to run ALPPS with \"init\" again."
    echo
    bugs)
    echo
    echo -e " ${green}Where this goes wrong${dull}"
    echo -e " ${green}=====================${dull}"
    echo " + ALPPS is a bit slow when packages have many dependencies. It's a recursive"
    echo " shell script: what did you expect?"
    echo " + It only uses the settings in /etc/pacman.conf. If your conf file is"
    echo " elsewhere, you're SOL. Similarly, the repositories are all taken from"
    echo " /etc/pacman.d/mirrorlist. If you added any custom repositories in"
    echo " /etc/pacman.conf (or any other file), ALPPS ignores them."
    echo " + As it stands, ALPPS only works when the proxy box has bash, wget, sed,"
    echo " grep and tar installed. The offline box needs bash, pacman and sed (in"
    echo " theory, this shouldn't be a problem...)."
    echo " + There is as yet no way of handling package groups, short of listing every"
    echo " member of the group."
    echo " + I don't think ALPPS will ever be able to handle AUR packages. Of course, if"
    echo " you're compiling AUR packages, you probably won't need something like this!"
    echo
    faq)
    echo
    echo -e " ${green}Frequently Asked Questions${dull}"
    echo -e " ${green}==========================${dull}"
    echo
    echo -e " ${red}Q:${dull} Can I run the whole thing off a USB stick?"
    echo -e " ${lblue}A:${dull} Certainly."
    echo
    echo -e " ${red}Q:${dull} Can I use a non-POSIX computer as a proxy (e.g. Windows)?"
    echo -e " ${lblue}A:${dull} Probably not, unless that computer has a POSIX-compatibility layer"
    echo " installed (such as Cygwin) with bash, wget, tar, sed and grep."
    echo
    echo -e " ${red}Q:${dull} Do I need to download the package list, waste time updating my computer,"
    echo " then go back again to download the packages I want?"
    echo -e " ${lblue}A:${dull} Nope! You can update the packagelist database and download piping-hot"
    echo " fresh packages, all in one sitting."
    echo -e " ${red}Q:${dull} You mean I won't have to futz around with package lists that keep updating"
    echo " ten minutes after I download them?"
    echo -e " ${lblue}A:${dull} Exactly. Nice, isn't it?"
    echo
    echo -e " ${red}Q:${dull} Does this thing handle SSL and signed packages?"
    echo -e " ${lblue}A:${dull} ALPPS uses SSL if:"
    echo " - the mirror has an https address (at present, none do), and"
    echo " - wget on the proxy box is compiled with SSL support"
    echo " Concerning signed packages: no, but then again, it doesn't need to. ALPPS"
    echo " downloads packages; it's pacman's responsibility to verify them. Your"
    echo " system remains safe (or as safe as it ever was, at any rate)."
    echo -e " ${red}Q:${dull} What about gpg keys? I need to get them."
    echo -e " ${lblue}A:${dull} ...maybe later, say, in version 3."
    echo
    echo -e " ${red}Q:${dull} ALPPS says it \`prepares databases´. Can pacman still use them after this?"
    echo -e " ${lblue}A:${dull} Yes, it can. In fact, what ALPPS does is extract the databases into a"
    echo " temp directory, without altering the original .db files."
    echo
    echo -e " ${red}Q:${dull} Where can I contact you?"
    echo -e " ${lblue}A:${dull} For constructive, useful questions and comments: [email protected] and"
    echo " be sure to mention Arch Linux in the subject."
    echo " For flames, trolling, spam and the like, visit your local bitbucket."
    echo
    todo)
    echo
    echo -e " ${green}What's next?${dull}"
    echo -e " ${green}============${dull}"
    echo -e " + I ${red}might${dull} be able to extend the reach of this thing to the AUR."
    echo " Yes, I know I said ALPPS couldn't (in \"bugs\"), but I've learned"
    echo " something new since then. It'll be tricky, though, since the AUR web"
    echo " interface delivers results in python. While this should be a Good Thing,"
    echo " bash isn't very good at handling python-format lists and dicts."
    echo
    -v|ver|version|--ver|--version)
    echo -e "${lgreen}Arch Linux pacman proxy script${dull} | ${yellow}version $VER${dull}"
    dl_list) # Debugging
    (( DEBUG == 0 )) && echo "the \"dl_list\" option is only for debugging" && exit 0
    arch=$(<.temp-alpps/snapshot.architecture)
    unset download_files
    unset download_array
    declare -A download_array
    find_dependencies $2
    bugspray "Download list: $download_files" 3
    echo "Download list v2:"
    for x in $download_files ; do
    bugspray " File \"$x\" from repo \"${download_array[$x]}\"" 3
    echo " Full URL: http://mirror.archlinux.org/${download_array[$x]}/os/$arch/$x" ; done
    verint) # Debugging
    (( DEBUG == 0 )) && echo "the \"verint\" option is only for debugging" && exit 0
    for x in `ls .temp-alpps/*/$2-*/desc` ; do
    packagename=`sed -r '/%NAME%/,+1!d;/%NAME%/d' $x`
    if [[ j$packagename == j$2 ]] ; then
    bugspray "Unique package-name file found: $packagename=$2" 2
    distantversion=`sed '/%VERSION%/,+1!d;/%VERSION%/d' $x`
    dlfile=`sed '/%FILENAME%/,+1!d;/%FILENAME%/d' $x`
    package_full=$packagename-$distantversion
    the_repo=`echo $x|sed -r 's/.temp-alpps\/(.*)\.db.*/\1/'`
    the_path=`echo $x|sed -r 's/desc//'`
    local_version=`sed -r '/^'$packagename' /!d;s/.* //' .temp-alpps/snapshot.state`
    break ; fi ; done
    echo "full package filename: $dlfile"
    echo "Comparing local ($local_version) and distant ($distantversion) versions of $2..."
    compare_versions $local_version $distantversion
    #compare_versions 2.5beta3-2 2.5cvs4-1
    echo "...and the verdict is: $update"
    init)
    x=`uname -m`
    if [[ -x /usr/bin/pacman ]] ; then
    [[ -d .temp-alpps ]] || mkdir .temp-alpps/
    pacman -Q>.temp-alpps/snapshot.state
    sed -r '/^Se/!d;s/Server = //' /etc/pacman.d/mirrorlist>.temp-alpps/snapshot.mirrorlist
    sed -r '/^\[/!d;/options/d;s/\[(.*)\]/\1/' /etc/pacman.conf>.temp-alpps/snapshot.repositories
    sed -r '/^Architecture/!d;s/^.*= //' /etc/pacman.conf>.temp-alpps/snapshot.architecture
    [[ ! -s .temp-alpps/snapshot.architecture || auto == $(<.temp-alpps/snapshot.architecture) ]] && $x>.temp-alpps/snapshot.architecture
    sed -r '/^SyncFirst/!d;s/.*= //;s/ /\n/g' /etc/pacman.conf>.temp-alpps/snapshot.prioritypackages
    echo "Current state recorded."
    else
    echo "You seem to be running ALPPs on an unsupported system."
    echo "ALPPS is the ${lgreen}Arch Linux Pacman Proxy Script${dull} and simply"
    echo "won't run properly on a non-pacman OS (except when proxying)."
    echo "Aborting. Sorry."
    exit 1 ; fi
    fetchdb)
    [[ -d downloads ]] || mkdir downloads
    arch=$(<.temp-alpps/snapshot.architecture)
    declare -A download_array
    for repo in $(<.temp-alpps/snapshot.repositories) ; do
    download_array[${repo}.db]=$repo
    location="${repo}.db"
    failover_fetch $location ; done
    if [[ j$2 != jsimple ]] ; then
    [[ -d log-alpps ]] || mkdir log-alpps
    [[ -a syncfirst ]] && rm -f syncfirst
    echo "Preparing databases for local processing. This might take a while."
    for x in $(<.temp-alpps/snapshot.repositories) ; do
    echo "Preparing $x.db"
    if [[ -a downloads/$x.db ]] ; then
    [[ -d .temp-alpps/$x.db ]] || mkdir .temp-alpps/$x.db/
    tar -xzC .temp-alpps/$x.db/ -f downloads/$x.db --transform 's/:/§/' --no-same-owner && echo "$x database ready for use."
    else
    echo -e "Database $x.db is missing. Skipping. This will probably cause problems." ; fi ; done
    # SyncFirst package warning
    [[ -z $download_list ]] || unset download_list
    [[ -a syncfirst ]] && rm -f syncfirst
    for x in $(<.temp-alpps/snapshot.prioritypackages) ; do
    find_dependencies $x ; done
    bugspray "download_files: $download_files" 2
    if [[ ! -z $download_files ]] ; then
    echo "New version(s) of SyncFirst package(s):"
    for x in $(<.temp-alpps/snapshot.prioritypackages) ; do
    [[ ! -z `echo $download_files|grep $x` ]] && echo "- $x" && echo $x>>syncfirst ; done
    echo "Package names placed in 'syncfirst'. Don't forget to download them!" ; fi ; fi
    fetch)
    for x in $(<.temp-alpps/snapshot.repositories) ; do
    if ! [[ -d .temp-alpps/$x.db/ ]] ; then
    bugspray "You must first download a fresh database with the \"fetchdb\" option" 0
    exit 1 ; fi ; done
    arch=$(<.temp-alpps/snapshot.architecture)
    unset download_array
    declare -A download_array
    unset download_files
    if [[ $2 == full ]] ; then
    echo " Building full upgrade list. This will almost certainly take a while."
    echo " Please wait..."
    for y in `sed -r 's/^(.*) .*/\1/' .temp-alpps/snapshot.state` ; do
    bugspray "Examining $y" 1
    find_dependencies $y ; done
    elif [[ -a $2 ]] ; then
    echo " Determining dependencies. This might take a while. Please wait."
    for y in $(<$2) ; do
    bugspray "Examining $y" 1
    find_dependencies $y ; done
    else
    echo " Error: you should provide a list-file or the keyword \"full\"."
    echo " (see 'alpps.sh howto', step 2)"
    exit 1 ; fi
    if [[ -z $download_files ]] ; then
    echo " No files to download: either none found, or all found are up to date."
    else
    [[ -d downloads ]] || mkdir downloads
    for x in $download_files ; do
    failover_fetch $x ; done ; fi
    install)
    dbpath=`sed -r '/^DBPath/!d;s/^.*= //' /etc/pacman.conf`
    [[ -z $dbpath ]] && dbpath="/var/lib/pacman/"
    bugspray "dbpath: $dbpath" 2
    echo " Updating databases"
    cp -ft ${dbpath}sync/ downloads/*.db
    cachedir=`sed -r '/^CacheDir/!d;s/^.*= //' /etc/pacman.conf`
    [[ -z $cachedir ]] && cachedir="/var/cache/pacman/pkg/"
    echo " Caching packages"
    cp -f downloads/*.pkg.tar.xz $cachedir
    echo
    echo " Don't forget to install/update your packages."
    echo " Exercise proper caution."
    echo " Have fun!"
    clean)
    echo "Cleaning up. This might take a while."
    rm -fr .temp-alpps/ && echo "Buffer directory deleted" || echo "Problem deleting buffer directory '.temp-alpps/'"
    rm -fr log-alpps/ && echo "Log directory deleted" || echo "Problem deleting 'log-alpps/'"
    rm -fr downloads/ && echo "Downloaded packages deleted" || echo "Problem deleting 'downloads/'"
    echo
    echo -e " ${lgreen}Arch Linux pacman proxy script${dull}"
    echo
    echo -e " ${green}Description${dull}"
    echo -e " ${green}===========${dull}"
    echo -e " This is a bash script to fetch and install packages for an offline Arch box"
    echo " using another, online box as a proxy of sorts. So far, this only works if"
    echo " the proxy box has bash, wget, tar, sed and grep installed."
    echo " It's probably also entirely unsafe, incompatible and will destroy your box"
    echo " in a fiery blaze if you try to use it (you know the drill)."
    echo
    echo -e " ${green}Options${dull}"
    echo -e " ${green}=======${dull}"
    echo " init Step 0 (as it were): take a snapshot of your system"
    echo " fetchdb Step 1: download the packagelist database"
    echo " fetch <file> Step 2: download requested packages"
    echo " install Step 3: update your system"
    echo " clean Step 4: delete any unneeded files"
    echo
    echo " howto More detailed instructions"
    echo " bugs Problems and future plans"
    echo " faq As it says"
    echo " warranty (in case it ever becomes necessary)"
    echo " version (to be honest, I wasn't expecting to go beyond v1-rc or so)"
    echo " help You're reading it, doofus :^)"
    echo
    # dl_list Test the find_dependencies function"
    # verint Test the compare_versions function"
    esac
    I've always resorted to use VPN, then I started using cntlm, this looks very useful (and a lot of work on your part!) Thanks alot!
    DoctorZeus

  • Arch Linux running on Asus Transformer T100/T100TA... sort of.

    I'm not really asking for help here (can't find an appropriate place to put this post), but more to show off my accomplishment with this tablet.
    As the thread title says, I've gotten Arch Linux to run on the Asus T100TA which is a quite annoying little thing. I haven't documented the steps myself, however, I remember exactly what I have done, and in order to get the live image to at least run on this tablet, here are the steps I did:
    (you'll maybe need 2 USB drives, seems to be the easiest way)
    1. Create an ISO using the archiso set as you normally would (except you won't really need the ISO itself) OR if you can figure it out yourself, install the base image to the USB drive (either architecture will do, but I recommend i686 since the processor is 32 bit as well)
    https://wiki.archlinux.org/index.php/Archiso
    This step will be unnecessary as of May, as the live images onwards on the main download site will already contain the 3.14 or newer kernels.
    2. After the image building successfully finishes, copy all the contents from (PROFILE)/work/iso/ (except root-image squashfs files) to a FAT32 formatted USB drive (1). This is to simply create a bootloader drive that will allow us for later swapping the USB drives.
    3. Download an ia32 version of grub. Any will do as long as it can boot up on the tablet.
    http://www.supergrubdisk.org/category/download/supergrub2diskdownload/
    This one works, download the standalone IA-32/i386 EFI and paste it in (USB Drive (1))/EFI/boot/bootia32.efi .
    (use latest versions, no matter if it's unstable)
    4. Now you need to make a grub.cfg. The one I made looks like this
    menuentry 'Arch Linux i686'{
    echo 'Loading Linux core repo kernel ...'
    linux /arch/boot/i686/vmlinuz noefi nomodeset archisobasedir=arch archisolabel=ARCH_201404
    echo 'Loading initial ramdisk ...'
    initrd /arch/boot/i686/archiso.img
    menuentry 'Arch Linux x86_64'{
    echo 'Loading Linux core repo kernel ...'
    linux /arch/boot/x86_64/vmlinuz noefi nomodeset archisobasedir=arch archisolabel=ARCH_201404
    echo 'Loading initial ramdisk ...'
    initrd /arch/boot/x86_64/archiso.img
    NOTE: If you're using a later live image build, I advise to change the date accordingly. It's not necessary to do so, since the mount by label doesn't work, however, I like to keep everything intact.
    noefi flag seems unnecessary as well, though I have added it to prevent some kernel panics from happening, for just in case. It works without it, still, however you need the nomodeset flag or else you'll get a black screen!
    I'm not entirely sure where the grub.cfg goes, but I've put it in USB Drive(1)/boot/grub/ , /EFI/grub/ and in /EFI/boot/grub/ just to make it sure that it works.
    5. Create an ext2/3/4 (recommended ext2 for flash drives, not to wear it out) USB drive (2) and copy the arch folder to the root of the USB drive (2)
    ---- BOOT PROCESS ----
    Before this step, ensure that Secure Boot is set to OFF in the Aptio setup. Otherwise it will throw up an error in a red box crying it's not signed.
    6. Plug in the USB drive (1) into a USB port and while powering on the tablet, tilt the escape key to pop up a boot menu.
    7. Select UEFI: (your USB drive (1))
    8. GRUB 2 will pop up. If you're running the SuperGrubDisk version, you're gonna have to go to Everything and then scroll down until it says something like
    (hd0, msdos1)/boot/grub/grub.cfg
    and click on it to open the configuration data manually created.
    9. Simply select your desired version of Arch Linux live distro to boot.
    10. VOILAaa, not really... It'll pop up with a mount error saying it's a wrong FS to mount. This is where you plug in your USB drive (2) in place of the first one.
    11. Type in:
    # mount /dev/sda1 /run/archiso/bootmnt
    # exit
    12. Congratulations, you're running Arch Linux on your ASUS Transformer T100TA tablet!
    This is as far as I have went into running it. Installing it on a HDD would require mounting the mmcblk partitions, which I haven't looked into yet. For a start, I'd just recommend installing it on a USB drive, though you'd have to own one of the USB OTG converters or a USB hub. The screen is spammed with the mmcblk0rpmb timeout errors though and that is annoying. It stops after a while when it stops trying. Reboot doesn't work either, seems like acpi is broken.
    You could do it with a single usb drive, though it requires some knowledge of this tablet's EFI because it disallowed me from running a kernel on another partition other than FAT32. Grub pops up with an error:
    can't unload EFI services
    or something like that.
    I've also tried putting the USB Drive (2) in during grub and it pops up with an error with invalid sector sizes. That was to be expected.
    btw I know it's my first post, I'm just here to share this with you. I never had the need to ask for help but when absolutely necessary.
    PICS OF IT RUNNING
    Some USB devices aren't visible, like the camera.
    A custom partition layout without the recovery partitions. Yours may differ.
    Last edited by xan1242 (2014-04-13 22:54:46)

    I haven't tried much other than getting this live image to run on this machine. I'll attempt to install the base image using my desktop computer with the appropriate drivers and see how that goes. (or just install the wifi driver)
    That guy really made it to work much better than I imagined it to work at all! I'll see what can be done using the same drivers, though running Ubuntu seems tempting as well. He even got the touchscreen to work, which is really awesome. It seems that he also merged the drivers into the kernel image, which is going to be a challenge in Arch.
    Since he's using the 64 bit build of Ubuntu, I'll try it with x86_64 Arch as well to try and use his guide to make the drivers to work.
    EDIT: I have successully installed the base to an external drive and booted it on the tablet, however since the base was installed externally on another machine, I need to regenerate initrd. It boots on the fallback ramdisk, but still no wifi and the screen is spammed even more with the timeout errors. I've seen topics on Raspberry Pi having a similar issue and that it was repaired using some kernel flags, but I am not sure if those will work with the tablet. Also, using the bootflags jfwells used on Ubuntu work here as well, and gives full resolution output now. Wifi doesn't work. ip link doesn't give any signs of a wifi card present.
    EDIT2: Got Arch up and running relatively nicely on the tablet now. Though it is in the same state as the last edit in terms of functionality, it works I'd say well enough to be considered usable. I couldn't make the wireless card to work, for some strange reason, so I got a RT73 USB card (Edimax EW-7318USg to be precise, had to use 2 USB ports) and installed stuff on to the tablet. I ran X without a desktop manager, and the X apps worked fine, even with the touch screen (emulating a mouse, no right click) and I ran XFCE4 on it without a problem (with compositing).
    It simply needs more developed drivers on it, that's mostly it. The state is exactly the same as Ubuntu 14.04 that jfwells made to work (minus the wifi). I haven't played with the sound, either, due to the warning he posted, but I believe it works as it does in Ubuntu.
    The steps I made are as follows:
    1. Simply made another live ISO with the archiso set
    2. dd'd the image to a USB drive
    3. On the second USB drive I created two GPT partitions (200 - 300 MB for ESP, everything else ext2)
    4. Booted the live archiso USB drive
    5. Installed the base to the second USB drive while being mounted like this: ext2 partition -> /mnt and ESP -> /mnt/boot
    6. Installed GRUB x86_64-efi to simply generate a configuration
    7. Installed wireless utilities as well as everything else needed to make it to work
    8. To ensure bootability on the tablet, again, I put the IA32 GRUB to the ESP in /EFI/boot/bootia32.efi
    9. I have edited the grub.cfg, can't exactly remember with what, but this is what it looks like
    ### BEGIN /etc/grub.d/10_linux ###
    menuentry 'Arch Linux, with Linux core repo kernel' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-true-(hd0,gpt2)' {
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,gpt1'
    echo 'Loading Linux core repo kernel ...'
    linux /vmlinuz-linux root=/dev/sda2 video=VGA-1:1368x768e reboot=pci,force sdhci.debug_quirks=0x8000 rw quiet
    echo 'Loading initial ramdisk ...'
    initrd /initramfs-linux.img
    menuentry 'Arch Linux, with Linux core repo kernel (Fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-fallback-(hd0,gpt2)' {
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,gpt1'
    echo 'Loading Linux core repo kernel ...'
    linux /vmlinuz-linux root=/dev/sda2 video=VGA-1:1368x768e reboot=pci,force sdhci.debug_quirks=0x8000 rw quiet
    echo 'Loading initial ramdisk ...'
    initrd /boot/initramfs-linux-fallback.img
    ### END /etc/grub.d/10_linux ###
    I simply added the kernel flags jfwells added. It needs that root flag, or else it will not boot. I can't figure out the UUIDs though. It will reboot, but it will not shut down.
    10. Boot up your second USB drive on the tablet and... IMPORTANT - Boot with the fallback ramdisk - or else you're going to experience non functional input
    11. After booting it, you'll get the annoying mmcblk timeout spamming the screen. I haven't figured out how to fix it, but to hide it, type in
    # dmesg -n 1
    12. Generate another ramdisk (forgot the command, but search function should serve you)
    13. Reboot with the normal ramdisk now.
    14. After setting up the wireless connection, rock on with the pacman!
    At this point I installed a bunch of stuff, like Intel GPU drivers, xorg, xfce4, ntfs-3g, gparted,  and among other stuff I personally test stuff with.
    I couldn't mount the mmcblk partitions to at least somehow be able to edit data on the Windows partitions or the disk as a whole.
    Anybody willing to help getting Arch to run on this tablet is welcome.
    EDIT3: Internal WiFi working! Simply added "sdhci.debug_quirks=0x8000" flag.
    Last edited by xan1242 (2014-04-13 23:35:26)

  • How to set up an Ubuntu chroot inside Arch Linux [solved]

    I use Arch Linux (64 bits) as my desktop, but I'd like to have an Ubuntu chroot for development purposes. I installed schroot and debootstrap, created a directory for the jail, and executed:
    sudo debootstrap --arch amd64 lucid /var/chroot/ubuntu http://au.archive.ubuntu.com/ubuntu/
    Then I edited /etc/schroot/schroot.conf to include only one chroot:
    [ubuntu]
    description=Ubuntu
    type=directory
    directory=/var/chroot/ubuntu
    priority=1
    users=myusername
    root-users=myusername
    aliases=lucid,default
    "myusername" is a placeholder, I wrote my actual username.
    I should be able to "schroot -c ubuntu", but when I run the command I receive this error message:
    E: 20nssdatabases: /usr/bin/stat: cannot stat `/etc/networks': No such file or directory
    E: ubuntu-4df5c899-3603-4a37-ab0f-d81fc3855c8d: Preparação do chroot falhou: etapa=setup-start
    And then I'm back to the Arch Linux command line.
    What should I do to make my Amd64 Ubuntu chroot work?
    Thanks in advance.
    Last edited by leonardof (2010-07-24 19:30:31)

    Tip: touching /etc/networks in Arch Linux doesn't fix it. After creating the files schroot looks for in the host system, I can enter the jail but I have no networking.

Maybe you are looking for

  • CPU always at highest speed after 10.4.8 update

    Does anyone else have same kind of "problems" than I have after todays OS X update? Before the update CoreduoTemp showed that CPU speed was moving from 1GHz to maximum 2GHz. Usually it was 1.5GHz and only in hevy load it was maximum. Now when running

  • Request Product Service Form Broken...

    I know that this may not be the right forum, but I can't find one that fits. Of course, my ipod 20gig has stopped working. Right now I am trying to fill out a Request Product Service form and it's broken! Whenever I try to put in my postal code, it k

  • MacBook L style charger doesn't light up

    My MacBook charger that i have had for a couple of years randomly stopped working one day where it would not charge and the charger light would not light up. My friends chargers work fine on mine but mine broken one doesnt work on theirs. This is the

  • Initializing array of user-defined class

    I have a need to make an array of my own classes, simply to make a database organized. First, I defined my class at the start of the program: public class FBase String FName = ""; String FDate = ""; int FNameLength = 0; int FDateLength = 0; int statu

  • Get ItemGroupCode by looking its name via SDK not SQL

    Hi, Is it possible to get an ItemGroupCode by searching the GroupName ? with an ItemGroups I just have GetByKey(GroupCode) Ofr course if I'm forced to use a RecordSet I will but if there's a way to iterate through the GroupName I would prefer it Than