Tagged: rant Toggle Comment Threads | Keyboard Shortcuts

  • penguin 22:23 on 2020-04-16 Permalink | Reply
    Tags: camel, , rant, success   

    A more peaceful rant about Java & Camel 

    I did it. I feel like I survived something, like I am on the path on enlightenment (and it feels like raising the foot for the first step in a yourney which I know to be several AEs long). Anyway, I’m kinda happy.

    What did I do? I succeeded to write this Java code using the Apache Camel library (and yes, that’s it – in total):

    import org.apache.camel.main.Main;
    
    public final class CamelPusher {
    
        private CamelPusher() {
        }
    
        public static void main(String[] args) throws Exception {
            Main camelMain = new Main();
            // https://is.gd/P8SzKX
            camelMain.configure().withXmlRoutes("file:*.xml");
            camelMain.run(args);
        }
    
    }
    

    Impresive, huh?

    What took me longest was to add the “file:” in the line camelMain.configure().withXmlRoutes("file:*.xml");. Yup, really.

    Code-wise, that is. It took me even longer to set this up:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>de.company.business</groupId>
      <artifactId>camelocclient</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <name>CamelOCClient</name>
      <description>The thing that transfers payment files to OC</description>
    
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    
      <repositories>
        <repository>
          <id>spring-releases</id>
          <url>https://repo.spring.io/libs-release</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>spring-releases</id>
          <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
      </pluginRepositories>
    
      <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.2.5.RELEASE</version>
        </dependency>
    
        <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-core</artifactId>
          <version>3.2.0</version>
        </dependency>
    
        <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-ftp</artifactId>
          <version>3.2.0</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.camel/camel-spring -->
        <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-spring</artifactId>
          <version>3.2.0</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-simple</artifactId>
          <version>1.7.30</version>
        </dependency>
    
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.7</version>
            <configuration>
              <allowMajorUpdates>false</allowMajorUpdates>
              <!-- https://stackoverflow.com/a/22174801/902327 -->
              <!-- fucking maven shit honestly those java assholes suck so badly -->
              <rulesUri>file:///${project.basedir}/pom-versions-ruleset.xml</rulesUri>
            </configuration>
          </plugin>
          <plugin>
            <!-- see here: https://is.gd/HNFI0H -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.1.12.RELEASE</version>
            <executions>
              <execution>
                <goals>
                  <goal>repackage</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <groupId>org.codehaus.mojo</groupId>
            <executions>
              <execution>            <!-- Run our version calculation script -->
                <id>git-tag</id>
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>git</executable>
              <arguments>
                <argument>tag</argument>
                <argument>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}${parsedVersion.qualifier?}</argument>
              </arguments>
            </configuration>
          </plugin>
        </plugins>
      </build>
    
    </project>
    <!-- I FUCKING HATE MAVEN. -->
    

    And this, cause maybe I still don’t fully get maven (and with maybe I mean definitely, and yes I know there’s an error in the Makefile, I’m gonna fix it – later):

    all: clean build prepare-test test
    .PHONY: all
    
    clean:
        rm -rf tmp
    .PHONY: clean
    
    build:
        mvn package
    .PHONY: build
    
    prepare-test: clean
        mkdir -p tmp/from_here tmp/to_here tmp/and_from_here tmp/to_here_as_well
        echo deeply > tmp/from_here/i-want-to-be-moved.txt
        echo deeply > tmp/and_from_here/hashtag-metoo.txt
        cp target/camelocclient-SNAPSHOT.jar tmp/
        cp test-config.xml tmp/
    .PHONY: test
    
    test:
        cd tmp; pwd; java -cp . -jar camelocclient-SNAPSHOT.jar
    .PHONY: test
    
    run: test
    .PHONY: run
    
    .PHONY: _git_dirtycheck
    _git_dirtycheck:
        [[ ! -z "git status -s" ]] || (echo -e "\n\n***** working dir is dirty. *****\n\n" && false)
    
    .PHONY: _major
    _major: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.nextMajorVersion}.0.0 \
            versions:commit
    
    .PHONY: _minor
    _minor: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.nextMinorVersion}.0 \
            versions:commit
    
    .PHONY: _patch
    _patch: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.nextIncrementalVersion} \
            versions:commit
    
    .PHONY: _set_version
    _set_version: _git_dirtycheck
        read -p "new version: " VERSION ; \
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=$$VERSION \
            versions:commit
    
    .PHONY: _snap
    _snap: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
            versions:commit
    
    .PHONY: _tag
    _tag:
        git commit -am "Version bump"
        mvn build-helper:parse-version exec:exec
    
    .PHONY: _snap_tag
    _snap_tag: _snap _tag
    
    .PHONY: _addsnap
    _addsnap:
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.incrementalVersion}-SNAPSHOT \
            versions:commit
    
    .PHONY: _release
    _release: _git_dirtycheck
        mvn build-helper:parse-version \
            versions:set \
            -DnewVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.incrementalVersion} \
            versions:commit
    
    .PHONY: major
    major: _major _tag build _snap_tag
    
    .PHONY: minor
    minor: _minor _tag build _snap_tag
    
    .PHONY: patch
    patch: _patch _tag build _snap_tag
    
    .PHONY: addsnap
    addsnap: _addsnap
    
    .PHONY: rel
    rel: _release _tag build _snap_tag
    
    .PHONY: release
    release: rel
    
    .PHONY: set-version
    set-version: _set_version _tag build _snap_tag
    
    .PHONY: setver
    setver: set-version
    

    So this is it. That abomination took me days to build.

    So now I can do “make release“, get a .jar file, and place something like this next to it:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
      DOKUMENTATION:
      https://camel.apache.org/manual/latest/spring.html
    -->
    
    <routes xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="file:from_here"/>
            <to uri="file:to_here"/>
        </route>
        <route>
            <from uri="file:and_from_here"/>
            <to uri="file:to_here_as_well"/>
        </route>
    </routes>
    

    … having a freely configurable, all-purpose, no-nonsense Camel engine to my disposal, which I can then deploy to any host of my liking to do things which are useful. In that case – it’s supposed to transfer files (the “left” side of the system, a couple of deployments) to S3, and then pull them out (the “right” side of it, one deployment) into a folder on a target machine.

    This is it, this is all, this is basically the most trivial use case ever invented, and it’s supposed to be replaced with something “real”. Let’s see how long it takes to get there.

    Now, am I happy? Yes. Is this … “good”? No. Does it work? Probably (it does with a file server / sftp transfer system).

    But the best part is: I kinda, sorta understand a little bit of what I did. And I am starting to think that Camel might actually be awesome, and maven actually useful – once you start understanding the concepts and ecosystem. But that’s just a vague possibility, given that I still don’t ­čśë .

    I published the files here as well.

     
  • penguin 17:47 on 2020-04-13 Permalink | Reply
    Tags: , rant   

    A big fucking rant about Java 

    Well, I’m back to writing Java. It was supposed to be simple – an Apache Camel .jar file which just reads the route definitions from a nearby *.XML file in the same directory. So it can be re-used, because we have a couple of dead simple use cases which just require a Camel runtime and no special Java Beans.

    Simple, right.

    I’m playing Doom Eternal for fun at the moment. And just thinking of this abomination called “maven”, which Java uses to build shit makes me wish for all maven devs to rot in hell eternally. This piece of junk is basically undocumented. Don’t get me wrong, theres tons of written stuff, intros, tutorials, etc. about maven. It’s just after reading all of them you’re still the same code-copy-pasting monkey you were before. Once you hunted down the snippet on Stackoverflow you go on to the next blackbox.

    Examples? Sure.

    • Versions in build plugins. Maven complains, but countless examples I found don’t use any version. (A Java illness, it seems all examples have to be incomplete, otherwise it’s no fun for the developer, right?).
    • Complexity. You can configure the versions-maven-plugin to update the version numbers. To ignore alpha / beta / whatever versions you have to write a regex expression in a separate file and import that to the pom.xml. Of course you write the import statement in the configuration section of the plugin. Writing the rules in there? Naaaaah, too easy my friend. Extra file please.
    • Commands. There’s no help. There’s only “plugins”. No starting point, no idea what’s “default” and what the 1, 2, 3 steps are to get your app built. Just a bunch of horseshit you try out until your app is built. Or you think it is. (Or back to Stackoverflow, take the first example that works and go on to the next blackbox …)
    • Reposities. It seems I built my app several times correctly, then I configured some repositories, and suddenly it was built … more correctly. Don’t ask me why.

    Let’s continue with Spring. They once were (and probably still are) on the forefront of “modern”, modularized, reusable, enterprise-pattern-enabled, lightweight Java. Problem is, that’s still way too complex for any sane human being.

    Examples? Sure.

    • Configuration. I try to use Apache Camel. Seems to be a great product, all is configurable using either Spring DSL or code. Now if you want to do it with Spring, until today I invested days to find out how to read the fucking configuration from that god-damned configuration file. It’s just. Not. Possible. Sure, countless examples on the net, but that leads me to …
    • the documentation. Just some random notes:
      • The examples there are just don’t cut it and come basically without any documentation.
      • All links which sound like they could help lead to a 404 page.
      • “if you want to do X you can ‘easily’ do this using Spring XML” is a sentence I want to burn now, because … well, there’s no example, usually. You’re just being redirected to some Spring page which explains the Spring concepts in epic detail, with no connection whatsoever to the actual problem with the actual fucking library.
      • If they include a code snippet it’s always without any context. So you have the critical 3 lines, but if you want to include them into an actual application, you wonder about imports, namespaces, setup boilerplates, and countless other things every. Single. Time.
      • In summary it seems the docs are there for the pros who want to just quickly look something up they inconveniently forgot cause they already know a shit ton of shit. If you’re new to this? Yeah, go ahead, it’s easy, here’s a link to the Spring concepts.
      • Oh yeah, and it might be it’s just plainly, utterly, horribly wrong. But Java being nothing but enterprise, it’s at lease consistently wrong all the time.

    I think I managed to solve the problem just now. Unfortunately this cost me days, and only because of the most brainwashed, brainfucked eco-system I can imagine.

    (Disclaimer: I think Java has some really cool parts as well, just right now – I honestly don’t care. At all.)

     
    • oscerd 06:21 on 2020-04-14 Permalink | Reply

      All your findings about the first experience with Apache Camel may be really useful if reported to the users mailing list or dev mailing list. It would be valuable improve this experience from a documentation perspective. So, if you have time, it would be nice if you report back to the community mailing list.

  • penguin 08:07 on 2016-06-28 Permalink | Reply
    Tags: rant, rspec, rspec-puppet, ,   

    Loathing RSpec and Puppet 

    There are words for how much I hate RSpec (especially RSpec-Puppet), but they would be too harsh to write down.

    So now that I don’t have to google the same shit over and over again, here’s what you have to do to get basic puppet module testing up and running (replace $MODULE with your module name, of course):

    $MODULE/Rakefile

    require 'rubygems'
    require 'puppetlabs_spec_helper/rake_tasks'

    $MODULE/.fixtures.yml

    fixtures:
      repositories:
        concat: git://github.com/puppetlabs/puppetlabs-concat.git
        # alternate method, for specifying refs
        stdlib: 
          repo: git://github.com/puppetlabs/puppetlabs-stdlib.git
          ref:  1.0.0
      symlinks:
        # do _not_ forget this
        $MODULE: "#{source_dir}"

    $MODULE/spec/spec_helper.rb

    require 'rubygems'
    require 'puppetlabs_spec_helper/module_spec_helper'

    $MODULE/spec/classes/$MODULE_spec.rb

    # see also http://rspec-puppet.com/
    require 'spec_helper'
    
    describe '$MODULE' do
      context 'default' do
        it {
          should contain_file('/etc/haproxy/haproxy.conf')
        }
    
        # or ...
        it do
          is_expected.to contain_file('/this/syntax/is/even/more/retarded')
        end
      end
    end

    Final note

    It’s “rake spec”, not “rake test”. Of course.

     
  • penguin 11:20 on 2013-07-26 Permalink | Reply
    Tags: , rant   

    Nervige Puppet Fehler 

    Was geht hier nicht?

    class { 'whatever' : 
        do     => 'something', 
        before => Class[ 'something_else' ],
    } -> 
    
    class { 'yeah_yeah' : do => 'even_more', }

    Na? Niemand? Gut. L├Âsung: “before =>” und “->” mischen sich nicht. Das w├Ąre nicht so schlimm, w├Ąre die Fehlermeldung nicht absolut … unzureichend:

    err: Could not retrieve catalog from remote server: Error 400 on SERVER: undefined method `<<' for {}:Hash on node bstrap_foreman_v2. ...

    Noch sowas dass man nicht mehr vergisst. Gl├╝cklicherweise gibts grafische git logs …

     
  • penguin 16:05 on 2013-07-18 Permalink | Reply
    Tags: , rant   

    Puppet, Arrays & Iteratoren 

    Endlich, endlich, endlich kommt in Puppet 3.2 die M├Âglichkeit, Schleifen zu bauen. Dann k├Ânnte ich eventuell folgende Aufgabenstellung ein klein wenig einfacher realisieren (aktuell arbeite ich bis zur endg├╝ltigen Umstellung unserer Systeme mit Puppet 2.7):

    Fasse alle im Rechner befindlichen Blockdevices der Form “/dev/sd*” – aber au├čer /dev/sda – in einer LVM volume group zusammen.

    Das Herausfinden der Blockdevices erledigt ein Fact aus Facter … naja, nicht ganz – ein in Facter 2.0 verf├╝gbarer Fact, den ma aber dankenswerterweise zur├╝ckportieren kann. Dieser liefert uns $blockdevices – eine Komma-getrennte Liste der gefundenen devices, allerdings ohne “/dev/”, also nur “sda,sdb,sdc”.

    Das hinzuf├╝gen, und dann … ja, was dann? In Ruby kein Thema, aber jetzt m├Âchte ich von “sda,sdb,sdc” zu [“/dev/sda”, “/dev/sdb”, “/dev/sdc”].

    Und das geht so:

    # next line broken up for readability
    $devices_tmp    = inline_template( '
        <%= devs=scope.lookupvar("::blockdevices")
            .split(",")
            .select{|f| ! f.include? "sda" }
            .select{|f| f.include? "sd" }
            .collect{|f| "/dev/" + f}.join "," %>' )
    
    # here we split the string back to an array. 
    $devices_wanted = split($devices_tmp, ",")
    
    # but it works.
    # isn't life shit?
    notify { $devices_wanted : }

    Sch├Ân ist anders. Falls jemand eine bessere Idee hat – immer her damit …

     
  • penguin 18:21 on 2013-07-03 Permalink | Reply
    Tags: , rant   

    The year of the … Applications. 

    Es gibt ein paar Dinge ohne die ich nicht mehr so richtig leben m├Âchte: Text expander, clipboard history, intuitiver Editor (ViM und emacs z├Ąhlen nicht), und ein paar andere h├Ątte ich gerne. Und hier ist des Linux gr├Â├čtes Plus des Linux gr├Â├čter Fluch: Die Flexibilit├Ąt. Ein paar recht Gnome-lastige Eindr├╝cke:

    Text expander: Hier tut AutoKey einen guten Job. Verwendet Python als Skriptsprache f├╝r “fancy stuff”, schon ziemlich gut. Leider f├╝hrt ein fehlerhaftes Skript zu einem Einfrieren der Applikation, weniger praktisch. Au├čerdem werden die Tastaturk├╝rzel nicht nach der Zuweisung aktiv – sondern erst nachdem man in der tabellarischen ├ťbersicht auf die “Abbr” (Abbreviation) Spalte der richtigen Zeile klickt, denn dann erst “erscheint” der K├╝rzel dort, und dann erst ist er aktiv. Muss wohl ein Bug sein. Dennoch – klar der funktionale Favorit der Liste hier.

    Clipboard manager: Gibts. Aber nicht von Gnome, nur “normales” Gtk+ Programm. Nimmt aber bei weitem nicht alle Tastaturkombis an (ich bin z.B. CTRL-├ľ gewohnt, keine Chance). Bedienung: naja. F├╝hrt dazu dass ich ihn nicht nutze, und daher recht angepisst bin.

    Chat app: Gnome hat Empathy. Dies kann jedoch kein OTR (off-the-record messaging, Verschl├╝sselung f├╝r Chats). Nicht weiter schlimm, g├Ąbe es nicht ein Ticket aus 2008 und gestartete Open-Source-Bem├╝hungen. Die FAQ dazu trocken: “Man ist der Meinung” dass L├Âsungen wie OTR nicht wirklich zielf├╝hrend sind, da das Protokoll Verschl├╝sselung inh├Ąrent unterst├╝tzen sollte. Das wolle man dann unterst├╝tzen (also XMPP mit Jingle, nichts anderes). Au├čerdem: Da Empathy auf Telepathy beruht m├╝sste zuerst die Telepathy lib erweitert werden, “wir sind nicht zust├Ądig” kommt da r├╝ber. Da ich das aus Prinzip m├Âchte nutze ich Pidgin, dessen Integration in Gnome … “ok” ist. Daf├╝r wesentlich sch├Âner zu bedienen mit einer eigenen Men├╝leiste, und sinnvollen Men├╝s.

    Editor. Wir alle kennen Notepad++, ViM und emacs. Meine emacs-Zeiten sind lange vorbei (schade irgendwie, aber so isses halt), daher finde ich die beiden letzteren einfach befremdlich – zu viel mehr als “:wq” in ViM oder CTRL-X CTRL-C in emacs reichts nicht mehr. Daf├╝r ist unter Windows Notepad++ sehr gut f├╝r produktives Arbeiten geeignet. F├╝r Gnome: Gedit. Und das ist vergleichbar mit Notepad. Ohne “++”. Eine vollkommen sinnfreie app. Gl├╝cklicherweise gibts Sublime Text f├╝r Linux (danke, danke, danke!).

    Allgemein sind die Ecken sehr, sehr rund:

    • Notifications. Die Gnome-Notifications sind zwar nett, aber das kleine “x” oben rechts reagiert bei mir zumindest immer erst auf den zweiten Klick.
    • Fonts. Warum hat Freetype nicht von vorneherein Ubuntu-Patches installiert? Das ist ein kaum zu beschreibender Unterschied. Nicht legal?
    • Keyboard-Shortcuts: Manchmal konfigurierbar, manchmal nicht, manche per Textdatei, manche GUI. Manchmal kann man sie zuweisen, funktionieren aber nicht. Manchmal ist eine Vorauswahl in Modifier-Keys oder insgesamt in Shortcuts getroffen.
    • Wenn KDE nun mal die bessere Applikation f├╝r etwas hat, dann sieht das aus wie Java Swing unter Windows: Fremd. Genauso umgekehrt.
    • Bookmarks in Nautilus kann man nur durch CTRL-D oder einen Klick auf das “Optionen”-Zahnrad (da?!?) setzen. Nicht per drag-and-drop, und nicht ├╝ber das rechts-Klick-Men├╝, was beides ca. 100x intuitiver w├Ąre.
    • Die Zuweisung von Dateiendungen zu Programmen funktioniert irgendwie … nicht.
    • Den Hauptbildschirm in den Display-Einstellungen festzulegen ist sehr unintuitiv (man ziehe den winzigen schwarzen Balken von einem Monitor auf den anderen – wenn man das wei├č total einfach, ansonsten eher unintuitiv)

    Und demn├Ąchst muss ich einfach mal einen positiven Post schreiben, schlie├člich arbeite ich mit dem System, und das auch noch gerne …

     
  • penguin 14:49 on 2013-07-01 Permalink | Reply
    Tags: mobile life, rant   

    Congstar 

    Seit heute morgen bin ich bei Congstar, gewechselt von O2 (bzw. discoPlus) weil mir dort die Gespr├Ąche doch recht h├Ąufig abbrachen. Sah immer lustig aus – man schaut aufs Telefon, sieht 5 Balken, dann pl├Âtzlich “Suche”, dann baut er wieder auf, und man bewegt sich dabei keinen Meter. Das fand ich nicht soo spannend, also ging ich zur├╝ck zum Altvater D1.

    Congstar allerdings gibt sich beste M├╝he, einen nicht so besonderen ersten Eindruck zu machen. Ich lege die SIM-Karte ein, und bekomme erst mal “SIM gesperrt” angezeigt. Aha. Leider haben die mir keinen PIN geschickt. Ich also auf Verdacht ins online Portal, in dem ich meine PIN tats├Ąchlich heraussuchen konnte. Eingegeben, ok. Dann bemerke ich das Fehlen eines Betreiberlogos, bzw. einfach jeglicher Betreiberinfos in der Kopfzeile. Dachte mir “das wird schon”, und fuhr zur Arbeit. Dort bekam ich nach ca. 1h gegen 9:45h eine email, ich k├Ânne jetzt meine PIN auf der Congstar-Seite abrufen. Aha. Ja, danke. Ich nehme das zum Anlass und google mal nach Betreiberlogo und Congstar.

    Was ich da finde ist wenig ├╝berzeugend. Congstar verwendet offenbar fehlerhafte SIM-Karten, und das schon seit 2011, und angeblich ist dieser Zustand seit April 2012 nicht mehr aktuell. Naja. Congstar-Hilfe sagt, aus “technischen Gr├╝nden” sei die Anzeige auf einem iPhone nicht m├Âglich, und die in Foren propagierte L├Âsung ist, sich eine Nano-SIM mit Micro-SIM-Adapter zu besorgen.

    Das geht besser.

     
  • penguin 09:32 on 2013-07-01 Permalink | Reply
    Tags: , , , , rant   

    The year of … the Printer. 

    Ah, ich bin langsam – der Post schimmelt schon eine Weile hier vor sich hin, weil ich den Screenshot hochlade. Jetzt isses soweit. Es geht also weiter mit: Drucken. Denn irgendwann lief das System schlie├člich, und ich kam an den Punkt, an dem ich etwas drucken wollte. Gnome war installiert, Firefox auch, also theoretisch (kenne ich ja vom Mac, da verrichtet CUPS ja auch hervorragende Dienste) einfach die WebGui aufrufen, Drucker ausw├Ąhlen, fertig.

    Zuallererst musste ich an Linus denken: root-Passwort-Eingabe f├╝r die Administration von CUPS n├Âtig. Hm. Egal, eingegeben, dann “Add Printer” geklickt, und erst mal erfreut folgendes gesehen:

    add_printer

    Hm. Sieht erst mal gut aus, oder? Na, jedenfalls bis man sich die Frage stellt: Welcher der Drucker ist jetzt genau der hier im B├╝ro? Nur Typenbezeichnungen, kein Standort, keine IP? Nicht optimal.

    Der Einfachheit halber einfach manuell installieren. IP vom Kollegen erfragt, und los. Und stop. Drucker URL eingeben … nur wie? Mit “http://&#8221;? Oder “lpd://”? Oder “ipp://”? Und hier dann mit oder ohne “/ipp” am Ende? Ich entschied mich f├╝r “ipp://” ohne “/ipp”. Dann bitte “Make and Model” ausw├Ąhlen, Brother war nicht in der Liste, Ende.

    Aber kein Problem, Brother gibt ja eigens Linux-Treiber raus. Nur nicht auf der “normalen” Brother-Downloads-Seite, die hat nur Mac und Windows-Treiber. Hm. Ich bin faul, also mal die Variante versucht, die fr├╝her mal ging: Zur├╝ck, HP Drucker ausgew├Ąhlt, PCL6, Testseite gedruckt, klappt … nicht. Na gut, w├Ąre auch nicht sch├Ân gewesen, aber trotzdem.

    Nochmal zur├╝ck, Drucker gel├Âscht. Dann Google bem├╝ht, die “richtige normale” Brother-Homepage f├╝r den Linux-Support gefunden (w├Ąre unter Support -> Linux gewesen, und nicht Support -> Downloads, aber ehrlich, wer schaut noch den Rest der Seite an wenn er das Bild unten sieht? Ich jedenfalls nicht).

    brother-homepageDort gibts f├╝r das von mir gesuchte Modell 5 Treiber zum herunterladen, und zwar folgende:

    • LPR driver (jeweils als rpm + deb)
    • cupswrapper driver (jeweils als rpm + deb)
    • ppd file

    Aha. Ich entschied mich f├╝r PPD, ich bin ja CUPS, ne, und nochmal von vorn: Drucker hinzuf├╝gen, manuell, URL diesmal mit “ipp://…/ipp” (also mit “/ipp” am Ende), und siehe da – jetzt kamen auch automatisch Brother-Ger├Ąte in der Liste (WTF?), wenn auch nicht das Modell hier im B├╝ro. Daher runtergeladenes PPD eingebunden, best├Ątigt, Testseite gedruckt, fertig.

    Nicht so ganz optimal.

     
  • penguin 10:11 on 2013-06-24 Permalink | Reply
    Tags: , , , rant, system   

    The year of … the Installation. 

    Wie versprochen – ein klein wenig gemecker ├╝ber die Linux Desktop Bem├╝hungen. Erste H├╝rde: Die Installation.

    Meine Wahl fiel auf Arch Linux, das sollte gut sein, und ich wollte nicht auf den Ubuntu-Zug aufspringen. Bedingungen: Vollverschl├╝sselte Festplatte (incl. Swap und System), verlangt der Kunde. Ist prinzipiell gut dokumentiert, auch durch eine Howto eines Kollegen. Aber ich wollte statt LVM auf Partition mal BTRFS testen – wenn schon denn schon.

    Um es kurz zu machen – die Installation dauerte knapp 3 Tage.

    Zuerst bootete das System nicht. Grub 2 wollte partout nicht starten und hing – auch nach mehrfachem neu schreiben des Bootsektors – in einer Boot-Loop fest. Zwischendrin hatte ich Arch schon aufgegeben und es mit Ubuntu 13.04 versucht – nur auch hier startete Grub nicht durch, sondern hing einfach. Schlie├člich gelang mir ein Systemstart nach einem vollst├Ąndigen ├ťberschreiben der ersten 50 MB der Festplatte durch /dev/random, und einer Neuinstallation von Arch vom allerersten Schritt an.

    Anschlie├čend installierte ich Grafiktreiber, X, Gnome, aktivierte Swap in der /etc/crypttab und startete neu.

    Der Laptop startete, ich muss mein Passwort f├╝r die Festplatten-Entschl├╝sselung eingeben, der Bildschirm flackert, und der Rechner steht. Erste Vermutung: Grafiktreiber. Keinerlei Debug-Meldungen nirgendwo.

    Nach einer weiteren Arch Neuinstallation, da ich irgendwann einfach nicht weiter wusste, kam ich irgendwann durch Zufall und Faulheit auf den Trichter, dass es nicht die Grafik war (denn die ging dann auf einmal), sondern ein fehlerhaftes Einbinden der swap-Partition in der /etc/crypttab. Stand – wie ich im Nachhinein erfuhr – auch sehr klein im Kleingedruckten. So halb meine Schuld also, dennoch sehr, sehr schlecht zu diagnostizieren, und mit enormem Zeitverlust verbunden. Dass vergesse ich auch so schnell nicht wieder.

     
  • penguin 23:41 on 2013-06-21 Permalink | Reply
    Tags: , rant   

    The Year Of The Linux Desktop! 

    Ein neuer Blog, ├╝ber Linux, Puppet, Systemadministration, und was mir sonst noch so technisches einf├Ąllt. Erstes Thema: Der Linux Desktop.

    Es ist eine Ewigkeit her, seitdem ich haupts├Ąchlich mit dem Linux-Desktop gearbeitet habe. Linux Server? St├Ąndig. Dauernd. Immer. Aber Linux Desktop? ├ťber 7 Jahre nicht mehr, mindestens. Und jetzt – die erste Frage in meinem aktuellen Projekt war: Was magst haben? Linux? Windows? ­čÖé . Oh wie geil – Linux nat├╝rlich! Endlich konnte ich mal mit einer der aktuellen, vielgelobten, gut gereiften Linux-Distris arbeiten.

    Dennoch bin ich von der Entwicklung der letzten Jahre alles andere als begeistert. In den n├Ąchsten Posts erl├Ąutere ich anhand einiger Beispiele aus erster Hand, warum.

    Und ja, ich fange mein neues Blog mit einem klein wenig Gemecker an. Man g├Ânnt sich ja sonst nix ­čÖé . Trotz allem bin ich ein Fan, man redet schlie├člich nicht ├╝ber Dinge, die einem egal sind.

     

     
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
shift + esc
cancel