Articles by Alexander Todorov

DEVit Conf 2015 Impressions

It's been a busy week after DEVit conf took place in Thessaloniki. Here are my impressions.

Crack, Train, Fix, Release

Sessions

I've started the day with the session called "Crack, Train, Fix, Release" by Chris Heilmann. While it was very interesting for some unknown reason I was expecting a talk more closely related to software testing. Unfortunately at the same time in the other room was a talk called "Integration Testing from the Trenches" by Nicolas Frankel which I missed.

At the end Chris answered the question "What to do about old versions of IE ?". And the answer pretty much was "Don't try to support everything, leave them with basic functionality so that users can achieve what they came for on your website. Don't put nice buttons b/c IE 6 users are not used to nice things and they get confused."

If you remember I had a similar question to Jeremy Keith at Bulgaria Web Summit last month and the answer was similar:

Q: Which one is Jeremy's favorite device/browser to develop for.

A: Your approach is wrong and instead we should be thinking in terms of what features are essential or non-essential for our websites and develop around features (if supported, if not supported) not around browsers!

Btw I did ask Chris if he knows Jeremy and he does.

After the coffee break there was "JavaScript ♥ Unicode" by Mathias Bynens which I saw last year at How Camp in Veliko Tarnovo so I just stopped by to say hi and went to listen to "The future of responsive web design: web component queries" by Nikos Zinas. As far as I understood Nikos is a local rock-star developer. I'm not much into web development but the opportunity to create your own HTML components (tags) looks very promising. I guess there will be more business coming for Telerik :).

I wanted to listen to "Live Productive Coder" by Heinz Kabutz but that one started in Greek so I switched the room for "iOS real time content modifications using websockets" by Benny Weingarten-Gabbay.

After lunch I went straight for "Introduction to Docker: What is it and why should I care?" by Ian Miell which IMO was the most interesting talk of the day. It wasn't very technical but managed to clear some of the mysticism around Docker and what it actually is. I tried to grab a few minutes of Ian's time and we found topics of common interest to talk about (Project Atomic anyone?) but later failed to find him and continue the talk. I guess I'll have to follow online.

Tim Perry with "Your Web Stack Would Betray You In An Instant" made a great show. The room was packed, I myself was actually standing the whole time. He described a series of failures across the entire web development stack which gave developers hard times patching and upgrading their services. The lesson: everything fails, be prepared!

The last talk I visited was "GitHub Automation" by Forbes Lindesay. It was more of an inspirational talk, rather than technical one. GitHub provides cool API so why not use it?

Organization

DEVit team

From what I know this is the first year of DEVit. For a first timer the team did great! I particularly liked the two coffee breaks before lunch and in the early afternoon and the sponsors pitches in between the main talks.

All talks were recorded but I have no idea what's happening with the videos!

I will definitely make a point of visiting Thessaloniki more often and follow the local IT and start-up scenes there. And tonight is Silicon Drinkabout which will be the official after party of DigitalK in Sofia.

There are comments.

Bug in VMware Open House Website

"Open House website bug"

This is a slightly annoying UI bug in VMware's Open House website. I've reported it and hopefully they will fix it.

There are comments.

Free Software Testing Books

There's a huge list of free books on the topic of software testing. This will definitely be my summer reading list. I hope you find it helpful.

200 Graduation Theses About Software Testing

The guys from QAHelp have compiled a list of 200 graduation theses from various universities which are freely accessible online. The list can be found here.

There are comments.

Why does sysctl not write under /sys

Recently I've been looking into fixing tilde and Fn keys mapping for MacBook Air and thought I could use sysctl to permanently set the desired values. Unfortunately this is not possible. sysctl can only write under /proc/sys and this is hard-coded in the source:

static const char PROC_PATH[] = "/proc/sys/";

IMO this is relatively easy to patch and allow sysctl to read/write values under /sys. The only open question I see is backward compatibility - maybe adding new parameter (e.g. --sysfs) or adding extended sytax e.g. if variable name starts with / then treat it as absolute path.

I've asked sysctl maintainers on the procps mailing list but so far got no answer.

Is anyone else interested in this? How do you set parameter values under /sys then ?

NOTE: for my particular purposes I could have used config files under /etc/modprobe.d/ or a startup script (I used that) instead.

There are comments.

Using USB to VGA Adapter on MacBook Air with Linux

A quick solution for MacBook Air users running Linux who want to use external projector is to use a USB to VGA adapter. Mine is Plugable UGA-165 and it works great with Red Hat Enterprise Linux 7.1.

After the device is plugged in the udl kernel module is loaded and a new framebuffer device is created (/dev/fb1 in my case). Using mate-display-properties I'm able to configure the 2nd monitor attached to the USB video card. I was able to succeffully display an OpenOffice presentation on the 2nd monitor and play YouTube video.

All USB 2.0 devices from Plugable should be well supported on Linux. For USB 3.0 David Airlie from Red Hat is doing some reverse engineering but I have no idea what the status is. For more info see:

There are comments.

Thunderbolt to Ethernet Adapter on Linux

As it seems my Thunderbolt to gigabit Ethernet adapter works with RHEL 7.1 on a MacBook Air despite some reports it may not.

After plugging the device is automatically recognized and the tg3 driver is loaded. Detailed lspci below:

0a:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM57762 Gigabit Ethernet PCIe
    Subsystem: Apple Inc. Device 00f6
    Physical Slot: 9
    Flags: bus master, fast devsel, latency 0, IRQ 19
    Memory at cd800000 (64-bit, prefetchable) [size=64K]
    Memory at cd810000 (64-bit, prefetchable) [size=64K]
    [virtual] Expansion ROM at cd820000 [disabled] [size=64K]
    Capabilities: [48] Power Management version 3
    Capabilities: [50] Vital Product Data
    Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
    Capabilities: [a0] MSI-X: Enable+ Count=6 Masked-
    Capabilities: [ac] Express Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [13c] Device Serial Number 00-00-ac-87-a3-25-20-33
    Capabilities: [150] Power Budgeting <?>
    Capabilities: [160] Virtual Channel
    Capabilities: [1b0] Latency Tolerance Reporting
    Kernel driver in use: tg3

Unplugging and pluggin back in the network cable works as expected. I did see my computer freeze 2 out of 10 times when I've unplugged the Thunderbolt adapter but couldn't reproduce it repliably or grab more info.

For the record this is with kernel 3.10.0-229.1.2.el7.x86_64 which is missing this upstream commit. I'm not sure why it works though.

If I remember correctly tg3 is available during installation so you should be able to use the Thunderbolt adapter instead of WiFi as well.

There are comments.

Compiling Twinkle SIP Phone on RHEL 7

One of the best SIP clients for Linux is Twinkle. However upstream is not active (or even maybe dead) and the package is missing from latest Fedora releases and fails to build on RHEL 7.

First you need to build and install a few dependencies in the following order: ucommon, ccrtp, libzrtpcpp. You will also need EPEL 7 enabled to satisfy build dependencies.

Then apply the following patch to the original twinkle.spec

--- twinkle.spec.orig   2015-05-01 14:07:01.870710147 +0300
+++ twinkle.spec    2015-05-01 15:07:28.734734573 +0300
@@ -47,6 +47,8 @@
 
 %build
 export LDFLAGS=-lkio 
+export CPPFLAGS="$CPPFLAGS -I/usr/include/libzrtpcpp/" 
+%__autoconf
 %configure
 make %{?_smp_mflags}

The package now builds, installs and runs successfully on RHEL 7. The compiled packages and dependencies are available in my Macbook Air RHEL 7 repository.

There are comments.

Fixing Tilde and Function Keys Mapping for MacBook Air on Linux

Thera are two problems with the MacBook Air keyboard on Linux:

Function keys and media keys are switched and by default you have to press Fn+F5 in order to refresh a browser page. The solution is

echo 2 > /sys/module/hid_apple/parameters/fnmode

The tilde key is mapped improperly, see RHBZ #1025041. To fix it

