Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. CVE-2025-13032: Entering and Breaking the Avast Antivirus Sandbox Part 2 (safateam.com)
    3comments
  2. F-Droid 2.0 (f-droid.org)
    331comments
  3. Show HN: Make cursed fonts like Times New Bastard (mitpit.com)
    92comments
  4. Show HN: Whiteboard (YC W26) – An open-source IDE for thoughtful software design (github.com/devdotfast)
    114comments
  5. Why is the liver so weirdly regenerative? (dynomight.substack.com)
    200comments
  6. Pentium II at 600Mhz with Voodoo 3 Emulated on 86Box with M6 Mac Mini (nyaa.sh)
    1comments
  7. 2DWillNeverDie (2dwillneverdie.com)
    44comments
  8. Fearless SIMD v1.0 (linebender.org)
    35comments
  9. Rails World 2026 Opening Keynote [video] (youtube.com)
    357comments
  10. Toyota is taking the Corolla electric (electrek.co)
    553comments
  11. My weird new hobby: Wandering around Tokyo on Google Maps (ahmedhossamdev.com)
    143comments
  12. Using LLMs to trace alchemical knowledge and decode 17th century letters (resobscura.substack.com)
    25comments
  13. Two-tier encryption in the UK (macanorak.com)
    397comments
  14. Google’s Project Suncatcher to put ML infrastructure in space (blog.google)
    349comments
  15. Opus 5.5 is good at explainer videos (launchvideo.io)
    126comments
  16. Writing Parquet files using Haskell (datahaskell.org)
    13comments
  17. Book review: Is parallel programming hard, and, if so, what can you do about it? (ahelwer.ca)
    45comments
  18. What About Rails? (jardo.dev)
    2comments
  19. Jev Based Code Review (github.com/egma-ai)
    11comments
  20. The Board Game of the Alpha Nerds (2014) (grantland.com)
    36comments
  21. Sourcehut account takeover via build logs (XSS in ansi2html) (blog.arusekk.pl)
    22comments
  22. California is chasing wealth that has feet (landeconomics.org)
    616comments
  23. Security auditing in the age of (good enough) AI (trailofbits.com)
    13comments
  24. Show HN: Air-gapped file encryption as self-decrypting HTML page (apeleg.com)
    22comments
  25. Nokia Design Archive (2025) (aalto.fi)
    125comments
  26. The forgotten battle of East Lansing (eastlansinginfo.news)
    17comments
  27. WaveDigger: Dig into wireless signals to discover their physical locations (github.com/christianrowlands)
    20comments
  28. The Bayeux Tapestry: Woven by the Victors (historytoday.com)
    10comments
  29. Geothermal heat map of US hot springs (soakingsprings.com)
    39comments
  30. Show HN: Koi.rest – watch some fish and regain your balance (koi.rest)
    49comments

Snowflake Server

73 pointsby 14y agomartinfowler.com
33 comments
14y agoHN ↗

"If you disable any direct shell access to the server and force all configuration changes to be applied by running the recipe from version control, you have an excellent audit mechanism that ensures every change to the environment is logged."

Um. Yeah. You're also creating a situation where, should anything possibly go wrong (now, how could that happen), you cannot hop on the server, diagnose, and possibly do some quick-try fixes. I can see limiting shell to a small trusted subset of colleagues (sorry, devs), but not eliminating it altogether.

Automated management, "system-as-code", devops, and all that has its place. The problem with virtually all existing systems for automated configuration management (cfengine, puppet, chef, Oopsware), is that they are highly non-transitive, and effectively bin years or decades of administration experience. They're fine once you've worked out the kinks, but as anyone who's worked with these tools can tell you, the one thing they're best at is screwing up all of your systems simultaneously.

