diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+# 2.0.8 (2021-03-27)
+- update: make sure krb ticket exists before uploading source
+- spec: executable doc files now handled by ghc-rpm-macros
+- move dos2unix for revised DOS .cabal from download to spec build time
+- spec: do not enable testsuite for standalone package
+- spec: also bash-completion for simple-cmd-args
+- spec: for bash-completions use default not filenames
+- Stackage: use lts-17
+- pkgInstallMissing: also install ghc-rpm-macros
+- spec: make %cabal_test conditional explicit
+
 # 2.0.7 (2020-10-07)
 - spec: setup bash completions for optparse-applicative
 - spec: --ignore-missing to ignore deps not yet in hackage
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
-[![Build Status](https://travis-ci.org/juhp/cabal-rpm.png)](https://travis-ci.org/juhp/cabal-rpm)
+# cabal-rpm
+
+[![GitHub CI](https://github.com/juhp/cabal-rpm/workflows/CI/badge.svg)](https://github.com/juhp/cabal-rpm/actions)
 [![Hackage](https://img.shields.io/hackage/v/cabal-rpm.png)](https://hackage.haskell.org/package/cabal-rpm)
 [![Stackage LTS](https://stackage.org/package/cabal-rpm/badge/lts)](https://stackage.org/lts/package/cabal-rpm)
 [![Stackage Nightly](https://stackage.org/package/cabal-rpm/badge/nightly)](https://stackage.org/nightly/package/cabal-rpm)
 [![license](https://img.shields.io/badge/license-GPLv3+-brightgreen.svg)](https://www.gnu.org/licenses/gpl.html)
-
-# cabal-rpm
 
 cabal-rpm is a tool for RPM packaging of Haskell Cabal-based packages.
 Firstly it creates RPM spec files from the .cabal files of Haskell packages.
diff --git a/TODO b/TODO
--- a/TODO
+++ b/TODO
@@ -1,3 +1,5 @@
+- spec: hardcode list of dummy packages (mtl-compat, etc)
+
 - update prints package name twice (due to spec generation?)
 - in container/clean install: cblrpm local HsOpenSSL fails:
 cabal-rpm: HsOpenSSL-0.11.4.17: getDirectoryContents:openDirStream: does not exist (No such file or directory)
@@ -27,7 +29,6 @@
 - update --stream should add --stream to header
 - cleanup .Cblrpm
 - update/diff should remove dropped subpackages
-- check krb5 ticket before attempting source upload
 
 - --without-tests/--disable-tests/--no-tests (also for install etc)
   - or default to no tests and explicitly enable with --tests
diff --git a/cabal-rpm.cabal b/cabal-rpm.cabal
--- a/cabal-rpm.cabal
+++ b/cabal-rpm.cabal
@@ -1,5 +1,5 @@
 Name:                cabal-rpm
-Version:             2.0.7
+Version:             2.0.8
 Synopsis:            RPM packaging tool for Haskell Cabal-based packages
 Description:
     This package provides a RPM packaging tool for Haskell Cabal-based packages.
@@ -19,7 +19,7 @@
 Author:              Jens Petersen <juhpetersen@gmail.com>, Bryan O'Sullivan <bos@serpentine.com>
 Maintainer:          Jens Petersen <petersen@fedoraproject.org>
 Copyright:           2007-2008 Bryan O'Sullivan <bos@serpentine.com>,
-                     2012-2020 Jens Petersen <juhpetersen@gmail.com>
+                     2012-2021 Jens Petersen <juhpetersen@gmail.com>
 Category:            Distribution
 Build-type:          Simple
 Extra-doc-files:     ChangeLog README.md TODO
diff --git a/src/Commands/Spec.hs b/src/Commands/Spec.hs
--- a/src/Commands/Spec.hs
+++ b/src/Commands/Spec.hs
@@ -32,6 +32,7 @@
 #if MIN_VERSION_simple_cmd(0,2,2)
                   grep,
 #endif
+                  cmd,
                   cmdMaybe,
                   grep_, removePrefix)
 import Stackage (defaultLTS)
@@ -73,7 +74,7 @@
 #endif
 import Distribution.Verbosity (Verbosity)
 
-import System.Directory (doesDirectoryExist, doesFileExist, executable, getPermissions)
+import System.Directory (doesFileExist)
 import System.IO     (IOMode (..), hClose, hPutStrLn, openFile)
 #if defined(MIN_VERSION_time) && MIN_VERSION_time(1,5,0)
 import Data.Time.Format (defaultTimeLocale)
@@ -267,11 +268,11 @@
 
   let (testsuiteDeps,testsuiteTools) = testsuiteDependencies' pkgDesc
   missTestDeps <- filterM (notSrcOrInst . RpmHsLib Devel) testsuiteDeps
-  let testable = notNull testsuiteDeps && (null missTestDeps || testsuite)
+  let testable = notNull testsuiteDeps && not standalone && (null missTestDeps || testsuite)
   if testable then do
     put "%bcond_without tests"
     putNewline
-    else unless (null testsuiteDeps) $ do
+    else unless (null testsuiteDeps || standalone) $ do
          put $ "# testsuite missing deps: " ++ unwords (map display missTestDeps)
          putNewline
   let version = display $ pkgVersion pkgid
@@ -285,6 +286,11 @@
         have <- doesFileExist local
         if have then grep_ "x-revision" local else return False
       else return False
+  revisedDOS <- if revised then do
+    filetype <- cmd "file" ["-b", display pkgid <.> "cabal"]
+    return $ "CRLF" `isInfixOf` filetype
+    else return False
+
   putHdr "Name" (if binlib then "%{pkg_name}" else basename)
   putHdr "Version" version
   when hasSubpkgs $
@@ -306,6 +312,7 @@
   put "# End cabal-rpm sources"
   putNewline
   put "# Begin cabal-rpm deps:"
+  when revisedDOS $ putHdr "BuildRequires" "dos2unix"
   when (mkPackageName "Cabal" `notElem` buildDeps pkgdeps || not hasLib || notNull (setupDeps pkgdeps)) $ do
 --    put "# Setup"
     when (mkPackageName "Cabal" `notElem` buildDeps pkgdeps) $
@@ -441,23 +448,9 @@
   put $ "%setup -q" ++ (if pkgname /= name then " -n" +-+ pkgver else "") +-+
     (if hasSubpkgs then unwords (map (("-a" ++) . fst) $ number subpkgs) else  "")
   when revised $
-    put $ "cp -bp %{SOURCE" ++ show (1 + length subpkgs) ++ "}" +-+ pkg_name <.> "cabal"
-  let extrasourcedocs = sort $ filter (`elem` docs) $ extraSrcFiles pkgDesc
-  unless (null extrasourcedocs) $ do
-    let pkgdir = display pkgid
-    havePrep <- doesDirectoryExist pkgdir
-    if havePrep then do
-      executabledocs <- do
-        exedocs <- filterM (fmap executable . getPermissions . (pkgdir </>)) extrasourcedocs
-        if notNull exedocs then
-          return exedocs
-          else do
-          if topSpecExists then do
-            ((words . removePrefix "chmod a-x ") =<<) <$> grep "^chmod a-x " topSpecFile
-          else return []
-      unless (null executabledocs) $
-        put $ "chmod a-x" +-+ unwords executabledocs
-      else warn verbose $ "Check file permissions of" +-+ unwords extrasourcedocs
+    put $ (if revisedDOS
+           then "dos2unix -k -n" else "cp -bp")
+          +-+ "%{SOURCE" ++ show (1 + length subpkgs) ++ "}" +-+ pkg_name <.> "cabal"
   put "# End cabal-rpm setup"
   sectionNewline
 
@@ -515,10 +508,11 @@
   let execs = sort $ map exeName $ filter isBuildable $ executables pkgDesc
       execNaming p = let pn = unUnqualComponentName p in
                      if pn == name then "%{name}" else pn
+      bashCompletions = hasExecPkg && any ((`elem` buildDeps pkgdeps) . mkPackageName) ["optparse-applicative","simple-cmd-args"]
 
-  when (hasExecPkg && mkPackageName "optparse-applicative" `elem` buildDeps pkgdeps) $ do
+  when bashCompletions $ do
     put "mkdir -p %{buildroot}%{_datadir}/bash-completion/completions/"
-    mapM_ (\ ex -> let exn = execNaming ex in put ("%{buildroot}%{_bindir}" </> exn ++ " --bash-completion-script " ++ exn ++ " > %{buildroot}%{_datadir}/bash-completion/completions" </> exn)) execs
+    mapM_ (\ ex -> let exn = execNaming ex in put ("%{buildroot}%{_bindir}" </> exn ++ " --bash-completion-script " ++ exn ++ " | sed s/filenames/default/ > %{buildroot}%{_datadir}/bash-completion/completions" </> exn)) execs
 
   put "# End cabal-rpm install"
   sectionNewline
@@ -542,7 +536,8 @@
     mapM_ (put . ("%{_bindir}" </>) . execNaming) execs
     unless (common || null datafiles) $
       put $ "%{_datadir}" </> pkgver
-    when (hasExecPkg && mkPackageName "optparse-applicative" `elem` buildDeps pkgdeps) $ mapM_ (put . ("%{_datadir}/bash-completion/completions" </>) . execNaming) execs
+    when bashCompletions $
+      mapM_ (put . ("%{_datadir}/bash-completion/completions" </>) . execNaming) execs
     put "# End cabal-rpm files"
     sectionNewline
 
diff --git a/src/Commands/Update.hs b/src/Commands/Update.hs
--- a/src/Commands/Update.hs
+++ b/src/Commands/Update.hs
@@ -42,7 +42,8 @@
 import Control.Applicative ((<$>))
 #endif
 import Control.Monad.Extra
-import Data.Maybe (isJust)
+import Data.List
+import Data.Maybe
 import Distribution.Text (display)
 import Distribution.Verbosity (silent)
 import System.Directory (createDirectoryIfMissing, doesDirectoryExist,
@@ -127,6 +128,7 @@
           distgit <- grepGitConfig "\\(pkgs\\|src\\)."
           when (rwGit && distgit) $ do
             when updated $ do
+              krbTicket
               cmd_ "fedpkg" ["new-sources", display newPkgId <.> "tar.gz"]
               when subpkg $ do
                 shell_ $ "cat sources >>" +-+ "sources.cblrpm"
@@ -160,3 +162,14 @@
 gitBool c args =
   cmdBool "git" (c:args)
 #endif
+
+krbTicket :: IO ()
+krbTicket = do
+  krb <- words . fromMaybe "" . find ("@FEDORAPROJECT.ORG" `isInfixOf`) . lines <$> cmd "klist" ["-l"]
+  if null krb
+    then error' "No krb5 ticket found for FEDORAPROJECT.ORG"
+    else
+    when (last krb == "(Expired)") $ do
+      putStrLn $ unwords krb
+      cmd_ "kinit" [head krb]
+      putStrLn ""
diff --git a/src/Dependencies.hs b/src/Dependencies.hs
--- a/src/Dependencies.hs
+++ b/src/Dependencies.hs
@@ -270,7 +270,8 @@
       mapM_ (putStrLn . display) repopkgs
       -- fedora <- rpmEval "%fedora"
       -- let nogpgcheck = ["--nogpgcheck" | fedora `elem` []]
-      rpmInstall True $ map (showRpm . RpmHsLib Prof) repopkgs
+      noMacros <- notInstalled (RpmOther "ghc-rpm-macros")
+      rpmInstall True $ (map (showRpm . RpmHsLib Prof) repopkgs) ++ ["ghc-rpm-macros" | noMacros]
     return missing'
       where
         repoqueryPackageConf :: String -> PackageName -> IO (Maybe PackageName)
diff --git a/src/PackageUtils.hs b/src/PackageUtils.hs
--- a/src/PackageUtils.hs
+++ b/src/PackageUtils.hs
@@ -190,8 +190,7 @@
       then return False
       else do
       revised <- grep_ "x-revision" file
-      when revised $ do
-        cmd_ "dos2unix" ["--keepdate", file]
+      when revised $
         renameFile file $ dir </> display pkgid <.> "cabal"
       return revised
 
diff --git a/src/Stackage.hs b/src/Stackage.hs
--- a/src/Stackage.hs
+++ b/src/Stackage.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module      :  Stackage
--- Copyright   :  (C) 2017-2020  Jens Petersen
+-- Copyright   :  (C) 2017-2021  Jens Petersen
 --
 -- Maintainer  :  Jens Petersen <petersen@fedoraproject.org>
 -- Stability   :  alpha
@@ -41,10 +41,10 @@
 import Types
 
 defaultLTS :: Stream
-defaultLTS = LTS 16
+defaultLTS = LTS 17
 
 latestLTS :: Stream
-latestLTS = LTS 16
+latestLTS = LTS 17
 
 stackageList :: Stream -> PackageName -> IO (Maybe PackageIdentifier)
 stackageList stream pkg = do