echo 0 > /sys/module/hid_apple/parameters/iso_layout

Permanent fix

Either you have to add the above commands in a boot script or you can yum install mba-kbd-fix from my Macbook Air RHEL 7 repository. The RPM source can be found here.

There are comments.

Red Hat Enterprise Linux 7 Repository for MacBook Air

I've made a repository with binary (x86_64 only) and source RPM packages which are missing from Red Hat Enterprise Linux 7 and necessary when using a MacBook Air. To install execute the commands below:

cd /etc/yum.repos.d/
wget https://s3.amazonaws.com/atodorov/rpms/macbook/el7/rhel7-macbook.repo

Wireless driver

yum install kmod-wl

Display backlight driver

yum install kmod-mba6x_bl

And uncomment /etc/X11/xorg.conf.d/98-mba_bl.conf.

Note: the .spec file is available from RP #26.

Fixing keyboard mapping

yum install mba-kbd-fix

There are comments.

Fixing Display Brightness on MacBook Air with RHEL 7

One issue with RHEL/CentOS/Fedora on MacBook Air laptops is brightness control and backlight behavior after suspend/resume. I've found the solution here and only tweaked it slightly for my use case.

mba6x_bl doesn't load automatically

The reason being the driver matches older hardware:

$ modinfo mba6x_bl
filename:       /lib/modules/3.10.0-229.1.2.el7.x86_64/extra/mba6x_bl/mba6x_bl.ko
alias:          dmi:*:pnMacBookAir6*
license:        GPL
description:    MacBook Air 6,1 and 6,2 backlight driver
author:         Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
rhelversion:    7.1
srcversion:     4D069C8EB0E470AF27E7F8D
depends:        video
vermagic:       3.10.0-229.1.2.el7.x86_64 SMP mod_unload modversions

My system is MacBookAir7,2 and doesn't match the module alias. So a quick fix was needed. For more info about MODULE_ALIAS see ArchWiki. Alternatively on Red Hat based systems you can place a config file under /etc/sysconfig/modules, see the docs for more details.

intel_backlight driver is in the way

On older systems mba6x_bl doesn't get used automatically. The problem is the offending intel_backlight driver which gets used instead. To workaround it add this xorg.conf snippet:

$ cat /etc/X11/xorg.conf.d/98-mba_bl.conf
Section "Device"
    Identifier      "Intel Graphics"
    Driver          "intel"
    Option          "Backlight"     "mba6x_backlight"
EndSection

For more info see RHBZ 989555.

Everything in one go

If you are using RHEL 7 or CentOS 7 (version 7.1 required) instead of Fedora you can take a look at my Macbook Air RHEL 7 repository.

There are comments.

How to Enable backspace Key to Navigate Back in Firefox

Open about:config and set browser.backspace_action to 0. For more information see here.

There are comments.

Disabling MacBook Startup Sound in Linux

There is an easy way to disable the MacBook startup sound (boot chime) even after wiping out OS X and installing Linux.

This sound can be easily disabled if you mute the volume in OS X and shutdown the computer. The value is stored in NVRAM.

  1. Reboot the computer and hold Cmd+Alt(Option)+R. This will start OS X Internet recovery mode;
  2. Open the terminal and issue the following command

    nvram SystemAudioVolume=%00
    
  3. Reboot.

Voila. In Linux try this:

# efivar -l | grep SystemAudioVolume
 7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume
 7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolumeDB

# efivar -n 7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume -p
GUID: 7c436110-ab2a-4bbb-a880-fe41995c9f82
Name: "SystemAudioVolume"
Attributes:
    Non-Volatile
    Boot Service Access
    Runtime Service Access
Value:
00000000  00                                                |.               |

# efivar -n 7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolumeDB -p
GUID: 7c436110-ab2a-4bbb-a880-fe41995c9f82
Name: "SystemAudioVolumeDB"
Attributes:
    Non-Volatile
    Boot Service Access
    Runtime Service Access
Value:
00000000  00 
#

Note 1: Before disabling both variables had non zero values. Also SystemAudioVolumeDB doesn't seem to have any effect.

Note 2: RHEL or CentOS users need to rebuild efivar from the Fedora src.rpm.

Note 3: several Internet sources suggest that writing EFI variables from Linux may sometimes corrupt your Apple firmware. I didn't research this any further. If you happen to figure out how to successfully write to these variables under Linux please let everyone know in the comments (in case OS X recovery mode goes missing, you know).

Thanks to my reader Alexander, who gave me the hint in a previous blog post.

There are comments.

Compiling Broadcom wl-kmod WiFi Driver for RHEL 7

After I got my MacBook Air installed with RHEL 7.1 the first priority was getting wireless working. First check if your device isn't already supported upstream. Mine isn't

14e4:43a0: Broadcom Corporation BCM4360 802.11ac Wireless Network Adapter (rev 03)

Next grab the src.rpm files necessary to build the wl driver from RPM Fusion. For akmods-0.5.2-1.fc21.src.rpm, broadcom-wl-6.30.223.248-2.fc21.src.rpm, kmodtool-1-23.fc20.src.rpm just execute rpmbuild --rebuild against each file and install kmodtool and akmods.

Then you need two more files buildsys-build-rpmfusion and wl-kmod. The first one is a helper tool containing list of recent kernels to build against, the later one is the driver source itself. Both needed minor modifications before building on RHEL 7.

I've created my own buildsys-build-rpmfusion package listing the current kernels for RHEL 7.1. For wl-kmod I've introduced a patch which modifies the other patches in the package so it builds correctly on 7.1.

Note: I don't know if there's a define which can be used to detect if we're building on RHEL (maybe I can define my own) but direct kernel version number comparison doesn't work here because Red Hat backports chosen functionality from more recent kernels without changing the version number. This approach may not be the best one but I've tried to keep it clean for easier maintenance in the future and it got me started very quickly.

Build the modified buildsys-build-rpmfusion and:

yum install buildsys-build-rpmfusion-7-1.x86_64.rpm buildsys-build-rpmfusion-kerneldevpkgs-current-7-1.x86_64.rpm

Build the wl-kmod package and:

yum install akmod-wl-6.30.223.248-5.el7.x86_64.rpm broadcom-wl-6.30.223.248-2.el7.noarch.rpm kmod-wl-3.10.0-229.el7.x86_64-6.30.223.248-5.el7.x86_64.rpm kmod-wl-6.30.223.248-5.el7.x86_64.rpm

If necessary re-create your initramfs image to include wl.ko.

There are comments.

Installing Red Hat Enterprise Linux 7 on MacBook Air 2015

Recently I've upgraded to a new MacBook Air (13 inch, early 2015) laptop and luckily enough I'm running Red Hat Enterprise Linux 7.1 on it. Here is how to install it.

Prepare boot media

The easiest method is to boot from a USB stick which holds either the entire DVD or just boot.iso. Since I happened to find a 1GB only USB stick I went for the boot.iso. dd if=boot.iso of=/dev/sdb is the only thing you need to prepare the boot media.

Initial boot

Mac boot menu

While computer is booting hold the (left) Alt (Option) key to enter Startup Manager. Wait a second or two before it displays your local hard drive and the USB boot media. Select the option EFI boot to boot the anaconda installer.

Installation

Booting from a boot.iso means I need to use the network to grab the rest of the installation. Because the wireless card needs proprietary drivers I've tried both USB to Ethernet adapter and USB tethering with my phone.

Note: initially I have forgotten to plug in my USB networking card which resulted in bug #1191286. After cold-plugging and rebooting the system everything was fine. Subsequently I don't see any problems with the USB networking card. The bug should be fixed in RHEL 7.2 btw.

Note: I've been using a USB docking station from Plugable for years because their products are Linux friendly. In particular the networking chip is ASIX and there is no problems with drivers for Linux.

UPDATE 2015-05-04: You should also be able to use a Thunderbolt to Ethernet adapter which is more common for Apple users. See here for more info;