"Etch" (http://sourceforge.net/projects/etch/) is one tool I've looked at briefly that appears to take a different tack, and is amenable to taking on-host changes and incorporating them into the configuration management system itself. One of the criticisms I've seen of it is that it's rather Linux and/or specifically Debian-centric, which may well be as Debian offers some very strong tools for managing, assessing, and maintaining system state (policy, APT, debconf). While dependencies can be painful when they keep you from doing what you want to do, as with most good safety systems, it's generally because you really don't want to go there (and if you do, there are means, within the framework provided by Debian, to get you there).

One way to avoid snowflake systems is to use tools that manage dependencies, stick within them to the greatest extent possible, and where that's not an option, to put your own modificiations within that same framework.

14y agoHN ↗

I just use fabric.

I just start writing code to provision/configure the machine for the role in question and don't stop until I have something that can reliably take a blank-slate server and have it rolling by the end of the function.

Easiest way to do devops I've seen yet. I didn't care for chef/puppet/cfengine.

Particularly since I can cherry-pick servers for testing pretty easily with fabric before I run the code against the rest of the machines.

14y agoHN ↗

According to the Internet Archive, it hasn't been online since roughly 2009.

14y agoHN ↗

http://pypi.python.org/pypi/Fabric/0.9.0

Edit:

The primary weakness of my approach is that for convenience's sake, I rely heavily on apt-get. So hypothetically I'm tied to the debian family. (we use Ubuntu LTS of a couple different versions)

Strictly speaking this disadvantage is unnecessary, you could do all from-source builds using fabric if you wanted. Didn't seem like a constructive use of my time though.

Sample task in my fabfile:

https://gist.github.com/3086836

I'll let you guess from the function name what it does.

The magic word of devops is "idempotence".

14y agoHN ↗

I had a modest epiphany some weeks back thinking about server configuration management: if you want to manage configurations on a given node (to use Chef lingo), it's best to work within a system that facilitates and/or encourages this.

For a number of reasons, Debian (or faithful derivatives) comes closest to this of any platform I've encountered.

That said: fabric appears to be little more than a multi-system aware task runner. Somewhat like dsh (distributed ssh / dancer's shell): http://www.netfort.gr.jp/~dancer/software/dsh.html

... or like Capistrano, as the Debian package description suggests (modulo installing Rails).

There's a bad pimp joke around "idempotence" waiting to be made.

Your task here would seem to install Oracle's Java 7 HostSpot JVM.

How do you get around the licensing question(s) (or is that what the "-y" is for)?

14y agoHN ↗

That's what the -y is for.

fabric appears to be little more than a multi-system aware task runner.

And C is little more than a portable assembler ;)

14y agoHN ↗

Fair enough. I'm not trying to be trite, just reading what I see.

14y agoHN ↗

There's a new project called Ansible that may be of interest to you:

http://ansible.github.com/

While that page has a long list of things they do, the important bits relevant to your comment are

1. a tighter focus on idempotence than Fabric 2. an easy-ish way to integrate package management so you could potentially use the same script to kick off either yum or apt depending on the box

14y agoHN ↗

The original reason I abandoned chef and puppet is that I didn't like something getting between me and the shell.

Why would I make the same mistake twice? My only real dissatisfaction with Flask is that it cannot handle dispatching its work in parallel. Not a big deal though.

I like knowing exactly how things get done.

14y agoHN ↗

Doesn't Fabric support parallel instructions now? I think I heard something about that, although I'm not entirely sure...

14y agoHN ↗

Oh God, why do they put hosts in /etc/ansible? Why would I corrupt my system installation with project-specific files? What I want to do is make a "<project>-deployment" folder and have everything related to deployment there.

Why the hell would I store anything about deploying one of my projects in /etc/?

14y agoHN ↗

I did the same thing. What's nice about the Phoenix approach is that you start with a known state (base Ubuntu install or whatever) and end with a known state (running your setup) and completely ignore all other possible states. A tool like chef or puppet has to have a lot of complexity around examine a node, determine what state it's in and figure out how to get it to the desired state.

I also use boto in my fabfile, so that I can run a single command to launch an EC2 instance, install & configure software on it, save an AMI and terminate the instance. It's a like having a Makefile that compiles machine images:

    > fab build:<role> <region>

I wouldn't go as far as Fowler's "disable the shell" idea, but it doesn't take much discipline to do all significant changes by building new AMIs.

14y agoHN ↗

You mean you don't believe in making your own AMIs? I don't see how you could run an instance without an AMI.

14y agoHN ↗

I mean I don't believe in AMIs. You seem to think I'm an Amazon customer.

14y agoHN ↗

No. I'm an Amazon customer.

If you prefer some other IaaS, fine. The point is that fabric can drive both the virtualization API and the actual set up of servers over SSH. I have a fake region called "dev" that runs the build against a vmware image on my local machine. It could work with Softlayer or Joyent or Rackspace or CloudFoundry or whatever.

Fabric and an IaaS provider is a really nice way to implement the PheonixServer pattern.

14y agoHN ↗

I'm curious, would acquiring/hacking your fabrick "admin" machine give me access to all your servers?

14y agoHN ↗

There is no "fabric machine" and you'd have to have my ssh keys to use the fabric scripts against my hardware.

14y agoHN ↗

Do you have a large number of servers or just smallish deployments? Fabric is cool, but at some point the pull model starts to be better than push. You probably don't want to actually wait at the console and try to spot errors when deploying 100+ nodes - and this is where chef/puppet is actually nice.

14y agoHN ↗

Smallish. I'm not trying to solve problems I don't have.

14y agoHN ↗

I decided to use Fabric as well, because then I could just use apt to install packages, which strikes me as a far superior way than building everything from source.

However, it took me days to complete the script and make it moderately reusable (and completely idempotent and able to handle different configurations), and it still doesn't do as much as I want it to. For example, I just noticed that Ansible[1] can tell whether a change needs to restart a service (e.g. if a config file changed) and only then do it.

That's pretty useful, but my script can't really handle it.

[1] http://ansible.github.com/examples.html

14y agoHN ↗

This idea - combined with the Phoenix Server concept - seems very powerful to me.

In an odd way, it feels like this is main advantage that PaaS offerings like Heroku have: they force you into the mindset of not relying on hand tinkering with the server config.

14y agoHN ↗

I just wanted to ++puppet.

Once you have more than a few servers you will go crazy if you don't have a good configuration management setup. The real advantage of using a tool like puppet over something home grown is that you can hire someone to come in and manage puppet who will be able to understand how your automation works without having to have your system admin sit down and explain the 1000 little arcane perl scripts that make everything work.

We use client-server puppet, but require all the updates to be manually run, which makes rollouts a little bit more deterministic and avoids the "Hey we just changed puppet and everything broke" effect.

14y agoHN ↗

Puppet is so 2011, the future is nixos. Once we have year of the Haskell desktop that is.