Allowing external email forwarding in Office 365
We use Zimbra as our main email server. We also have Office 365 subscription to make working with our clients a bit easier. The challenge is that when customers send us, say, Teams meeting invites, they typically use autofill and the email gets sent to our Office 365 mailboxes which nobody really looks at.
It is possible to fix this by configuring email forwarding. That is theoretically possible out of the box on a per-user basis in https://outlook.office.com/mail/options/mail/forwarding. However, when you actually try it out you will get an error message in your Office 365 inbox because forwarding is disabled on the organizational level by default:
Short introduction to Packer and Vagrant
This article is a short introduction to Packer and Vagrant - tools that we often recommend to our customers but which may be a bit hard to understand if you have no previous expose to them.
Packer
Packer is used to “create identical machine images for multiple platforms from a single source configuration”. Packer works in a very simple fashion:
- It reads its configuration file
- It launches a virtual machine based on the “base box” you’ve defined. The base box would be a “vanilla” Linux distribution such as Ubuntu 20.04.
- It runs the provisioning scripts you’ve written on the base box (via SSH)
- It removes deployment-specific things (e.g. SSH host keys)
- It shuts down the VM
- It creates a VM image out of base box + your changes
After this you can distribute the base box to people and they will have an identical system at their disposal. If you need to modify the image you can just change the provisioning scripts and/or the base image and rebuild. The configuration file can and should be stored in version control repository.
Enabling AWS EC2 instance automatic recovery with Terraform
AWS EC2 instances are subject to two types of status checks (AWS docs):
- System status check (issues with the underlying hardware/networking: “the AWS side”)
- Instance status check (issues with the OS, e.g. OOM, file system corruption, broken networking, etc: “our side”)
The official AWS EC2 instance recovery documentation claims that automatically recovering from an EC2 instance failure is only possible for system status checks, but the AWS documentation is outdated: Cloudwatch metrics are available for both types of check failures and people have set up recovery for both types of failures using AWS CLI.
Terraform Azure resource provider registration fails
Terraform has good support for Microsoft Azure through the Terraform Azure provider and the AzureRM backend. However, you may hit a glitch when adding or importing resources if you lack permissions to register Azure resource providers:
│ Error: Error ensuring Resource Providers are registered.
|
│ Terraform automatically attempts to register the Resource Providers it supports
| to ensure it's able to provision resources.
│
│ If you don't have permission to register Resource Providers you may wish to use
| the "skip_provider_registration" flag in the Provider block to disable this
| functionality.
│
│ Please note that if you opt out of Resource Provider Registration and Terraform
| tries to provision a resource from a Resource Provider which is unregistered,
| then the error may appear misleading - for example
|
│ > API version 2019-XX-XX was not found for Microsoft.Foo
|
│ Could indicate either that the Resource Provider "Microsoft.Foo" requires
| registration, but this could also indicate that this Azure Region doesn't support | this API version.
|
│ More information on the "skip_provider_registration" flag can be found here:
|
│ https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs#skip_provider_registration
│
│ Original Error: Cannnot register providers: Microsoft.DataLakeAnalytics, Microsoft.DBforPostgreSQL, Microsoft.AVS, Microsoft.Media, Microsoft.ApiManagement, Microsoft.Search, Mic
rosoft.Maintenance, Microsoft.ServiceBus, Microsoft.HealthcareApis, Microsoft.Relay, Microsoft.DesktopVirtualization, Microsoft.NotificationHubs, Microsoft.SecurityInsights, Micros
oft.DBforMariaDB, Microsoft.Kusto, Microsoft.DataLakeStore, Microsoft.Automation, Microsoft.CognitiveServices, Microsoft.ManagedServices, Microsoft.EventGrid, Microsoft.BotService,
--- snip ---
At first glance this error look cryptic, but it is quite clear once you understand what Azure resource providers are - I like to think of them as “enabled Azure services” or “enabled Azure features”.
OpenVPN server options in Azure
OpenVPN is among the best VPN solutions, especially when you need a cross-platform (Windows, Mac, Linux, Android, iOS) solution that just works. It is best suited for point to site (P2S) or “road warrior” setups where users access internal resources using a VPN client when on the road.
When setting up OpenVPN server in Azure you have several options at your disposal:
-
Set up your own open source OpenVPN 2 server
Recruiting for a small business - lessons learned, part 2: Tips for job seekers
I previously wrote about takeaways from our first recruitment process as a recruiter in January 2021. This time I’m looking back to the recruitment process in order to gather tips for the other half, job applicants and seekers. Part of the advice are also based on my own experiences as a job seeker and some even on common sense. A recruiter of a bigger company could formulate this article a bit differently but these aspects mattered to us, as a small business.
Poor marketing, part #1
As an entrepreneur you are flooded with attempts to persuade you to buy something. Typically what is sold is services like website development, mobile application development or outsourced developer/devops workforce. Most attempts are mediocre, but only a few can be classified as outright bad. As inbound marketing and sales are dear to our heart, in this series we present some of the worst marketing attempts we’ve seen, in the order of appearance. We try to add some value by adding a humoristic analysis on top. All the names and emails have been converted to John or Jane Doe and example.org so that you don’t accidentally buy anything from these guys. However, with pinch of luck you may find the exact same message in your INBOX if you feel the urge to buy something from these guys.
Software release: net-snmp-systemd-services-status
Puppeteers is proud to release the first version of net-snmp-systemd-services-status. It is a net-snmp pass_persist script written in Python that queries the status of all systemd services on a system, dynamically generating OIDs based on the systemd service names. This gives the services a predictable name. Querying all services on a typical Linux VM takes less than 0.2 seconds. The information is presented to snmpd in a way that both get (snmpget) and getnext (snmpwalk) work.
Extending snmpd with custom scripts
Traditional network monitoring systems tend to get their monitoring data via SNMP. In case of Linux snmpd is usually the system application that’s responsible for providing that data. The data consists mostly, but not entirely, of metrics. For example, the data contains strings such as operating system version, administrative contacts and network interface names.
It is possible to make snmpd run custom scripts and programs to gather more data from the system. The options are described in snmpd.conf man page, but here are the most important ones for this use-case:
Making modals responsive in Oxygen Builder for Wordpress
I always thought that it would be impossible for me to make convincing looking websites. But I did learn it and enjoy it very much. But as soon as I’m ready with a new, beautiful web page on my screen, my joy is cut short by the fact that I still need to make it responsive. Learning website development is in fact a double battle: first learning the techniques to make nice things on a web page, and then learning another set of techniques on how to keep the design beautiful on smaller screens. In my experience, the latter battle is way bigger, and thus hope that sharing the lesson I learned will save someone from the agony I had to go through. I’ll focus on modals because making them responsive has been the toughest part for me.