In my case I've wiped out the entire SSD disk b/c I don't care about dual boot. Previously I've heard about anaconda crashing while it tries to detect the Mac OS file system. I've played around with Rawhide before going for RHEL 7.1 and didn't see any problems related to foreign filesystems.

I've gone with the default partitioning scheme while slightly modifing the partition sizes, etc.

Post install

There are several issues which still need attention. I didn't have enough time in the last few days to check these out:

Things which work

  • GNOME 3 sucks big time. Fortunately I was able to install MATE Desktop from EPEL;
  • Wireless card needs drivers; I've managed to compile them myself, see here;
  • Display brightness doesn't seem to work at all. On top of that the display goes full black after suspend-resume. I could barely see anything on it. Fixed here!
  • There is a very annoying boot chime which I have no idea how to disable Fixed here;
  • The onboard keyboard is quite annoying for previous ThinkPad user like myself. Most importantly I need to press Fn to activate the F1, F2, etc keys which I use a lot in mcedit. Fixed here;
  • Output sound works - both speakers and headphones;
  • Microphone works (tested with a hands free device);
  • Power manager was reporting my battery life totally wrong but after a full discharge/recharge it seems to have calibrated itself;
  • ATrpms and EPEL are still missing some codecs for RHEL 7 which means no movies; codecs seem to work now with the NUX Desktop repos. Not sure what I was missing when testing it initially;
  • UPDATE 2015-05-04: I do have a Thunderbolt to Ethernet adapter and hot-plug seems to work despite claims that this is not supported in Linux. See here for more info;
  • UPDATE 2015-05-05: Presenting via external projector works with a USB to VGA adapter. See here;

Things that don't work yet

  • UPDATE 2015-04-30: I'd like to remap the Cmd key to the Menu key found in PC keyboards;
  • Camera doesn't work, reverse engineering a driver is in progress;
  • I'm missing the ThinkLight from my X220, however the integrated Broadcom FaceTime HD camera doesn't seem to have a LED flash which can be repurposed for this task;
  • I need a CPU temperature monitor and maybe CPU fan speed needs adjustments;

UPDATE 2015-04-28: Check the list above for links to wifi and backlight drivers and how to disable the boot chime.

UPDATE 2015-04-29: You can find precompiled RPMS in my Macbook Air RHEL 7 repository.

UPDATE 2015-04-30: Added more links and split the list into stuff which already works and stuff that doesn't.

UPDATE 2015-05-04: Added info about Thunderbolt to Ethernet adapter.

UPDATE 2015-05-05: Added info about USB to VGA adapter.

Fedora 22 on MacBook Air

I did try Fedora 22 Beta and experienced bug #1215458. Also for some reason the installation hit an error downloading a package and didn't let me retry but forced me to exit the process.

I'll continue posting my updates until the system runs smoothly like it is supposed to.

Hardware info

ADDED ON 2015-05-02

# dmidecode 
# dmidecode 2.12
# SMBIOS entry point at 0x8afae000
SMBIOS 2.7 present.
32 structures occupying 1663 bytes.
Table at 0x8AFAD000.

Handle 0x0000, DMI type 7, 19 bytes
Cache Information
    Socket Designation: L1 Cache
    Configuration: Enabled, Not Socketed, Level 1
    Operational Mode: Write Back
    Location: Internal
    Installed Size: 32 kB
    Maximum Size: 32 kB
    Supported SRAM Types:
            Synchronous
    Installed SRAM Type: Synchronous
    Speed: Unknown
    Error Correction Type: Parity
    System Type: Data
    Associativity: 8-way Set-associative

Handle 0x0001, DMI type 7, 19 bytes
Cache Information
    Socket Designation: L1 Cache
    Configuration: Enabled, Not Socketed, Level 1
    Operational Mode: Write Back
    Location: Internal
    Installed Size: 32 kB
    Maximum Size: 32 kB
    Supported SRAM Types:
            Synchronous
    Installed SRAM Type: Synchronous
    Speed: Unknown
    Error Correction Type: Parity
    System Type: Instruction
    Associativity: 8-way Set-associative

Handle 0x0002, DMI type 7, 19 bytes
Cache Information
    Socket Designation: L2 Cache
    Configuration: Enabled, Not Socketed, Level 2
    Operational Mode: Write Back
    Location: Internal
    Installed Size: 256 kB
    Maximum Size: 256 kB
    Supported SRAM Types:
        Synchronous
    Installed SRAM Type: Synchronous
    Speed: Unknown
    Error Correction Type: Single-bit ECC
    System Type: Unified
    Associativity: 8-way Set-associative

Handle 0x0003, DMI type 7, 19 bytes
Cache Information
    Socket Designation: L3 Cache
    Configuration: Enabled, Not Socketed, Level 3
    Operational Mode: Write Back
    Location: Internal
    Installed Size: 4096 kB
    Maximum Size: 4096 kB
    Supported SRAM Types:
        Synchronous
    Installed SRAM Type: Synchronous
    Speed: Unknown
    Error Correction Type: Multi-bit ECC
    System Type: Unified
    Associativity: 16-way Set-associative

Handle 0x0004, DMI type 4, 42 bytes
Processor Information
    Socket Designation: U3E1
    Type: Central Processor
    Family: Core i7
    Manufacturer: Intel(R) Corporation
    ID: D4 06 03 00 FF FB EB BF
    Signature: Type 0, Family 6, Model 61, Stepping 4
    Flags:
        FPU (Floating-point unit on-chip)
        VME (Virtual mode extension)
        DE (Debugging extension)
        PSE (Page size extension)
        TSC (Time stamp counter)
        MSR (Model specific registers)
        PAE (Physical address extension)
        MCE (Machine check exception)
        CX8 (CMPXCHG8 instruction supported)
        APIC (On-chip APIC hardware supported)
        SEP (Fast system call)
        MTRR (Memory type range registers)
        PGE (Page global enable)
        MCA (Machine check architecture)
        CMOV (Conditional move instruction supported)
        PAT (Page attribute table)
        PSE-36 (36-bit page size extension)
        CLFSH (CLFLUSH instruction supported)
        DS (Debug store)
        ACPI (ACPI supported)
        MMX (MMX technology supported)
        FXSR (FXSAVE and FXSTOR instructions supported)
        SSE (Streaming SIMD extensions)
        SSE2 (Streaming SIMD extensions 2)
        SS (Self-snoop)
        HTT (Multi-threading)
        TM (Thermal monitor supported)
        PBE (Pending break enabled)
    Version: Intel(R) Core(TM) i7-5650U CPU @ 2.20GHz
    Voltage: 1.0 V
    External Clock: 25 MHz
    Max Speed: 2200 MHz
    Current Speed: 3100 MHz
    Status: Populated, Enabled
    Upgrade: <OUT OF SPEC>
    L1 Cache Handle: 0x0001
    L2 Cache Handle: 0x0002
    L3 Cache Handle: 0x0003
    Serial Number:  
    Asset Tag:  
    Part Number:  
    Core Count: 2
    Core Enabled: 2
    Thread Count: 4
    Characteristics:
        64-bit capable
        Multi-Core
        Hardware Thread
        Execute Protection
        Enhanced Virtualization
        Power/Performance Control

Handle 0x0005, DMI type 0, 24 bytes
BIOS Information
    Vendor: Apple Inc.
    Version: MBA71.88Z.0166.B00.1502131457
    Release Date: 02/13/2015
    ROM Size: 8192 kB
    Characteristics:
        PCI is supported
        BIOS is upgradeable
        BIOS shadowing is allowed
        Boot from CD is supported
        Selectable boot is supported
        ACPI is supported
        Smart battery is supported
        Function key-initiated network boot is supported
        UEFI is supported
    BIOS Revision: 0.1

Handle 0x0006, DMI type 1, 27 bytes
System Information
    Manufacturer: Apple Inc.
    Product Name: MacBookAir7,2
    Version: 1.0
    Serial Number: C1MPF52YG944
    UUID: 25EF0280-EC82-42B0-8FB6-10ADCCC67C02
    Wake-up Type: Power Switch
    SKU Number: System SKU#
    Family: Mac

Handle 0x0007, DMI type 2, 17 bytes
Base Board Information
    Manufacturer: Apple Inc.
    Product Name: Mac-937CB26E2E02BB01
    Version: MacBookAir7,2
    Serial Number: C07511704VSG92GA1
    Asset Tag: Base Board Asset Tag#
    Features:
        Board is a hosting board
    Location In Chassis: Part Component
    Chassis Handle: 0x0008
    Type: Motherboard
    Contained Object Handles: 0

Handle 0x0008, DMI type 3, 24 bytes
Chassis Information
    Manufacturer: Apple Inc.
    Type: Laptop
    Lock: Not Present
    Version: Mac-937CB26E2E02BB01
    Serial Number: C1MPF52YG944
    Asset Tag: Chassis Board Asset Tag#
    Boot-up State: Safe
    Power Supply State: Safe
    Thermal State: Safe
    Security Status: None
    OEM Information: 0x00000000
    Height: Unspecified
    Number Of Power Cords: Unspecified
    Contained Elements: 0
    SKU Number: Not Specified

Handle 0x0009, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: Not Specified
    Internal Connector Type: None
    External Reference Designator: USB0
    External Connector Type: Access Bus (USB)
    Port Type: USB

Handle 0x000A, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: Not Specified
    Internal Connector Type: None
    External Reference Designator: USB1
    External Connector Type: Access Bus (USB)
    Port Type: USB

Handle 0x000B, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: Not Specified
    Internal Connector Type: None
    External Reference Designator: Audio Line In
    External Connector Type: Mini Jack (headphones)
    Port Type: Audio Port

Handle 0x000C, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: Not Specified
    Internal Connector Type: None
    External Reference Designator: Thunderbolt
    External Connector Type: None
    Port Type: Other

Handle 0x000D, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: Microphone
    Internal Connector Type: Other
    External Reference Designator: Not Specified
    External Connector Type: None
    Port Type: None

Handle 0x000E, DMI type 8, 9 bytes
Port Connector Information
    Internal Reference Designator: Speaker
    Internal Connector Type: Other
    External Reference Designator: Not Specified
    External Connector Type: None
    Port Type: None

Handle 0x000F, DMI type 41, 11 bytes
Onboard Device
    Reference Designation: Integrated Video Controller
    Type: Video
    Status: Enabled
    Type Instance: 1
    Bus Address: 0000:00:00.0

Handle 0x0010, DMI type 41, 11 bytes
Onboard Device
    Reference Designation: Azalia Audio Codec
    Type: Sound
    Status: Enabled
    Type Instance: 1
    Bus Address: 0000:00:00.0

Handle 0x0011, DMI type 41, 11 bytes
Onboard Device
    Reference Designation: SATA
    Type: SATA Controller
    Status: Enabled
    Type Instance: 1
    Bus Address: 0000:00:00.0

Handle 0x0012, DMI type 13, 22 bytes
BIOS Language Information
    Language Description Format: Abbreviated
    Installable Languages: 1
        en
    Currently Installed Language: en

Handle 0x0013, DMI type 22, 26 bytes
Portable Battery
    Location: Not Specified
    Manufacturer: Not Specified
    Name: Not Specified
    Design Capacity: Unknown
    Design Voltage: Unknown
    SBDS Version: Not Specified
    Maximum Error: 0%
    SBDS Serial Number: 0000
    SBDS Manufacture Date: 1980-00-00
    SBDS Chemistry: Not Specified
    OEM-specific Information: 0x00000000

Handle 0x0014, DMI type 32, 11 bytes
System Boot Information
    Status: No errors detected

Handle 0x0015, DMI type 131, 6 bytes
OEM-specific Type
    Header and Data:
        83 06 15 00 06 07

Handle 0x0016, DMI type 133, 12 bytes
OEM-specific Type
    Header and Data:
        85 0C 16 00 02 00 00 00 00 00 00 00

Handle 0x0017, DMI type 128, 88 bytes
OEM-specific Type
    Header and Data:
        80 58 17 00 03 00 00 00 36 F5 03 FC 3F FF 03 FC
        02 00 03 00 00 00 00 00 00 00 99 FF FF FF AF FF
        00 00 B0 FF FF FF D4 FF 00 00 D7 FF FF FF D9 FF
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00

Handle 0x0018, DMI type 134, 20 bytes
OEM-specific Type
    Header and Data:
        86 14 18 00 32 2E 32 37 46 30 31 00 00 00 00 00
        00 00 00 00

Handle 0x0019, DMI type 16, 23 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: None
    Maximum Capacity: 8 GB
    Error Information Handle: Not Provided
    Number Of Devices: 2

Handle 0x001A, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x0019
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: SODIMM
    Set: None
    Locator: DIMM0
    Bank Locator: BANK 0
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MHz
    Manufacturer: 0x80AD
    Serial Number: 0x00000000
    Asset Tag: Not Specified
    Part Number: 0x483943434E4E4E384A544D4C41522D4E544D
    Rank: Unknown
    Configured Clock Speed: 1600 MHz

Handle 0x001B, DMI type 130, 186 bytes
OEM-specific Type
    Header and Data:
        82 BA 1B 00 1A 00 00 00 B0 00 91 20 F1 03 04 12
        05 0A 03 11 01 08 0A 00 00 01 78 78 90 50 90 11
        50 E0 10 04 3C 3C 01 90 00 00 00 00 00 00 00 00
        00 A8 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80
        AD 01 00 00 00 00 00 00 57 FB 48 39 43 43 4E 4E
        4E 38 4A 54 4D 4C 41 52 2D 4E 54 4D 00 00 80 AD
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00

Handle 0x001C, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x0019
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB
    Form Factor: SODIMM
    Set: None
    Locator: DIMM0
    Bank Locator: BANK 1
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MHz
    Manufacturer: 0x80AD
    Serial Number: 0x00000000
    Asset Tag: Not Specified
    Part Number: 0x483943434E4E4E384A544D4C41522D4E544D
    Rank: Unknown
    Configured Clock Speed: 1600 MHz

Handle 0x001D, DMI type 130, 186 bytes
OEM-specific Type
    Header and Data:
        82 BA 1D 00 1C 00 00 00 B0 00 91 20 F1 03 04 12
        05 0A 03 11 01 08 0A 00 00 01 78 78 90 50 90 11
        50 E0 10 04 3C 3C 01 90 00 00 00 00 00 00 00 00
        00 A8 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80
        AD 01 00 00 00 00 00 00 57 FB 48 39 43 43 4E 4E
        4E 38 4A 54 4D 4C 41 52 2D 4E 54 4D 00 00 80 AD
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00 00 00

Handle 0x001E, DMI type 19, 31 bytes
Memory Array Mapped Address
    Starting Address: 0x0000000000000000k
    Ending Address: 0x00000001FFFFFFFFk
    Range Size: 8 GB
    Physical Array Handle: 0x0019
    Partition Width: 0

Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table

# uname -a
Linux aero 3.10.0-229.1.2.el7.x86_64 #1 SMP Fri Mar 6 17:12:08 EST 2015 x86_64 x86_64 x86_64 GNU/Linux

# lsusb
Bus 001 Device 002: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 001 Device 003: ID 05ac:0291 Apple, Inc. 
Bus 002 Device 002: ID 05ac:8406 Apple, Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 05ac:828f Apple, Inc. 

# lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U Integrated Graphics (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #1 (rev e3)
00:1c.1 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #2 (rev e3)
00:1c.2 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1c.4 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #5 (rev e3)
00:1c.5 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #6 (rev e3)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
00:1f.6 Signal processing controller: Intel Corporation Wildcat Point-LP Thermal Management Controller (rev 03)
02:00.0 Multimedia controller: Broadcom Corporation 720p FaceTime HD Camera
03:00.0 Network controller: Broadcom Corporation BCM4360 802.11ac Wireless Network Adapter (rev 03)
04:00.0 SATA controller: Samsung Electronics Co Ltd Device a801 (rev 01)

# efivar --list
605dab50-e046-4300-abb6-3dd810dd8b23-MokListRT
8be4df61-93ca-11d2-aa0d-00e098032b8c-BootCurrent
8be4df61-93ca-11d2-aa0d-00e098032b8c-ErrOutDev
8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOutDev
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-gfx-saved-config-restore-status
8be4df61-93ca-11d2-aa0d-00e098032b8c-LangCodes
7c436110-ab2a-4bbb-a880-fe41995c9f82-BootCampProcessorPstates
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-SSN
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-GR_CAUSE
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-FirmwareFeatures
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-FirmwareFeaturesMask
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-HW_ICT
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-HW_MLB
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-MLB
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-HW_ROM
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-ROM
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-HW_BID
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-HardwareBootMode
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-BBIF
8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOut
eb704011-1402-11d3-8e77-00a0c969723b-MTC
7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume
36c28ab5-6566-4c50-9ebd-cbb920f83843-current-network
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-current-network
7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolumeDB
7c436110-ab2a-4bbb-a880-fe41995c9f82-boot-gamma
7c436110-ab2a-4bbb-a880-fe41995c9f82-backlight-level
8be4df61-93ca-11d2-aa0d-00e098032b8c-BootOrder
8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0001
8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0000
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14-AAPL,PathProperties0000
8d63d4fe-bd3c-4aad-881d-86fd974bc1df-last-oslogin-ident
36c28ab5-6566-4c50-9ebd-cbb920f83843-preferred-count
36c28ab5-6566-4c50-9ebd-cbb920f83843-preferred-networks
7c436110-ab2a-4bbb-a880-fe41995c9f82-fmm-computer-name
7c436110-ab2a-4bbb-a880-fe41995c9f82-LocationServicesEnabled
7c436110-ab2a-4bbb-a880-fe41995c9f82-efi-boot-device
7c436110-ab2a-4bbb-a880-fe41995c9f82-efi-boot-device-data
8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0080
af9ffd67-ec10-488a-9dfc-6cbf5ee22c2e-AcpiGlobalVariable
7c436110-ab2a-4bbb-a880-fe41995c9f82-bluetoothActiveControllerInfo
7c436110-ab2a-4bbb-a880-fe41995c9f82-bluetoothInternalControllerInfo
8be4df61-93ca-11d2-aa0d-00e098032b8c-fpf_provisioned
8be4df61-93ca-11d2-aa0d-00e098032b8c-epid_provisioned
8be4df61-93ca-11d2-aa0d-00e098032b8c-BootFFFF
8be4df61-93ca-11d2-aa0d-00e098032b8c-Lang
7c436110-ab2a-4bbb-a880-fe41995c9f82-ALS_Data
8be4df61-93ca-11d2-aa0d-00e098032b8c-MemoryConfih
8be4df61-93ca-11d2-aa0d-00e098032b8c-MemoryConfig
8be4df61-93ca-11d2-aa0d-00e098032b8c-Timeout
05299c28-3953-4a5f-b7d8-f6c6a7150b2a-SetupDefaults
4dfbbaab-1392-4fde-abb8-c41cc5ad7d5d-Setup

lshw added on 2015-12-01

# lshw

aero
    description: Laptop
    product: MacBookAir7,2 (System SKU#)
    vendor: Apple Inc.
    version: 1.0
    serial: C1MPF52YG944
    width: 64 bits
    capabilities: smbios-2.7 dmi-2.7 vsyscall32
    configuration: boot=normal chassis=laptop family=Mac sku=System SKU# uuid=8002EF25-82EC-B042-8FB6-10ADCCC67C02
  *-core
       description: Motherboard
       product: Mac-937CB26E2E02BB01
       vendor: Apple Inc.
       physical id: 0
       version: MacBookAir7,2
       serial: C07511704VSG92GA1
       slot: Part Component
     *-cache:0
          description: L1 cache
          physical id: 0
          slot: L1 Cache
          size: 32KiB
          capacity: 32KiB
          capabilities: synchronous internal write-back data
     *-cache:1
          description: L1 cache
          physical id: 1
          slot: L1 Cache
          size: 32KiB
          capacity: 32KiB
          capabilities: synchronous internal write-back instruction
     *-cache:2
          description: L2 cache
          physical id: 2
          slot: L2 Cache
          size: 256KiB
          capacity: 256KiB
          capabilities: synchronous internal write-back unified
     *-cache:3
          description: L3 cache
          physical id: 3
          slot: L3 Cache
          size: 4MiB
          capacity: 4MiB
          capabilities: synchronous internal write-back unified
     *-cpu
          description: CPU
          product: Core i7
          vendor: Intel Corp.
          physical id: 4
          bus info: cpu@0
          version: Intel(R) Core(TM) i7-5650U CPU @ 2.20GHz
          slot: U3E1
          size: 3100MHz
          capacity: 3200MHz
          width: 64 bits
          clock: 25MHz
          capabilities: x86-64 fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch ida arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt cpufreq
          configuration: cores=2 enabledcores=2 threads=4
     *-firmware
          description: BIOS
          vendor: Apple Inc.
          physical id: 5
          version: MBA71.88Z.0166.B00.1502131457
          date: 02/13/2015
          size: 1MiB
          capacity: 8128KiB
          capabilities: pci upgrade shadowing cdboot bootselect acpi smartbattery netboot uefi
     *-memory
          description: System Memory
          physical id: 19
          slot: System board or motherboard
          size: 8GiB
        *-bank:0
             description: SODIMM DDR3 Synchronous 1600 MHz (0,6 ns)
             product: H9CCNNN8JTMLAR-NTM
             vendor: Hynix Semiconductor (Hyundai Electronics)
             physical id: 0
             serial: 0x00000000
             slot: DIMM0
             size: 4GiB
             width: 64 bits
             clock: 1600MHz (0.6ns)
        *-bank:1
             description: SODIMM DDR3 Synchronous 1600 MHz (0,6 ns)
             product: H9CCNNN8JTMLAR-NTM
             vendor: Hynix Semiconductor (Hyundai Electronics)
             physical id: 1
             serial: 0x00000000
             slot: DIMM0
             size: 4GiB
             width: 64 bits
             clock: 1600MHz (0.6ns)
     *-pci
          description: Host bridge
          product: Broadwell-U Host Bridge -OPI
          vendor: Intel Corporation
          physical id: 100
          bus info: pci@0000:00:00.0
          version: 09
          width: 32 bits
          clock: 33MHz
          configuration: driver=bdw_uncore
          resources: irq:0
        *-display
             description: VGA compatible controller
             product: Broadwell-U Integrated Graphics
             vendor: Intel Corporation
             physical id: 2
             bus info: pci@0000:00:02.0
             version: 09
             width: 64 bits
             clock: 33MHz
             capabilities: msi pm vga_controller bus_master cap_list rom
             configuration: driver=i915 latency=0
             resources: irq:56 memory:c0000000-c0ffffff memory:b0000000-bfffffff ioport:3000(size=64)
        *-multimedia:0
             description: Audio device
             product: Broadwell-U Audio Controller
             vendor: Intel Corporation
             physical id: 3
             bus info: pci@0000:00:03.0
             version: 09
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi pciexpress bus_master cap_list
             configuration: driver=snd_hda_intel latency=0
             resources: irq:57 memory:c1610000-c1613fff
        *-usb
             description: USB controller
             product: Wildcat Point-LP USB xHCI Controller
             vendor: Intel Corporation
             physical id: 14
             bus info: pci@0000:00:14.0
             version: 03
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi xhci bus_master cap_list
             configuration: driver=xhci_hcd latency=0
             resources: irq:47 memory:c1600000-c160ffff
           *-usbhost:0
                product: xHCI Host Controller
                vendor: Linux 3.10.0-327.el7.x86_64 xhci-hcd
                physical id: 0
                bus info: usb@2
                logical name: usb2
                version: 3.10
                capabilities: usb-3.00
                configuration: driver=hub slots=4 speed=5000Mbit/s
              *-usb
                   description: Mass storage device
                   product: Card Reader
                   vendor: Apple
                   physical id: 3
                   bus info: usb@2:3
                   logical name: scsi0
                   version: 8.20
                   serial: 000000000820
                   capabilities: usb-3.00 scsi emulated scsi-host
                   configuration: driver=usb-storage maxpower=896mA speed=5000Mbit/s
                 *-disk
                      description: SCSI Disk
                      product: SD Card Reader
                      vendor: APPLE
                      physical id: 0.0.0
                      bus info: scsi@0:0.0.0
                      logical name: /dev/sdb
                      version: 3.00
                      serial: 000000000820
                      capabilities: removable
                      configuration: ansiversion=6 logicalsectorsize=512 sectorsize=512
                    *-medium
                         physical id: 0
                         logical name: /dev/sdb
           *-usbhost:1
                product: xHCI Host Controller
                vendor: Linux 3.10.0-327.el7.x86_64 xhci-hcd
                physical id: 1
                bus info: usb@1
                logical name: usb1
                version: 3.10
                capabilities: usb-2.00
                configuration: driver=hub slots=11 speed=480Mbit/s
              *-usb:0
                   description: USB hub
                   product: USB2.0 Hub
                   vendor: Genesys Logic, Inc.
                   physical id: 2
                   bus info: usb@1:2
                   version: 9.01
                   capabilities: usb-2.00
                   configuration: driver=hub maxpower=100mA slots=4 speed=480Mbit/s
                 *-usb:0
                      description: Mouse
                      product: USB Optical Mouse
                      vendor: Logitech
                      physical id: 2
                      bus info: usb@1:2.2
                      version: 63.00
                      capabilities: usb-2.00
                      configuration: driver=usbhid maxpower=100mA speed=1Mbit/s
                 *-usb:1
                      description: Keyboard
                      product: USB Keyboard
                      vendor: Logitech
                      physical id: 3
                      bus info: usb@1:2.3
                      version: 66.00
                      capabilities: usb-1.10
                      configuration: driver=usbhid maxpower=90mA speed=1Mbit/s
              *-usb:1
                   description: USB hub
                   product: BRCM20702 Hub
                   vendor: Apple Inc.
                   physical id: 3
                   bus info: usb@1:3
                   version: 1.00
                   capabilities: usb-2.00
                   configuration: driver=hub maxpower=94mA slots=3 speed=12Mbit/s
                 *-usb
                      description: Bluetooth wireless interface
                      product: Bluetooth USB Host Controller
                      vendor: Apple Inc.
                      physical id: 3
                      bus info: usb@1:3.3
                      version: 1.01
                      capabilities: usb-2.00 bluetooth
                      configuration: driver=btusb speed=12Mbit/s
              *-usb:2
                   description: Human interface device
                   product: Apple Internal Keyboard / Trackpad
                   vendor: Apple Inc.
                   physical id: 5
                   bus info: usb@1:5
                   version: 1.71
                   serial: D3H5074FL6ZF94RAQ3D
                   capabilities: usb-2.00
                   configuration: driver=bcm5974 maxpower=500mA speed=12Mbit/s
        *-communication
             description: Communication controller
             product: Wildcat Point-LP MEI Controller #1
             vendor: Intel Corporation
             physical id: 16
             bus info: pci@0000:00:16.0
             version: 03
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi bus_master cap_list
             configuration: driver=mei_me latency=0
             resources: irq:58 memory:c161b100-c161b11f
        *-multimedia:1
             description: Audio device
             product: Wildcat Point-LP High Definition Audio Controller
             vendor: Intel Corporation
             physical id: 1b
             bus info: pci@0000:00:1b.0
             version: 03
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi bus_master cap_list
             configuration: driver=snd_hda_intel latency=64
             resources: irq:59 memory:c1614000-c1617fff
        *-pci:0
             description: PCI bridge
             product: Wildcat Point-LP PCI Express Root Port #1
             vendor: Intel Corporation
             physical id: 1c
             bus info: pci@0000:00:1c.0
             version: e3
             width: 32 bits
             clock: 33MHz
             capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
             configuration: driver=pcieport
             resources: irq:42
        *-pci:1
             description: PCI bridge
             product: Wildcat Point-LP PCI Express Root Port #2
             vendor: Intel Corporation
             physical id: 1c.1
             bus info: pci@0000:00:1c.1
             version: e3
             width: 32 bits
             clock: 33MHz
             capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
             configuration: driver=pcieport
             resources: irq:43 memory:c1400000-c15fffff ioport:a0000000(size=268435456)
           *-multimedia UNCLAIMED
                description: Multimedia controller
                product: 720p FaceTime HD Camera
                vendor: Broadcom Corporation
                physical id: 0
                bus info: pci@0000:02:00.0
                version: 00
                width: 64 bits
                clock: 33MHz
                capabilities: pm msi pciexpress bus_master cap_list
                configuration: latency=0
                resources: memory:c1500000-c150ffff memory:a0000000-afffffff memory:c1400000-c14fffff
        *-pci:2
             description: PCI bridge
             product: Wildcat Point-LP PCI Express Root Port #3
             vendor: Intel Corporation
             physical id: 1c.2
             bus info: pci@0000:00:1c.2
             version: e3
             width: 32 bits
             clock: 33MHz
             capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
             configuration: driver=pcieport
             resources: irq:44 memory:c1000000-c12fffff
           *-network
                description: Wireless interface
                product: BCM4360 802.11ac Wireless Network Adapter
                vendor: Broadcom Corporation
                physical id: 0
                bus info: pci@0000:03:00.0
                logical name: wlp3s0
                version: 03
                serial: 34:36:3b:86:04:e2
                width: 64 bits
                clock: 33MHz
                capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
                configuration: broadcast=yes driver=wl0 driverversion=6.30.223.248 (r487574) ip=192.168.0.106 latency=0 multicast=yes wireless=IEEE 802.11abg
                resources: irq:18 memory:c1200000-c1207fff memory:c1000000-c11fffff
        *-pci:3
             description: PCI bridge
             product: Wildcat Point-LP PCI Express Root Port #5
             vendor: Intel Corporation
             physical id: 1c.4
             bus info: pci@0000:00:1c.4
             version: e3
             width: 32 bits
             clock: 33MHz
             capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
             configuration: driver=pcieport
             resources: irq:45 ioport:4000(size=12288) memory:c1700000-cd7fffff ioport:cd800000(size=201326592)
        *-pci:4
             description: PCI bridge
             product: Wildcat Point-LP PCI Express Root Port #6
             vendor: Intel Corporation
             physical id: 1c.5
             bus info: pci@0000:00:1c.5
             version: e3
             width: 32 bits
             clock: 33MHz
             capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
             configuration: driver=pcieport
             resources: irq:46 memory:c1300000-c13fffff
           *-storage
                description: SATA controller
                product: Samsung Electronics Co Ltd
                vendor: Samsung Electronics Co Ltd
                physical id: 0
                bus info: pci@0000:04:00.0
                version: 01
                width: 32 bits
                clock: 33MHz
                capabilities: storage pm msi pciexpress ahci_1.0 bus_master cap_list
                configuration: driver=ahci latency=0
                resources: irq:48 memory:c1300000-c1301fff
        *-isa
             description: ISA bridge
             product: Wildcat Point-LP LPC Controller
             vendor: Intel Corporation
             physical id: 1f
             bus info: pci@0000:00:1f.0
             version: 03
             width: 32 bits
             clock: 33MHz
             capabilities: isa bus_master cap_list
             configuration: driver=lpc_ich latency=0
             resources: irq:0
        *-serial UNCLAIMED
             description: SMBus
             product: Wildcat Point-LP SMBus Controller
             vendor: Intel Corporation
             physical id: 1f.3
             bus info: pci@0000:00:1f.3
             version: 03
             width: 64 bits
             clock: 33MHz
             configuration: latency=0
             resources: memory:c161b000-c161b0ff ioport:efa0(size=32)
        *-generic UNCLAIMED
             description: Signal processing controller
             product: Wildcat Point-LP Thermal Management Controller
             vendor: Intel Corporation
             physical id: 1f.6
             bus info: pci@0000:00:1f.6
             version: 03
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi bus_master cap_list
             configuration: latency=0
             resources: memory:c1618000-c1618fff
     *-scsi
          physical id: 6
          logical name: scsi1
          capabilities: emulated
        *-disk
             description: ATA Disk
             product: APPLE SSD SM0256
             physical id: 0.0.0
             bus info: scsi@1:0.0.0
             logical name: /dev/sda
             version: JA0Q
             serial: S1W2NYAG331512
             size: 233GiB (251GB)
             capabilities: gpt-1.00 partitioned partitioned:gpt
             configuration: ansiversion=5 guid=4025fdbc-1c2d-45f7-864a-f87804b249da logicalsectorsize=512 sectorsize=4096
           *-volume:0
                description: Windows FAT volume
                vendor: mkfs.fat
                physical id: 1
                bus info: scsi@1:0.0.0,1
                logical name: /dev/sda1
                logical name: /boot/efi
                version: FAT16
                serial: 7eac-bc8f
                size: 199MiB
                capacity: 199MiB
                capabilities: boot fat initialized
                configuration: FATs=2 filesystem=fat mount.fstype=vfat mount.options=rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro name=EFI System Partition state=mounted
           *-volume:1
                description: data partition
                vendor: Windows
                physical id: 2
                bus info: scsi@1:0.0.0,2
                logical name: /dev/sda2
                logical name: /boot
                serial: 9477ed42-e463-49a1-9bbe-991cc1bff83e
                capacity: 499MiB
                configuration: mount.fstype=xfs mount.options=rw,seclabel,relatime,attr2,inode64,noquota state=mounted
           *-volume:2
                description: data partition
                vendor: Windows
                physical id: 3
                bus info: scsi@1:0.0.0,3
                logical name: /dev/sda3
                serial: 04b082aa-fb17-4f2a-8bc9-32bce650c819
                size: 147GiB
                capacity: 147GiB
                width: 512 bits
                capabilities: encrypted luks initialized
                configuration: bits=512 cipher=aes filesystem=luks hash=sha1 mode=xts-plain64 version=1
  *-battery
       physical id: 1
  *-network DISABLED
       description: Ethernet interface
       physical id: 2
       logical name: virbr0-nic
       serial: 52:54:00:e6:cc:48
       size: 10Mbit/s
       capabilities: ethernet physical
       configuration: autonegotiation=off broadcast=yes driver=tun driverversion=1.6 duplex=full link=no multicast=yes port=twisted pair speed=10Mbit/s

There are comments.

Videos from Bulgaria Web Summit 2015

We're full

Bulgaria Web Summit 2015 is over. The event was incredible and I had a lot of fun moderating the main room. We had many people coming from other countries and I've made lots of new friends. Thank you to everyone who attended!

You can find video recordings of all talks in the main room (in order of appearance) below:

Hope to see you next time in Sofia!

Mean while I learned about DEVit in Thessaloniki in May and another one in Zagreb in October. See you there :)

There are comments.

How to Find if LVM Volume is Thinly Provisioned

The latest versions of Red Hat Enterprise Linux, CentOS and Fedora all support LVM thin provisioning. Here's how to tell if a logical volume has been thinly provisioned or not.

Using lvs to display volume information look under the Attr column. Attribute values have the following meaning:

The lv_attr bits are:

1 Volume type: (C)ache, (m)irrored, (M)irrored without initial sync, (o)rigin, (O)rigin with merging snapshot, (r)aid, (R)aid without initial sync, (s)napshot, merging (S)napshot, (p)vmove, (v)irtual, mirror or raid (i)mage, mirror or raid (I)mage out-of-sync, mirror (l)og device, under (c)onversion, thin (V)olume, (t)hin pool, (T)hin pool data, raid or pool m(e)tadata or pool metadata spare.

This is how lvs looks like when you have a regular LVM setup:

# lvs
  LV   VG              Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rhel_dhcp70-183 -wi-ao---- 17,47g                                                    
  swap rhel_dhcp70-183 -wi-ao----  2,00g

When using LVM thin provisioning you're looking for the left-most attribute bit to be V, t or T. Here's an example:

# lvs
  LV     VG              Attr       LSize  Pool   Origin Data%  Meta%  Move Log Cpy%Sync Convert
  pool00 rhel_dhcp71-101 twi-aotz-- 14,55g               7,52   3,86                            
  root   rhel_dhcp71-101 Vwi-aotz-- 14,54g pool00        7,53                                   
  swap   rhel_dhcp71-101 -wi-ao----  2,00g

There are comments.

Tip: Linux-IO default LUN is 0 instead of 1

I've been testing iBFT in KVM which worked quite well with a RHEL 6 iSCSI target and failed miserably when I switched to RHEL 7 iSCSI target.

iPXE> dhcp net0
DHCP (net0 52:54:00:12:34:56)... ok
iPXE> set keep-san 1
iPXE> sanboot iscsi:10.0.0.1:::1:iqn.2015-05.com.example:target1
Could not open SAN device: Input/output error (http://ipxe.org/1d704539)
iPXE>

The error page says

Note that the default configuration when Linux is the target is for the disk to be LUN 1.

Well this is not true for Linux-IO (targetcli). The default LUN is 0!

iPXE> sanboot iscsi:10.0.0.1:::0:iqn.2015-05.com.example:target1
Registered SAN device 0x80
Booting from SAN device 0x80

Kudos to Bruno Goncalves from Red Hat in helping me debug this issue!

There are comments.

How to Configure targetcli to Listen on IPv4 and IPv6

In order to configure targetcli to listen on both IPv4 and IPv6 one has to delete the default IPv4 portal configuration and replace it with IPv6 instead.

# targetcli 
/>
/> cd iscsi/iqn.2015-04.com.example:target1/tpg1/portals
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ............................................................................................................ [Portals: 1]
  o- 0.0.0.0:3260 ............................................................................................................. [OK]
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20.../tpg1/portals> create ::0
Using default IP port 3260
Created network portal ::0:3260.
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ............................................................................................................ [Portals: 1]
  o- [::0]:3260 ............................................................................................................... [OK]
/iscsi/iqn.20.../tpg1/portals> exit

# netstat -antp | grep 3260
tcp6       0      0 :::3260                 :::*                    LISTEN

It appears the target is listening only on IPv6 but in fact it will also accept connections over IPv4. I've tried it.

This is a bit counter intuitive, however if you try adding the IPv6 address without removing the default IPv4 one targetcli will throw an error:

/iscsi/iqn.20.../tpg1/portals> create ::0
Using default IP port 3260
Could not create NetworkPortal in configFS.
/>

For more information about targetcli usage see my previous post How to Configure iSCSI Target on Red Hat Enterprise Linux 7.

There are comments.

How to Configure iSCSI Target on Red Hat Enterprise Linux 7

Linux-IO (LIO) Target is an open-source implementation of the SCSI target that has become the standard one included in the Linux kernel and the one present in Red Hat Enterprise Linux 7. The popular scsi-target-utils package is replaced by the newer targetcli which makes configuring a software iSCSI target quite different.

In earlier versions one had to edit the /etc/tgtd/targets.conf file and service tgtd restart. Here is an example configuration:

<target iqn.2008-09.com.example:server.target1>
    backing-store /dev/vg_iscsi/lv_lun1
    backing-store /dev/vg_iscsi/lv_lun2

    incominguser user2 secretpass23
    outgoinguser userA secretpassA
</target>

targetcli can be used either as an interactive shell or as stand alone commands. Here is an example shell session which creates a file-based disk image. Comments are provided inline:

# yum install -y targetcli
# systemctl enable target

# targetcli 

# first create a disk image with the name of disk1. All files are sparsely created.

/> backstores/fileio create disk1 /var/lib/libvirt/images/disk1.img 10G
Created fileio disk1 with size 10737418240

# create an iSCSI target. NB: this only defines the target

/> iscsi/ create iqn.2015-04.com.example:target1
Created target iqn.2015-04.com.example:target1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

# TPGs (Target Portal Groups) allow the iSCSI to support multiple complete
# configurations within one target. This is useful for complex quality-of-service
# configurations. targetcli will automatically create one TPG when the target
# is created, and almost all setups only need one.

# switch to TPG definition for our target

/> cd iscsi/iqn.2015-04.com.example:target1/tpg1

# list the contents

/iscsi/iqn.20...:target1/tpg1> ls 
o- tpg1 ..................................................................................................... [no-gen-acls, no-auth]
  o- acls ................................................................................................................ [ACLs: 0]
  o- luns ................................................................................................................ [LUNs: 0]
  o- portals .......................................................................................................... [Portals: 1]
    o- 0.0.0.0:3260 ........................................................................................................... [OK]

# create a portal aka IP:port pairs which expose the target on the network

/iscsi/iqn.20...:target1/tpg1> portals/ create
Using default IP port 3260
Binding to INADDR_ANY (0.0.0.0)
This NetworkPortal already exists in configFS.

# create logical units (LUNs) aka disks inside our target
# in other words bind the target to its on-disk storage

/iscsi/iqn.20...:target1/tpg1> luns/ create /backstores/fileio/disk1
Created LUN 0.

# disable authentication

/iscsi/iqn.20...:target1/tpg1> set attribute authentication=0
Parameter authentication is now '0'.

# enable read/write mode

/iscsi/iqn.20...:target1/tpg1> set attribute demo_mode_write_protect=0
Parameter demo_mode_write_protect is now '0'.

# Enable generate_node_acls mode. This can be thought of as 
# "ignore ACLs mode" -- both  authentication and LUN mapping
# will then use the TPG settings.

/iscsi/iqn.20...:target1/tpg1> set attribute generate_node_acls=1
Parameter generate_node_acls is now '1'.

/iscsi/iqn.20...:target1/tpg1> ls
o- tpg1 ........................................................................................................ [gen-acls, no-auth]
  o- acls ................................................................................................................ [ACLs: 0]
  o- luns ................................................................................................................ [LUNs: 1]
  | o- lun0 ..................................................................... [fileio/disk1 (/var/lib/libvirt/images/disk1.img)]
  o- portals .......................................................................................................... [Portals: 1]
    o- 0.0.0.0:3260 ........................................................................................................... [OK]

# exit or Ctrl+D will save the configuration under /etc/target/saveconfig.json

/iscsi/iqn.20...:target1/tpg1> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json

# after creating a second target the layout looks like this

/> ls
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 0]
  | o- fileio ................................................................................................. [Storage Objects: 2]
  | | o- disk1 .................................................. [/var/lib/libvirt/images/disk1.img (10.0GiB) write-back activated]
  | | o- disk2 .................................................. [/var/lib/libvirt/images/disk2.img (10.0GiB) write-back activated]
  | o- pscsi .................................................................................................. [Storage Objects: 0]
  | o- ramdisk ................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................ [Targets: 2]
  | o- iqn.2015-04.com.example:target1 ................................................................................... [TPGs: 1]
  | | o- tpg1 .................................................................................................. [gen-acls, no-auth]
  | |   o- acls .......................................................................................................... [ACLs: 0]
  | |   o- luns .......................................................................................................... [LUNs: 1]
  | |   | o- lun0 ............................................................... [fileio/disk1 (/var/lib/libvirt/images/disk1.img)]
  | |   o- portals .................................................................................................... [Portals: 1]
  | |     o- 0.0.0.0:3260 ..................................................................................................... [OK]
  | o- iqn.2015-04.com.example:target2 ................................................................................... [TPGs: 1]
  |   o- tpg1 .................................................................................................. [gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 0]
  |     o- luns .......................................................................................................... [LUNs: 1]
  |     | o- lun0 ............................................................... [fileio/disk2 (/var/lib/libvirt/images/disk2.img)]
  |     o- portals .................................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ..................................................................................................... [OK]
  o- loopback ......................................................................................................... [Targets: 0]


# enable CHAP and Reverse CHAP (mutual) for both discovery and login authentication

# discovery authentication is enabled under the global iscsi node

/> cd /iscsi
/iscsi> set discovery_auth enable=1
/iscsi> set discovery_auth userid=IncomingUser
/iscsi> set discovery_auth password=SomePassword1
/iscsi> set discovery_auth mutual_userid=OutgoingUser
/iscsi> set discovery_auth mutual_password=AnotherPassword2

# login authentication is enabled either under the TPG node or under ACLs

/iscsi> cd iqn.2015-04.com.example:target1/tpg1
/iscsi/iqn.20...:target1/tpg1> set attribute authentication=1
/iscsi/iqn.20...:target1/tpg1> set auth userid=IncomingUser2
/iscsi/iqn.20...:target1/tpg1> set auth password=SomePassword3
/iscsi/iqn.20...:target1/tpg1> set auth mutual_userid=OutgoingUser2
/iscsi/iqn.20...:target1/tpg1> set auth mutual_password=AnotherPassword4
/iscsi/iqn.20...:target1/tpg1> exit

Hints:

  • activating targetcli service at boot is mandatory, otherwise your configuration won’t be read after a reboot
  • if you type cd targetcli will display an interactive node tree
  • after configuration is saved you don't need to restart anything
  • the old scsi-target-utils doesn't support discovery authentication
  • targetcli allows kernel memory to be shared as a block SCSI device via the ramdisk backstore. It also supports "nullio" mode, which discards all writes, and returns all-zeroes for reads.
  • I'm having troubles configuring portals to listen both on any IPv4 addresses and any IPv6 addresses the system has. I've still not figured that out entirely.

For more information please read Chapter 25 from Red Hat's Storage Administration Guide or checkout Red Hat Enterprise Linux 7 books on Amazon.

There are comments.

Mining E-mail Identities with Gravatar

Recently I've laid my hands on a list of little over 7000 email addresses. This begs the question how much of them are still in use and what for ?

My data is not fresh so I've uploaded the list to Facebook and created a custom audience. 2400 of 7129 addresses were recognized - 30% of these addresses are on Facebook and easy to target! Need to figure out which ones.

I could have tried some sort of batch search combined with the custom audience functionality but I didn't find an API for that and decided not to bother. Instead I've opted for Gravatar.

gravatars.sh
#!/bin/bash

while read LINE; do
    HASH=`echo -n $LINE | md5sum | cut -f1 -d' '`
    wget "http://gravatar.com/avatar/$HASH" -O "$LINE"
done < /dev/stdin

Feed gravatars.sh with the email list and it will download all images to the current working directory and use the address as the file name. After md5sum *@* | cut -f1 -d' ' | sort | uniq -c I quickly noticed the following:

  • 4563 addresses have the a1719586837f0fdac8835f74cf4ef04a check-sum; These are not found on Gravatar.
  • 2400 addresses have the d5fe5cbcc31cff5f8ac010db72eb000c check-sum. These are addresses which are registered with Gravatar but didn't bother to change the default image.
  • 166 remaining addresses, each with a different check-sum. These have their custom pictures uploaded to Gravatar and probably much more actively used.

A second check with Facebook reveals 900 out of these 2566 addresses were recognized. This begs the question is Facebook showing incorrect stats or are there 1500 addresses using Gravatar (or have used at some point) which are not on Facebook ?

At least some of the remaining 4000 addresses are still active and used to send emails. Next I will be looking for ways to identify them. Any suggestions and comments are more than welcome!

There are comments.


Page 7 / 16